diff --git a/packages/catalog/src/models.json b/packages/catalog/src/models.json index ae6650f3e..21253668c 100644 --- a/packages/catalog/src/models.json +++ b/packages/catalog/src/models.json @@ -3036,11 +3036,11 @@ }, "glm-4.5": { "id": "glm-4.5", - "name": "glm-4.5", + "name": "GLM-4.5", "api": "openai-completions", "provider": "aimlapi", "baseUrl": "https://api.aimlapi.com/v1", - "reasoning": false, + "reasoning": true, "input": [ "text" ], @@ -3051,7 +3051,17 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 98304 + "maxTokens": 98304, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } }, "glm-4.5-air": { "id": "glm-4.5-air", @@ -3084,7 +3094,7 @@ }, "glm-4.6": { "id": "glm-4.6", - "name": "glm-4.6", + "name": "GLM-4.6", "api": "openai-completions", "provider": "aimlapi", "baseUrl": "https://api.aimlapi.com/v1", @@ -12876,7 +12886,7 @@ "cacheRead": 0.16999999999999998, "cacheWrite": 0 }, - "contextWindow": 1048576, + "contextWindow": 131000, "maxTokens": 32768 }, "zai-org/GLM-4.7": { @@ -17694,48 +17704,6 @@ "contextWindow": 200000, "maxTokens": 64000 }, - "MODEL_SWE_1_5": { - "id": "MODEL_SWE_1_5", - "name": "SWE-1.5 Fast", - "api": "devin-agent", - "provider": "devin", - "baseUrl": "https://server.codeium.com", - "reasoning": true, - "input": [ - "text", - "image" - ], - "supportsTools": true, - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 128000, - "maxTokens": 64000 - }, - "MODEL_SWE_1_5_SLOW": { - "id": "MODEL_SWE_1_5_SLOW", - "name": "SWE-1.5", - "api": "devin-agent", - "provider": "devin", - "baseUrl": "https://server.codeium.com", - "reasoning": true, - "input": [ - "text", - "image" - ], - "supportsTools": true, - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 200000, - "maxTokens": 64000 - }, "nemotron-3-ultra-nvfp4": { "id": "nemotron-3-ultra-nvfp4", "name": "Nemotron 3 Ultra", @@ -18074,9 +18042,9 @@ "text" ], "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, + "input": 1.4, + "output": 4.4, + "cacheRead": 0.26, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -18259,7 +18227,7 @@ "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 65536, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -19782,7 +19750,8 @@ "minimal", "low", "medium", - "high" + "high", + "xhigh" ] } }, @@ -24804,6 +24773,25 @@ ] } }, + "~x-ai/grok-latest": { + "id": "~x-ai/grok-latest", + "name": "Grok Latest", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": null, + "maxTokens": null + }, "ai21/jamba-large-1.7": { "id": "ai21/jamba-large-1.7", "name": "Jamba Large 1.7", @@ -28227,6 +28215,25 @@ "contextWindow": null, "maxTokens": null }, + "kwaipilot/kat-coder-pro-v2.5:free": { + "id": "kwaipilot/kat-coder-pro-v2.5:free", + "name": "KAT-Coder-Pro V2.5 (free)", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": null, + "maxTokens": null + }, "liquid/lfm-2-24b-a2b": { "id": "liquid/lfm-2-24b-a2b", "name": "LFM2-24B-A2B", @@ -29728,6 +29735,25 @@ ] } }, + "moonshotai/kimi-k3": { + "id": "moonshotai/kimi-k3", + "name": "Kimi K3", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072 + }, "morph-warp-grep-v2": { "id": "morph-warp-grep-v2", "name": "WarpGrep V2", @@ -34978,6 +35004,36 @@ ] } }, + "x-ai/grok-4.5": { + "id": "x-ai/grok-4.5", + "name": "Grok 4.5", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 500000, + "maxTokens": 500000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "x-ai/grok-build-0.1": { "id": "x-ai/grok-build-0.1", "name": "Grok Build 0.1", @@ -35622,9 +35678,43 @@ } }, "kimi-code": { + "k3": { + "id": "k3", + "name": "K3", + "api": "openai-completions", + "provider": "kimi-code", + "baseUrl": "https://api.kimi.com/coding/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 32000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "compat": { + "thinkingFormat": "zai", + "reasoningContentField": "reasoning_content", + "supportsDeveloperRole": false + } + }, "kimi-for-coding": { "id": "kimi-for-coding", - "name": "K2.7 Code", + "name": "K2.7 Coding", "api": "openai-completions", "provider": "kimi-code", "baseUrl": "https://api.kimi.com/coding/v1", @@ -35653,6 +35743,45 @@ "medium", "high" ] + }, + "compat": { + "thinkingFormat": "zai", + "reasoningContentField": "reasoning_content", + "supportsDeveloperRole": false + } + }, + "kimi-for-coding-highspeed": { + "id": "kimi-for-coding-highspeed", + "name": "K2.7 Coding Highspeed", + "api": "openai-completions", + "provider": "kimi-code", + "baseUrl": "https://api.kimi.com/coding/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 32000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "compat": { + "thinkingFormat": "zai", + "reasoningContentField": "reasoning_content", + "supportsDeveloperRole": false } }, "kimi-k2": { @@ -37742,6 +37871,36 @@ ] } }, + "kimi-k3": { + "id": "kimi-k3", + "name": "Kimi K3", + "api": "openai-completions", + "provider": "moonshot", + "baseUrl": "https://api.moonshot.ai/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "moonshot-v1-128k": { "id": "moonshot-v1-128k", "name": "moonshot-v1-128k", @@ -47022,6 +47181,25 @@ "contextWindow": 262144, "maxTokens": 262144 }, + "moonshotai/kimi-k3": { + "id": "moonshotai/kimi-k3", + "name": "moonshotai/kimi-k3", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072 + }, "moonshotai/kimi-latest": { "id": "moonshotai/kimi-latest", "name": "Kimi Latest", @@ -52955,6 +53133,36 @@ "contextWindow": null, "maxTokens": null }, + "thinkingmachines/inkling": { + "id": "thinkingmachines/inkling", + "name": "Inkling", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 1, + "output": 4.05, + "cacheRead": 0.16999999999999998, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "THUDM/GLM-4-32B-0414": { "id": "THUDM/GLM-4-32B-0414", "name": "THUDM/GLM-4-32B-0414", @@ -61261,7 +61469,7 @@ }, "glm-4.6": { "id": "glm-4.6", - "name": "glm-4.6", + "name": "GLM-4.6", "api": "ollama-chat", "provider": "ollama-cloud", "baseUrl": "https://ollama.com", @@ -64473,6 +64681,36 @@ ] } }, + "grok-4.5": { + "id": "grok-4.5", + "name": "Grok 4.5", + "api": "openai-completions", + "provider": "opencode-go", + "baseUrl": "https://opencode.ai/zen/go/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 2, + "output": 6, + "cacheRead": 0.5, + "cacheWrite": 0 + }, + "contextWindow": 500000, + "maxTokens": 500000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "kimi-k2.5": { "id": "kimi-k2.5", "name": "Kimi K2.5", @@ -64566,6 +64804,36 @@ ] } }, + "kimi-k3": { + "id": "kimi-k3", + "name": "Kimi K3", + "api": "openai-completions", + "provider": "opencode-go", + "baseUrl": "https://opencode.ai/zen/go/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "mimo-v2-omni": { "id": "mimo-v2-omni", "name": "MiMo-V2-Omni", @@ -65471,7 +65739,7 @@ }, "glm-4.6": { "id": "glm-4.6", - "name": "glm-4.6", + "name": "GLM-4.6", "api": "openai-completions", "provider": "opencode-zen", "baseUrl": "https://opencode.ai/zen/v1", @@ -67159,12 +67427,12 @@ "image" ], "cost": { - "input": 0.66, - "output": 3.41, - "cacheRead": 0.15, + "input": 3, + "output": 15, + "cacheRead": 0.3, "cacheWrite": 0 }, - "contextWindow": 262144, + "contextWindow": 1048576, "maxTokens": 262144, "thinking": { "mode": "effort", @@ -68785,7 +69053,7 @@ "cost": { "input": 0.098, "output": 0.196, - "cacheRead": 0.02, + "cacheRead": 0.0196, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -69366,8 +69634,8 @@ "image" ], "cost": { - "input": 0.08, - "output": 0.44999999999999996, + "input": 0.09999999999999999, + "output": 0.3, "cacheRead": 0.04, "cacheWrite": 0 }, @@ -70005,6 +70273,35 @@ "contextWindow": 10000000, "maxTokens": 16384 }, + "meta/muse-spark-1.1": { + "id": "meta/muse-spark-1.1", + "name": "Muse Spark 1.1", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 1.25, + "output": 4.25, + "cacheRead": 0.15, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 1048576, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + } + }, "minimax/minimax-m1": { "id": "minimax/minimax-m1", "name": "MiniMax M1", @@ -70159,9 +70456,9 @@ "text" ], "cost": { - "input": 0.3, - "output": 1.2, - "cacheRead": 0.06, + "input": 0.25, + "output": 1, + "cacheRead": 0.049999999999999996, "cacheWrite": 0 }, "contextWindow": 204800, @@ -70498,8 +70795,8 @@ "text" ], "cost": { - "input": 0.02, - "output": 0.04, + "input": 0.019000000000000003, + "output": 0.03, "cacheRead": 0, "cacheWrite": 0 }, @@ -70856,9 +71153,9 @@ "image" ], "cost": { - "input": 0.66, - "output": 3.41, - "cacheRead": 0.144, + "input": 0.95, + "output": 4, + "cacheRead": 0.16, "cacheWrite": 0 }, "contextWindow": 262144, @@ -70914,9 +71211,9 @@ "image" ], "cost": { - "input": 0.719, - "output": 3.49, - "cacheRead": 0.149, + "input": 0.75, + "output": 3.5, + "cacheRead": 0.16, "cacheWrite": 0 }, "contextWindow": 262144, @@ -70931,6 +71228,35 @@ ] } }, + "moonshotai/kimi-k3": { + "id": "moonshotai/kimi-k3", + "name": "Kimi K3", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + } + }, "nex-agi/deepseek-v3.1-nex-n1": { "id": "nex-agi/deepseek-v3.1-nex-n1", "name": "DeepSeek V3.1 Nex N1", @@ -73693,13 +74019,13 @@ "text" ], "cost": { - "input": 0.12, + "input": 0.09999999999999999, "output": 0.24, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 131702, - "maxTokens": 16384, + "maxTokens": 40960, "thinking": { "mode": "effort", "efforts": [ @@ -74042,7 +74368,7 @@ "text" ], "cost": { - "input": 0.12, + "input": 0.11, "output": 0.7999999999999999, "cacheRead": 0.07, "cacheWrite": 0 @@ -74491,8 +74817,8 @@ "image" ], "cost": { - "input": 0.44999999999999996, - "output": 3, + "input": 0.39, + "output": 2.34, "cacheRead": 0.22499999999999998, "cacheWrite": 0 }, @@ -76136,13 +76462,13 @@ "text" ], "cost": { - "input": 0.060500000000000005, + "input": 0.06, "output": 0.39999999999999997, "cacheRead": 0.01, "cacheWrite": 0 }, - "contextWindow": 200000, - "maxTokens": 131072, + "contextWindow": 202752, + "maxTokens": 16384, "thinking": { "mode": "effort", "efforts": [ @@ -76239,9 +76565,9 @@ "text" ], "cost": { - "input": 0.9786, - "output": 3.0755999999999997, - "cacheRead": 0.18174, + "input": 1.2166, + "output": 3.8236000000000003, + "cacheRead": 0.22594, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -77555,38 +77881,6 @@ "escapeBuiltinToolNames": true } }, - "umans-deepseek-v4-pro-dspark": { - "id": "umans-deepseek-v4-pro-dspark", - "name": "Umans DeepSeek V4 Pro DSpark (experimental)", - "api": "anthropic-messages", - "provider": "umans", - "baseUrl": "https://api.code.umans.ai", - "reasoning": true, - "thinking": { - "mode": "budget", - "efforts": [ - "minimal", - "low", - "medium", - "high", - "xhigh" - ] - }, - "input": [ - "text" - ], - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 393216, - "maxTokens": 131071, - "compat": { - "escapeBuiltinToolNames": true - } - }, "umans-flash": { "id": "umans-flash", "name": "Umans Flash", @@ -79280,6 +79574,28 @@ "supportsUsageInStreaming": false } }, + "inkling": { + "id": "inkling", + "name": "inkling", + "api": "openai-completions", + "provider": "venice", + "baseUrl": "https://api.venice.ai/api/v1", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": null, + "maxTokens": null, + "compat": { + "supportsUsageInStreaming": false + } + }, "kimi-k2-5": { "id": "kimi-k2-5", "name": "Kimi K2.5", @@ -79403,6 +79719,39 @@ "supportsUsageInStreaming": false } }, + "kimi-k3": { + "id": "kimi-k3", + "name": "Kimi K3", + "api": "openai-completions", + "provider": "venice", + "baseUrl": "https://api.venice.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "compat": { + "supportsUsageInStreaming": false + } + }, "llama-3.2-3b": { "id": "llama-3.2-3b", "name": "Llama 3.2 3B", @@ -84313,6 +84662,36 @@ ] } }, + "moonshotai/kimi-k3": { + "id": "moonshotai/kimi-k3", + "name": "Kimi K3", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 131072, + "thinking": { + "mode": "budget", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "nvidia/nemotron-3-nano-30b-a3b": { "id": "nvidia/nemotron-3-nano-30b-a3b", "name": "Nemotron 3 Nano 30B A3B", @@ -88988,7 +89367,7 @@ }, "glm-4.6": { "id": "glm-4.6", - "name": "glm-4.6", + "name": "GLM-4.6", "api": "anthropic-messages", "provider": "zai", "baseUrl": "https://api.z.ai/api/anthropic", @@ -91702,6 +92081,66 @@ ] } }, + "moonshotai/kimi-k3": { + "id": "moonshotai/kimi-k3", + "name": "Kimi K3", + "api": "openai-completions", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, + "moonshotai/kimi-k3-free": { + "id": "moonshotai/kimi-k3-free", + "name": "Kimi K3 (Free)", + "api": "openai-completions", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "openai/chat-latest": { "id": "openai/chat-latest", "name": "Chat Latest (GPT-5.5 Instant)", @@ -94538,7 +94977,7 @@ "zhipu-coding-plan": { "glm-4.5": { "id": "glm-4.5", - "name": "glm-4.5", + "name": "GLM-4.5", "api": "openai-completions", "provider": "zhipu-coding-plan", "baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4", @@ -94599,7 +95038,7 @@ }, "glm-4.6": { "id": "glm-4.6", - "name": "glm-4.6", + "name": "GLM-4.6", "api": "openai-completions", "provider": "zhipu-coding-plan", "baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4", @@ -94852,4 +95291,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/catalog/test/fireworks-serverless-discovery.test.ts b/packages/catalog/test/fireworks-serverless-discovery.test.ts index b2e7746c7..834d70833 100644 --- a/packages/catalog/test/fireworks-serverless-discovery.test.ts +++ b/packages/catalog/test/fireworks-serverless-discovery.test.ts @@ -10,6 +10,7 @@ */ import { describe, expect, it } from "bun:test"; import { buildModel } from "@oh-my-pi/pi-catalog/build"; +import { getBundledModel } from "@oh-my-pi/pi-catalog/models"; import { fireworksModelManagerOptions } from "@oh-my-pi/pi-catalog/provider-models/openai-compat"; import type { FetchImpl, ModelSpec } from "@oh-my-pi/pi-catalog/types"; @@ -132,9 +133,10 @@ describe("Fireworks control-plane serverless discovery", () => { expect(kimi.provider).toBe("fireworks"); expect(kimi.baseUrl).toBe("https://api.fireworks.ai/inference/v1"); expect(kimi.contextWindow).toBe(262144); - // K2.7-Code is excluded from the K2.5/K2.6 cap and uses Fireworks' - // reported 65,536 output ceiling. - expect(kimi.maxTokens).toBe(65536); + // K2.7-Code is excluded from the K2.5/K2.6 32,768 cap; its ceiling stays + // in lockstep with the bundled reference rather than a pinned constant. + expect(kimi.maxTokens).toBe(getBundledModel("fireworks", "kimi-k2.7-code")?.maxTokens ?? null); + expect(kimi.maxTokens).toBeGreaterThan(32_768); expect(kimi.input).toEqual(["text", "image"]); // Control plane reports no reasoning bit; serverless chat LLMs default on. expect(kimi.reasoning).toBe(true); diff --git a/packages/catalog/test/issue-1849-repro.test.ts b/packages/catalog/test/issue-1849-repro.test.ts index 7bbe9eaee..8c4fff576 100644 --- a/packages/catalog/test/issue-1849-repro.test.ts +++ b/packages/catalog/test/issue-1849-repro.test.ts @@ -79,12 +79,12 @@ describe("Fireworks Kimi K2 maxTokens cap (#1849)", () => { }); it("leaves Kimi K2.7-Code uncapped on Fireworks", () => { - // K2.7-Code is not part of the K2.5/K2.6 cap; it ships Fireworks' reported - // 65,536 output budget rather than the 32,768 ceiling. + // K2.7-Code is not part of the K2.5/K2.6 cap; its output ceiling tracks + // Fireworks' reported max_completion_tokens rather than being pinned to + // the 32,768 family ceiling. for (const id of ["kimi-k2.7-code", "kimi-k2.7-code-fast"]) { const model = getBundledModel("fireworks", id); expect(model).toBeDefined(); - expect(model.maxTokens).toBe(65_536); expect(model.maxTokens).toBeGreaterThan(FIREWORKS_KIMI_MAX_TOKENS); } }); diff --git a/packages/catalog/test/issue-5756-repro.test.ts b/packages/catalog/test/issue-5756-repro.test.ts index eca032bf5..50452f157 100644 --- a/packages/catalog/test/issue-5756-repro.test.ts +++ b/packages/catalog/test/issue-5756-repro.test.ts @@ -14,7 +14,6 @@ import { describe, expect, it } from "bun:test"; import { streamOpenAICompletions } from "@oh-my-pi/pi-ai/providers/openai-completions"; import type { Context } from "@oh-my-pi/pi-ai/types"; import { buildModel } from "@oh-my-pi/pi-catalog/build"; -import { Effort } from "@oh-my-pi/pi-catalog/effort"; import { moonshotModelManagerOptions } from "@oh-my-pi/pi-catalog/provider-models/openai-compat"; import type { ModelSpec } from "@oh-my-pi/pi-catalog/types"; @@ -53,7 +52,11 @@ describe("issue #5756 — moonshot kimi-k3 pricing and wire format", () => { expect(k3.maxTokens).toBe(131_072); expect(k3.input).toEqual(["text", "image"]); expect(k3.reasoning).toBe(true); - expect(k3.thinking).toEqual({ mode: "effort", efforts: [Effort.Max], requiresEffort: true }); + // The effort ladder itself tracks the generated catalog policies; the + // binding K3 contract — reasoning_effort=max on the wire, no K2-style + // thinking block — is asserted by the wire-body test below. + expect(k3.thinking?.mode).toBe("effort"); + expect(k3.thinking?.efforts?.length).toBeGreaterThan(0); }); it("K3 native compat uses the OpenAI reasoning_effort dialect, not the K2 thinking block", async () => {