diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index fb5c1f2a5..41506c50b 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -8,6 +8,7 @@ ### Fixed +- Fixed the Ollama chat adapter silently dropping `temperature`/`topP`: sampling params are now forwarded under the request's `options` alongside `num_predict`, so callers pinning greedy decode (e.g. session-title generation) actually affect the wire request. - Fixed OpenAI Responses turns ending silently after a provider-hosted web search that produced no visible answer: the turn is now classified as `pause_turn` so the agent automatically continues with the search results instead of stopping. - Fixed completed model streams retaining their provider concurrency permit until after completion became observable, without replacing provider results when lease cleanup fails ([#8284](https://github.com/can1357/oh-my-pi/pull/8284) by [@ethancawse](https://github.com/ethancawse)). - Fixed the DashScope compatible-mode text-only Qwen override (issue #1859) stripping images from `qwen3.8-max`, which became multimodal in the bundled catalog (image input, #8019). The `-max` guard now only vetoes image content for pre-3.8 SKUs, so `qwen3.8-max`/`qwen3.8-max-preview` and later flagships send `image_url` content — restoring `inspect_image` on those models configured against `dashscope.aliyuncs.com/compatible-mode/v1` ([#8305](https://github.com/can1357/oh-my-pi/issues/8305)). diff --git a/packages/ai/src/providers/ollama.ts b/packages/ai/src/providers/ollama.ts index f6e0b1e7d..7b6cc0242 100644 --- a/packages/ai/src/providers/ollama.ts +++ b/packages/ai/src/providers/ollama.ts @@ -328,15 +328,27 @@ function createChatBody(model: Model<"ollama-chat">, context: Context, options: const toolChoice = mapToolChoice(options?.toolChoice); const selectedTools = selectToolsForToolChoice(context.tools, options?.toolChoice); const tools = convertTools(selectedTools); + const runtimeOptions: { num_predict?: number; temperature?: number; top_p?: number } = {}; + let hasRuntimeOptions = false; + if (options?.maxTokens !== undefined && !model.omitMaxOutputTokens) { + runtimeOptions.num_predict = resolveNumPredict(model, options.maxTokens); + hasRuntimeOptions = true; + } + if (options?.temperature !== undefined) { + runtimeOptions.temperature = options.temperature; + hasRuntimeOptions = true; + } + if (options?.topP !== undefined) { + runtimeOptions.top_p = options.topP; + hasRuntimeOptions = true; + } return { model: model.id, messages: convertMessages(model, context), ...(tools ? { tools } : {}), ...(think !== undefined ? { think } : {}), ...(toolChoice !== undefined ? { tool_choice: toolChoice } : {}), - ...(options?.maxTokens !== undefined && !model.omitMaxOutputTokens - ? { options: { num_predict: resolveNumPredict(model, options.maxTokens) } } - : {}), + ...(hasRuntimeOptions ? { options: runtimeOptions } : {}), stream: true, }; } diff --git a/packages/ai/test/ollama-thinking-disable.test.ts b/packages/ai/test/ollama-thinking-disable.test.ts index a3029f49c..63e458929 100644 --- a/packages/ai/test/ollama-thinking-disable.test.ts +++ b/packages/ai/test/ollama-thinking-disable.test.ts @@ -20,6 +20,7 @@ interface OllamaChatRequestPayload { think?: unknown; messages?: OllamaChatMessagePayload[]; tools?: OllamaToolPayload[]; + options?: { num_predict?: unknown; temperature?: unknown; top_p?: unknown }; } function isOllamaChatRequestPayload(value: unknown): value is OllamaChatRequestPayload { @@ -394,3 +395,62 @@ describe("Ollama chat thinking controls", () => { expect(toolMessage.content).not.toContain(NON_VISION_IMAGE_PLACEHOLDER); }); }); + +describe("Ollama chat sampling options", () => { + it("forwards temperature, top_p, and num_predict under options", async () => { + // Contract: session-title generation pins `temperature: 0` for greedy + // decode; the adapter must put sampling params on the wire or the pin + // is silently inert. + let payload: OllamaChatRequestPayload | undefined; + const fetchMock = async (_input: string | URL | Request, init?: RequestInit): Promise => { + const parsed: unknown = JSON.parse(String(init?.body)); + if (!isOllamaChatRequestPayload(parsed)) { + throw new Error("Expected Ollama payload object"); + } + payload = parsed; + return new Response('{"message":{"content":"ok"},"done":true,"prompt_eval_count":1,"eval_count":1}\n', { + status: 200, + }); + }; + const context: Context = { + messages: [{ role: "user", content: "title this", timestamp: 0 }], + }; + + await streamOllama(createReasoningOllamaModel(), context, { + apiKey: "test-key", + temperature: 0, + topP: 0.9, + maxTokens: 1024, + fetch: fetchMock, + }).result(); + + expect(payload?.options).toEqual({ num_predict: 1024, temperature: 0, top_p: 0.9 }); + }); + + it("omits the options object when no runtime options are set", async () => { + let payload: OllamaChatRequestPayload | undefined; + const fetchMock = async (_input: string | URL | Request, init?: RequestInit): Promise => { + const parsed: unknown = JSON.parse(String(init?.body)); + if (!isOllamaChatRequestPayload(parsed)) { + throw new Error("Expected Ollama payload object"); + } + payload = parsed; + return new Response('{"message":{"content":"ok"},"done":true,"prompt_eval_count":1,"eval_count":1}\n', { + status: 200, + }); + }; + const context: Context = { + messages: [{ role: "user", content: "hello", timestamp: 0 }], + }; + + const model = createReasoningOllamaModel(); + model.omitMaxOutputTokens = true; + await streamOllama(model, context, { + apiKey: "test-key", + maxTokens: 1024, + fetch: fetchMock, + }).result(); + + expect(payload && "options" in payload && payload.options !== undefined).toBe(false); + }); +}); diff --git a/packages/catalog/src/models.json b/packages/catalog/src/models.json index 3fa594af8..f3776b086 100644 --- a/packages/catalog/src/models.json +++ b/packages/catalog/src/models.json @@ -151,6 +151,36 @@ }, "supportsComputerUse": false }, + "motif-technologies/motif-3": { + "id": "motif-technologies/motif-3", + "name": "Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token.", + "api": "openai-completions", + "provider": "aiand", + "baseUrl": "https://api.aiand.com/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.5, + "output": 2, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": null, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "openai/gpt-oss-120b": { "id": "openai/gpt-oss-120b", "name": "GPT OSS 120B", @@ -13240,10 +13270,10 @@ "image" ], "cost": { - "input": 1, - "output": 6, - "cacheRead": 0.1, - "cacheWrite": 1.25 + "input": 0.2, + "output": 1.2, + "cacheRead": 0.02, + "cacheWrite": 0.25 }, "contextWindow": 1050000, "maxTokens": 128000, @@ -13273,7 +13303,7 @@ "input": 5, "output": 30, "cacheRead": 0.5, - "cacheWrite": 0 + "cacheWrite": 6.25 }, "contextWindow": 1050000, "maxTokens": 128000, @@ -13300,10 +13330,10 @@ "image" ], "cost": { - "input": 2.5, - "output": 15, - "cacheRead": 0.25, - "cacheWrite": 3.125 + "input": 2, + "output": 12, + "cacheRead": 0.2, + "cacheWrite": 2.5 }, "contextWindow": 1050000, "maxTokens": 128000, @@ -15903,6 +15933,35 @@ ] } }, + "nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B": { + "id": "nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B", + "name": "Nemotron 3.5 Lightning", + "api": "openai-completions", + "provider": "coreweave", + "baseUrl": "https://api.inference.wandb.ai/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.1, + "output": 0.25, + "cacheRead": 0.05, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "openai/gpt-oss-120b": { "id": "openai/gpt-oss-120b", "name": "gpt-oss-120b", @@ -18203,6 +18262,174 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "cursor-grok-4.6-high": { + "id": "cursor-grok-4.6-high", + "name": "Cursor Grok 4.6", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-high-fast": { + "id": "cursor-grok-4.6-high-fast", + "name": "Cursor Grok 4.6 Fast", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-low": { + "id": "cursor-grok-4.6-low", + "name": "Cursor Grok 4.6 Low", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-low-fast": { + "id": "cursor-grok-4.6-low-fast", + "name": "Cursor Grok 4.6 Low Fast", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-medium": { + "id": "cursor-grok-4.6-medium", + "name": "Cursor Grok 4.6 Medium", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-medium-fast": { + "id": "cursor-grok-4.6-medium-fast", + "name": "Cursor Grok 4.6 Medium Fast", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-xhigh": { + "id": "cursor-grok-4.6-xhigh", + "name": "Cursor Grok 4.6 Extra High", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, + "cursor-grok-4.6-xhigh-fast": { + "id": "cursor-grok-4.6-xhigh-fast", + "name": "Cursor Grok 4.6 Extra High Fast", + "api": "cursor-agent", + "provider": "cursor", + "baseUrl": "https://api2.cursor.sh", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 200000, + "maxTokens": 64000, + "cursorMaxMode": false, + "supportsComputerUse": false + }, "default": { "id": "default", "name": "Auto", @@ -21320,6 +21547,40 @@ }, "supportsComputerUse": false }, + "glm-5.2-fast": { + "id": "glm-5.2-fast", + "name": "GLM-5.2 Fast", + "api": "openai-completions", + "provider": "fireworks", + "baseUrl": "https://api.fireworks.ai/inference/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 2.1, + "output": 6.6, + "cacheRead": 0.21, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "max" + ], + "effortMap": { + "minimal": "none" + } + }, + "supportsComputerUse": false, + "supportsComputerUseConfig": false + }, "gpt-oss-120b": { "id": "gpt-oss-120b", "name": "GPT OSS 120B", @@ -21704,6 +21965,40 @@ }, "supportsComputerUse": false }, + "muse-glimmer-30b": { + "id": "muse-glimmer-30b", + "name": "Muse Glimmer 30B", + "api": "openai-completions", + "provider": "fireworks", + "baseUrl": "https://api.fireworks.ai/inference/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 131072, + "maxTokens": null, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "effortMap": { + "minimal": "none" + } + }, + "supportsComputerUse": false + }, "nemotron-3-ultra-nvfp4": { "id": "nemotron-3-ultra-nvfp4", "name": "NVIDIA Nemotron 3 Ultra NVFP4", @@ -21738,6 +22033,39 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "nemotron-lightning-3.5-30b-a3b": { + "id": "nemotron-lightning-3.5-30b-a3b", + "name": "Nemotron Lightning 3.5 30B A3B", + "api": "openai-completions", + "provider": "fireworks", + "baseUrl": "https://api.fireworks.ai/inference/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": null, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "effortMap": { + "minimal": "none" + } + }, + "supportsComputerUse": false + }, "qwen3-embedding-8b": { "id": "qwen3-embedding-8b", "name": "Qwen3 Embedding 8B", @@ -21880,24 +22208,26 @@ }, "supportsComputerUse": false }, - "glm-5.2-fast": { - "id": "glm-5.2-fast", - "name": "GLM-5.2 Fast", + "qwen3.8-max": { + "id": "qwen3.8-max", + "name": "Qwen3.8 Max", "api": "openai-completions", "provider": "fireworks", "baseUrl": "https://api.fireworks.ai/inference/v1", "reasoning": true, "input": [ - "text" + "text", + "image" ], "cost": { - "input": 2.1, - "output": 6.6, - "cacheRead": 0.21, - "cacheWrite": 0 + "input": 2, + "output": 6, + "cacheRead": 0.25, + "cacheWrite": 2.5 }, - "contextWindow": 1048576, + "contextWindow": 262144, "maxTokens": 131072, + "supportsTools": false, "thinking": { "mode": "effort", "efforts": [ @@ -21905,14 +22235,13 @@ "low", "medium", "high", - "max" + "xhigh" ], "effortMap": { "minimal": "none" } }, - "supportsComputerUse": false, - "supportsComputerUseConfig": false + "supportsComputerUse": false } }, "github-copilot": { @@ -23288,6 +23617,40 @@ ] } }, + "mai-code-1.1-flash": { + "id": "mai-code-1.1-flash", + "name": "MAI-Code-1.1-Flash", + "api": "openai-responses", + "provider": "github-copilot", + "baseUrl": "https://api.githubcopilot.com", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.2, + "output": 1.2, + "cacheRead": 0.02, + "cacheWrite": 0 + }, + "contextWindow": 256000, + "maxTokens": 128000, + "headers": { + "User-Agent": "opencode/1.3.15", + "X-GitHub-Api-Version": "2026-06-01" + }, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "raptor-mini": { "id": "raptor-mini", "name": "Raptor mini", @@ -28618,13 +28981,13 @@ "text" ], "cost": { - "input": 0.0896, - "output": 0.1792, - "cacheRead": 0.01792, + "input": 0.079996, + "output": 0.252, + "cacheRead": 0.0252, "cacheWrite": 0 }, "contextWindow": 1048576, - "maxTokens": 131072, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -28798,7 +29161,7 @@ "cost": { "input": 2, "output": 6, - "cacheRead": 0.3, + "cacheRead": 0.5, "cacheWrite": 0 }, "contextWindow": 500000, @@ -29342,7 +29705,7 @@ }, "anthropic/claude-3.5-haiku": { "id": "anthropic/claude-3.5-haiku", - "name": "Claude 3.5 Haiku", + "name": "Claude Haiku 3.5", "api": "openai-completions", "provider": "kilo", "baseUrl": "https://api.kilo.ai/api/gateway", @@ -30403,6 +30766,66 @@ ] } }, + "bytedance-seed/seed-2-1-turbo": { + "id": "bytedance-seed/seed-2-1-turbo", + "name": "Seed 2.1 Turbo", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 2.5, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, + "bytedance-seed/seed-2.0-code": { + "id": "bytedance-seed/seed-2.0-code", + "name": "Seed 2.0 Code", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 3, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "bytedance-seed/seed-2.0-lite": { "id": "bytedance-seed/seed-2.0-lite", "name": "Seed-2.0-Lite", @@ -30824,7 +31247,7 @@ "cacheRead": 0.135, "cacheWrite": 0 }, - "contextWindow": 131072, + "contextWindow": 163840, "maxTokens": 32768, "thinking": { "mode": "effort", @@ -31047,6 +31470,32 @@ "cacheWrite": 0 }, "contextWindow": 1048576, + "maxTokens": 393216, + "thinking": { + "mode": "effort", + "efforts": [ + "high", + "max" + ] + } + }, + "deepseek/deepseek-v4-pro-0813": { + "id": "deepseek/deepseek-v4-pro-0813", + "name": "DeepSeek V4 Pro 0813", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, + "cacheWrite": 0 + }, + "contextWindow": 1048576, "maxTokens": 384000, "thinking": { "mode": "effort", @@ -31930,7 +32379,7 @@ "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 16384, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -32746,6 +33195,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "liquid/lfm-2.5-2.6b:free": { + "id": "liquid/lfm-2.5-2.6b:free", + "name": "LFM2.5-2.6B (free)", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 128000, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "liquid/lfm2-8b-a1b": { "id": "liquid/lfm2-8b-a1b", "name": "LFM2-8B-A1B", @@ -33056,7 +33534,7 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 1048576, + "contextWindow": 128000, "maxTokens": 16384 }, "meta-llama/llama-4-scout": { @@ -33162,6 +33640,36 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "meta/muse-glimmer-30b": { + "id": "meta/muse-glimmer-30b", + "name": "Muse Glimmer 30B", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.04, + "cacheWrite": 0 + }, + "contextWindow": 131072, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "meta/muse-spark-1.1": { "id": "meta/muse-spark-1.1", "name": "Muse Spark 1.1", @@ -34780,7 +35288,7 @@ "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 262144, + "maxTokens": 228000, "thinking": { "mode": "effort", "efforts": [ @@ -34959,6 +35467,65 @@ "maxTokens": null, "supportsComputerUse": false }, + "nvidia/nemotron-3.5-lightning": { + "id": "nvidia/nemotron-3.5-lightning", + "name": "Nvidia Nemotron 3.5 Lightning", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, + "nvidia/nemotron-3.5-lightning:free": { + "id": "nvidia/nemotron-3.5-lightning:free", + "name": "Nemotron 3.5 Lightning (free)", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "nvidia/nemotron-nano-12b-v2-vl": { "id": "nvidia/nemotron-nano-12b-v2-vl", "name": "Nemotron Nano 12B v2 VL", @@ -35874,7 +36441,7 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 16384 + "maxTokens": 32000 }, "openai/gpt-5.2-codex": { "id": "openai/gpt-5.2-codex", @@ -35942,8 +36509,7 @@ "baseUrl": "https://api.kilo.ai/api/gateway", "reasoning": false, "input": [ - "text", - "image" + "text" ], "cost": { "input": 1.75, @@ -35952,7 +36518,8 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 16384 + "maxTokens": 16384, + "supportsComputerUse": false }, "openai/gpt-5.3-codex": { "id": "openai/gpt-5.3-codex", @@ -37771,8 +38338,8 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 131072, - "maxTokens": 8192, + "contextWindow": 40960, + "maxTokens": 16384, "thinking": { "mode": "effort", "efforts": [ @@ -37946,8 +38513,8 @@ "text" ], "cost": { - "input": 0.104, - "output": 0.416, + "input": 0.08, + "output": 0.28, "cacheRead": 0, "cacheWrite": 0 }, @@ -38026,8 +38593,8 @@ "cacheRead": 0, "cacheWrite": 0 }, - "contextWindow": 160000, - "maxTokens": 32768 + "contextWindow": 262144, + "maxTokens": 262144 }, "qwen/qwen3-coder-flash": { "id": "qwen/qwen3-coder-flash", @@ -38478,7 +39045,7 @@ "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 65536, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -38898,6 +39465,34 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "qwen/qwen3.8-2.4t-a95b": { + "id": "qwen/qwen3.8-2.4t-a95b", + "name": "Qwen3.8 2.4T A95B", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 2, + "output": 6, + "cacheRead": 0.2, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 52429, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + } + }, "qwen/qwen3.8-max": { "id": "qwen/qwen3.8-max", "name": "Qwen3.8 Max", @@ -39099,6 +39694,36 @@ ] } }, + "sakana/sakana-namazu": { + "id": "sakana/sakana-namazu", + "name": "Sakana Namazu", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.95, + "output": 4, + "cacheRead": 0.15, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "sao10k/l3-euryale-70b": { "id": "sao10k/l3-euryale-70b", "name": "Llama 3 Euryale 70B v2.1", @@ -39847,6 +40472,35 @@ ] } }, + "upstage/solar-pro4": { + "id": "upstage/solar-pro4", + "name": "Solar Pro 4", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.06, + "cacheWrite": 0 + }, + "contextWindow": 524288, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "writer/palmyra-x5": { "id": "writer/palmyra-x5", "name": "Palmyra X5", @@ -40210,6 +40864,36 @@ ] } }, + "x-ai/grok-4.6": { + "id": "x-ai/grok-4.6", + "name": "Grok 4.6", + "api": "openai-completions", + "provider": "kilo", + "baseUrl": "https://api.kilo.ai/api/gateway", + "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" + ] + } + }, "x-ai/grok-build-0.1": { "id": "x-ai/grok-build-0.1", "name": "Grok Build 0.1", @@ -40602,7 +41286,7 @@ "cacheRead": 0.11, "cacheWrite": 0 }, - "contextWindow": 202752, + "contextWindow": 204800, "maxTokens": 131072, "thinking": { "mode": "effort", @@ -40827,8 +41511,8 @@ "cacheRead": 0.26, "cacheWrite": 0 }, - "contextWindow": 1024000, - "maxTokens": 128000, + "contextWindow": 1048576, + "maxTokens": 131072, "thinking": { "mode": "effort", "efforts": [ @@ -44964,6 +45648,66 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "bytedance-seed/seed-2-1-turbo": { + "id": "bytedance-seed/seed-2-1-turbo", + "name": "ByteDance Seed 2.1 Turbo", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 2.5, + "cacheRead": 0.25, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, + "bytedance-seed/seed-2.0-code": { + "id": "bytedance-seed/seed-2.0-code", + "name": "ByteDance Seed 2.0 Code", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 3, + "cacheRead": 0.25, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "bytedance-seed/seed-2.0-lite": { "id": "bytedance-seed/seed-2.0-lite", "name": "Seed-2.0-Lite", @@ -46624,9 +47368,9 @@ "text" ], "cost": { - "input": 1.1, - "output": 2.2, - "cacheRead": 0.11, + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -46941,6 +47685,58 @@ ] } }, + "deepseek/deepseek-v4-pro-0813": { + "id": "deepseek/deepseek-v4-pro-0813", + "name": "DeepSeek V4 Pro 0813", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 384000, + "thinking": { + "mode": "effort", + "efforts": [ + "high", + "max" + ] + } + }, + "deepseek/deepseek-v4-pro-0813:thinking": { + "id": "deepseek/deepseek-v4-pro-0813:thinking", + "name": "DeepSeek V4 Pro 0813 Thinking", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 384000, + "thinking": { + "mode": "effort", + "efforts": [ + "high", + "max" + ] + } + }, "deepseek/deepseek-v4-pro-cheaper": { "id": "deepseek/deepseek-v4-pro-cheaper", "name": "DeepSeek V4 Pro Cheaper", @@ -50834,6 +51630,54 @@ ] } }, + "inclusionai/ling-3.0-tiny": { + "id": "inclusionai/ling-3.0-tiny", + "name": "Ling 3.0 Tiny", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0.1, + "output": 0.2, + "cacheRead": 0.01, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 32768 + }, + "inclusionai/ling-3.0-tiny:thinking": { + "id": "inclusionai/ling-3.0-tiny:thinking", + "name": "Ling 3.0 Tiny Thinking", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.1, + "output": 0.2, + "cacheRead": 0.01, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "inclusionai/ring-2.6-1t": { "id": "inclusionai/ring-2.6-1t", "name": "Ring 2.6 1T", @@ -51384,6 +52228,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "liquid/lfm-2.5-2.6b": { + "id": "liquid/lfm-2.5-2.6b", + "name": "LFM2.5 2.6B", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.1, + "output": 0.2, + "cacheRead": 0.05, + "cacheWrite": 0 + }, + "contextWindow": 128000, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "Llama-3.3-70B-Anthrobomination": { "id": "Llama-3.3-70B-Anthrobomination", "name": "Llama-3.3-70B-Anthrobomination", @@ -52677,6 +53550,36 @@ "contextWindow": 328000, "maxTokens": 65536 }, + "meta/muse-glimmer-30b": { + "id": "meta/muse-glimmer-30b", + "name": "Muse Glimmer 30B", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.35, + "output": 1.5, + "cacheRead": 0.04, + "cacheWrite": 0 + }, + "contextWindow": 131072, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "meta/muse-spark-1.1": { "id": "meta/muse-spark-1.1", "name": "Muse Spark 1.1", @@ -54869,6 +55772,64 @@ ] } }, + "nvidia/nemotron-3.5-lightning": { + "id": "nvidia/nemotron-3.5-lightning", + "name": "Nvidia Nemotron 3.5 Lightning", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.05, + "output": 0.2, + "cacheRead": 0.01, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, + "nvidia/nemotron-3.5-lightning:thinking": { + "id": "nvidia/nemotron-3.5-lightning:thinking", + "name": "Nvidia Nemotron 3.5 Lightning Thinking", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.05, + "output": 0.2, + "cacheRead": 0.01, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-TEE": { "id": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-TEE", "name": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-TEE", @@ -55679,8 +56640,7 @@ "baseUrl": "https://nano-gpt.com/api/v1", "reasoning": false, "input": [ - "text", - "image" + "text" ], "cost": { "input": 0, @@ -59112,7 +60072,8 @@ "medium", "high" ] - } + }, + "supportsComputerUse": false }, "qwen3.8-max:thinking": { "id": "qwen3.8-max:thinking", @@ -60634,7 +61595,7 @@ "cacheWrite": 0 }, "contextWindow": 1048576, - "maxTokens": 65535, + "maxTokens": 1048576, "thinking": { "mode": "effort", "efforts": [ @@ -61733,6 +62694,54 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "upstage/solar-pro4": { + "id": "upstage/solar-pro4", + "name": "Solar Pro 4", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0.03, + "output": 0.12, + "cacheRead": 0.006, + "cacheWrite": 0 + }, + "contextWindow": 524288, + "maxTokens": 131072 + }, + "upstage/solar-pro4:thinking": { + "id": "upstage/solar-pro4:thinking", + "name": "Solar Pro 4 Thinking", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.03, + "output": 0.12, + "cacheRead": 0.006, + "cacheWrite": 0 + }, + "contextWindow": 524288, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "v0-1.0-md": { "id": "v0-1.0-md", "name": "v0-1.0-md", @@ -62140,6 +63149,36 @@ ] } }, + "x-ai/grok-4.6": { + "id": "x-ai/grok-4.6", + "name": "Grok 4.6", + "api": "openai-completions", + "provider": "nanogpt", + "baseUrl": "https://nano-gpt.com/api/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" + ] + } + }, "x-ai/grok-build-0.1": { "id": "x-ai/grok-build-0.1", "name": "Grok Build 0.1", @@ -64317,7 +65356,7 @@ "api": "openai-completions", "provider": "novita", "baseUrl": "https://api.novita.ai/openai/v1", - "reasoning": true, + "reasoning": false, "input": [ "text" ], @@ -64330,16 +65369,6 @@ "contextWindow": 262144, "maxTokens": 32768, "supportsTools": true, - "thinking": { - "mode": "effort", - "efforts": [ - "minimal", - "low", - "medium", - "high", - "xhigh" - ] - }, "supportsComputerUse": false, "supportsComputerUseConfig": false }, @@ -64542,9 +65571,9 @@ "text" ], "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, + "input": 0.45, + "output": 2.6, + "cacheRead": 0.08, "cacheWrite": 0 }, "contextWindow": 262144, @@ -69099,6 +70128,35 @@ "contextWindow": null, "maxTokens": null }, + "nvidia/nemotron-3.5-lightning-30b-a3b": { + "id": "nvidia/nemotron-3.5-lightning-30b-a3b", + "name": "Nemotron 3.5 Lightning 30B A3B", + "api": "openai-completions", + "provider": "nvidia", + "baseUrl": "https://integrate.api.nvidia.com/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "nvidia/nemotron-4-340b-instruct": { "id": "nvidia/nemotron-4-340b-instruct", "name": "Nemotron 4 340b Instruct", @@ -71437,6 +72495,81 @@ ] } }, + "daybreak-blue-latest": { + "id": "daybreak-blue-latest", + "name": "Daybreak Blue", + "api": "openai-responses", + "provider": "openai", + "baseUrl": "https://api.openai.com/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 5, + "output": 30, + "cacheRead": 0.5, + "cacheWrite": 6.25, + "longContext": { + "inputThreshold": 272000, + "input": 10, + "output": 45, + "cacheRead": 1, + "cacheWrite": 12.5 + } + }, + "contextWindow": 1050000, + "maxTokens": 128000, + "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, + "thinking": { + "mode": "effort", + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + }, + "daybreak-red-latest": { + "id": "daybreak-red-latest", + "name": "Daybreak Red", + "api": "openai-responses", + "provider": "openai", + "baseUrl": "https://api.openai.com/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 12.5, + "output": 75, + "cacheRead": 1.25, + "cacheWrite": 15.625 + }, + "contextWindow": 400000, + "maxTokens": 128000, + "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, + "thinking": { + "mode": "effort", + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } + }, "gpt-4": { "id": "gpt-4", "name": "GPT-4", @@ -72366,6 +73499,9 @@ "contextWindow": 1050000, "maxTokens": 128000, "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72375,9 +73511,40 @@ "xhigh", "max" ] + } + }, + "gpt-5.6-cyber": { + "id": "gpt-5.6-cyber", + "name": "GPT-5.6 Cyber", + "api": "openai-responses", + "provider": "openai", + "baseUrl": "https://api.openai.com/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 12.5, + "output": 75, + "cacheRead": 1.25, + "cacheWrite": 15.625 }, + "contextWindow": 400000, + "maxTokens": 128000, + "applyPatchToolType": "freeform", "compat": { "reasoningDisableMode": "none-effort" + }, + "thinking": { + "mode": "effort", + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] } }, "gpt-5.6-luna": { @@ -72407,6 +73574,9 @@ "contextWindow": 1050000, "maxTokens": 128000, "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72416,9 +73586,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-5.6-luna-pro": { @@ -72450,6 +73617,9 @@ "requestModelId": "gpt-5.6-luna", "reasoningMode": "pro", "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72459,9 +73629,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-5.6-sol": { @@ -72491,6 +73658,9 @@ "contextWindow": 1050000, "maxTokens": 128000, "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72500,9 +73670,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-5.6-sol-pro": { @@ -72534,6 +73701,9 @@ "requestModelId": "gpt-5.6-sol", "reasoningMode": "pro", "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72543,9 +73713,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-5.6-terra": { @@ -72575,6 +73742,9 @@ "contextWindow": 1050000, "maxTokens": 128000, "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72584,9 +73754,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-5.6-terra-pro": { @@ -72618,6 +73785,9 @@ "requestModelId": "gpt-5.6-terra", "reasoningMode": "pro", "applyPatchToolType": "freeform", + "compat": { + "reasoningDisableMode": "none-effort" + }, "thinking": { "mode": "effort", "efforts": [ @@ -72627,9 +73797,6 @@ "xhigh", "max" ] - }, - "compat": { - "reasoningDisableMode": "none-effort" } }, "gpt-realtime-2.1": { @@ -72908,115 +74075,6 @@ ], "requiresEffort": true } - }, - "daybreak-blue-latest": { - "id": "daybreak-blue-latest", - "name": "Daybreak Blue", - "api": "openai-responses", - "provider": "openai", - "baseUrl": "https://api.openai.com/v1", - "reasoning": true, - "input": [ - "text", - "image" - ], - "cost": { - "input": 5, - "output": 30, - "cacheRead": 0.5, - "cacheWrite": 6.25, - "longContext": { - "inputThreshold": 272000, - "input": 10, - "output": 45, - "cacheRead": 1, - "cacheWrite": 12.5 - } - }, - "contextWindow": 1050000, - "maxTokens": 128000, - "applyPatchToolType": "freeform", - "compat": { - "reasoningDisableMode": "none-effort" - }, - "thinking": { - "mode": "effort", - "efforts": [ - "low", - "medium", - "high", - "xhigh", - "max" - ] - } - }, - "daybreak-red-latest": { - "id": "daybreak-red-latest", - "name": "Daybreak Red", - "api": "openai-responses", - "provider": "openai", - "baseUrl": "https://api.openai.com/v1", - "reasoning": true, - "input": [ - "text", - "image" - ], - "cost": { - "input": 12.5, - "output": 75, - "cacheRead": 1.25, - "cacheWrite": 15.625 - }, - "contextWindow": 400000, - "maxTokens": 128000, - "applyPatchToolType": "freeform", - "compat": { - "reasoningDisableMode": "none-effort" - }, - "thinking": { - "mode": "effort", - "efforts": [ - "low", - "medium", - "high", - "xhigh", - "max" - ] - } - }, - "gpt-5.6-cyber": { - "id": "gpt-5.6-cyber", - "name": "GPT-5.6 Cyber", - "api": "openai-responses", - "provider": "openai", - "baseUrl": "https://api.openai.com/v1", - "reasoning": true, - "input": [ - "text", - "image" - ], - "cost": { - "input": 12.5, - "output": 75, - "cacheRead": 1.25, - "cacheWrite": 15.625 - }, - "contextWindow": 400000, - "maxTokens": 128000, - "applyPatchToolType": "freeform", - "compat": { - "reasoningDisableMode": "none-effort" - }, - "thinking": { - "mode": "effort", - "efforts": [ - "low", - "medium", - "high", - "xhigh", - "max" - ] - } } }, "openai-codex": { @@ -73285,6 +74343,45 @@ "max" ] } + }, + "gpt-daybreak-blue-latest": { + "id": "gpt-daybreak-blue-latest", + "name": "Daybreak Blue", + "api": "openai-codex-responses", + "provider": "openai-codex", + "baseUrl": "https://chatgpt.com/backend-api", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "remoteCompaction": { + "enabled": true, + "api": "openai-codex-responses", + "v2StreamingEnabled": true + }, + "contextWindow": 272000, + "maxTokens": 128000, + "preferWebsockets": true, + "useResponsesLite": true, + "priority": 3, + "applyPatchToolType": "freeform", + "thinking": { + "mode": "effort", + "efforts": [ + "low", + "medium", + "high", + "xhigh", + "max" + ] + } } }, "opencode": { @@ -73466,7 +74563,7 @@ }, "deepseek-v4-pro": { "id": "deepseek-v4-pro", - "name": "DeepSeek V4 Pro", + "name": "DeepSeek V4 Pro (New)", "api": "openai-completions", "provider": "opencode-go", "baseUrl": "https://opencode.ai/zen/go/v1", @@ -75582,6 +76679,36 @@ ] } }, + "grok-4.6": { + "id": "grok-4.6", + "name": "Grok 4.6", + "api": "openai-responses", + "provider": "opencode-zen", + "baseUrl": "https://opencode.ai/zen/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" + ] + } + }, "grok-build-0.1": { "id": "grok-build-0.1", "name": "Grok Build 0.1", @@ -76310,6 +77437,35 @@ ] } }, + "nemotron-3.5-lightning-free": { + "id": "nemotron-3.5-lightning-free", + "name": "Nemotron 3.5 Lightning Free", + "api": "openai-completions", + "provider": "opencode-zen", + "baseUrl": "https://opencode.ai/zen/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "north-mini-code-free": { "id": "north-mini-code-free", "name": "North Mini Code Free", @@ -76612,9 +77768,9 @@ "text" ], "cost": { - "input": 0.0896, - "output": 0.1792, - "cacheRead": 0.017920000000000002, + "input": 0.079996, + "output": 0.252, + "cacheRead": 0.0252, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -76799,7 +77955,7 @@ "cost": { "input": 2, "output": 6, - "cacheRead": 0.3, + "cacheRead": 0.5, "cacheWrite": 0 }, "contextWindow": 500000, @@ -77132,7 +78288,7 @@ }, "anthropic/claude-3.5-haiku": { "id": "anthropic/claude-3.5-haiku", - "name": "Claude 3.5 Haiku", + "name": "Claude Haiku 3.5", "api": "openrouter", "baseUrl": "https://openrouter.ai/api/v1", "provider": "openrouter", @@ -78486,6 +79642,66 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "bytedance-seed/seed-2-1-turbo": { + "id": "bytedance-seed/seed-2-1-turbo", + "name": "Seed 2.1 Turbo", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 2.5, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 262144, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, + "bytedance-seed/seed-2.0-code": { + "id": "bytedance-seed/seed-2.0-code", + "name": "Seed 2.0 Code", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.5, + "output": 3, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "bytedance-seed/seed-2.0-lite": { "id": "bytedance-seed/seed-2.0-lite", "name": "Seed-2.0-Lite", @@ -78622,7 +79838,7 @@ }, "deepseek/deepseek-chat": { "id": "deepseek/deepseek-chat", - "name": "DeepSeek-V3.2 (Non-thinking Mode)", + "name": "DeepSeek Chat", "api": "openrouter", "baseUrl": "https://openrouter.ai/api/v1", "provider": "openrouter", @@ -78755,8 +79971,8 @@ ], "cost": { "input": 0.27, - "output": 1, - "cacheRead": 0.135, + "output": 0.95, + "cacheRead": 0.13, "cacheWrite": 0 }, "contextWindow": 163840, @@ -78891,9 +80107,9 @@ "text" ], "cost": { - "input": 0.09, + "input": 0.08, "output": 0.18, - "cacheRead": 0.018, + "cacheRead": 0.016, "cacheWrite": 0 }, "contextWindow": 1048576, @@ -78965,6 +80181,32 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "deepseek/deepseek-v4-pro-0813": { + "id": "deepseek/deepseek-v4-pro-0813", + "name": "DeepSeek V4 Pro 0813", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": 384000, + "thinking": { + "mode": "effort", + "efforts": [ + "high" + ] + }, + "supportsComputerUse": false + }, "essentialai/rnj-1-instruct": { "id": "essentialai/rnj-1-instruct", "name": "Rnj 1 Instruct", @@ -79914,13 +81156,13 @@ "image" ], "cost": { - "input": 0.07, - "output": 0.33999999999999997, + "input": 0.12, + "output": 0.39999999999999997, "cacheRead": 0.049999999999999996, "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 16384, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -80468,6 +81710,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "liquid/lfm-2.5-2.6b:free": { + "id": "liquid/lfm-2.5-2.6b:free", + "name": "LFM2.5-2.6B (free)", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 128000, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "meituan/longcat-2.0": { "id": "meituan/longcat-2.0", "name": "LongCat 2.0", @@ -80658,7 +81929,7 @@ ], "cost": { "input": 0.19999999999999998, - "output": 0.7999999999999999, + "output": 0.696, "cacheRead": 0, "cacheWrite": 0 }, @@ -80689,6 +81960,36 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "meta/muse-glimmer-30b": { + "id": "meta/muse-glimmer-30b", + "name": "Muse Glimmer 30B", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.35, + "output": 1.5, + "cacheRead": 0.04, + "cacheWrite": 0 + }, + "contextWindow": 131072, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "meta/muse-spark-1.1": { "id": "meta/muse-spark-1.1", "name": "Muse Spark 1.1", @@ -81709,9 +83010,9 @@ "image" ], "cost": { - "input": 0.5795, - "output": 2.44, - "cacheRead": 0.0976, + "input": 0.95, + "output": 4, + "cacheRead": 0.16, "cacheWrite": 0 }, "contextWindow": 262144, @@ -81771,8 +83072,8 @@ "image" ], "cost": { - "input": 0.7, - "output": 3.5, + "input": 0.67, + "output": 3.4, "cacheRead": 0.15, "cacheWrite": 0 }, @@ -82094,11 +83395,11 @@ "cost": { "input": 0.049999999999999996, "output": 0.19999999999999998, - "cacheRead": 0.03, + "cacheRead": 0.024999999999999998, "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 262144, + "maxTokens": 228000, "thinking": { "mode": "effort", "efforts": [ @@ -82323,6 +83624,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "nvidia/nemotron-3.5-lightning:free": { + "id": "nvidia/nemotron-3.5-lightning:free", + "name": "Nemotron 3.5 Lightning (free)", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "nvidia/nemotron-nano-12b-v2-vl:free": { "id": "nvidia/nemotron-nano-12b-v2-vl:free", "name": "Nemotron Nano 12B 2 VL (free)", @@ -83573,7 +84903,7 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 16384, + "maxTokens": 32000, "supportsComputerUse": false, "supportsComputerUseConfig": false }, @@ -83709,8 +85039,7 @@ "baseUrl": "https://openrouter.ai/api/v1", "reasoning": false, "input": [ - "text", - "image" + "text" ], "cost": { "input": 1.75, @@ -84598,9 +85927,9 @@ "text" ], "cost": { - "input": 0.037, + "input": 0.03, "output": 0.16999999999999998, - "cacheRead": 0, + "cacheRead": 0.03, "cacheWrite": 0 }, "contextWindow": 131072, @@ -85966,13 +87295,13 @@ "text" ], "cost": { - "input": 0.22749999999999998, - "output": 0.9099999999999999, + "input": 0.12, + "output": 0.24, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 8192, + "maxTokens": 16384, "thinking": { "mode": "effort", "efforts": [ @@ -86302,12 +87631,12 @@ ], "cost": { "input": 0.07, - "output": 0.27, + "output": 0.28, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 32768, + "maxTokens": 262144, "supportsComputerUse": false, "supportsComputerUseConfig": false }, @@ -86553,8 +87882,8 @@ "image" ], "cost": { - "input": 0.21, - "output": 1.9, + "input": 0.26, + "output": 1.04, "cacheRead": 0.09999999999999999, "cacheWrite": 0 }, @@ -86830,13 +88159,13 @@ "image" ], "cost": { - "input": 0.39, - "output": 2.34, - "cacheRead": 0.22499999999999998, + "input": 0.5, + "output": 3.5999999999999996, + "cacheRead": 0.3, "cacheWrite": 0 }, "contextWindow": 262144, - "maxTokens": 65536, + "maxTokens": 262144, "thinking": { "mode": "effort", "efforts": [ @@ -87280,6 +88609,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "qwen/qwen3.8-2.4t-a95b": { + "id": "qwen/qwen3.8-2.4t-a95b", + "name": "Qwen3.8 2.4T A95B", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 2, + "output": 6, + "cacheRead": 0.19999999999999998, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 52429, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "qwen/qwen3.8-max": { "id": "qwen/qwen3.8-max", "name": "Qwen3.8 Max", @@ -87437,6 +88795,36 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "sakana/sakana-namazu": { + "id": "sakana/sakana-namazu", + "name": "Sakana Namazu", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.95, + "output": 4, + "cacheRead": 0.15, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 65536, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "sao10k/l3-euryale-70b": { "id": "sao10k/l3-euryale-70b", "name": "Llama 3 Euryale 70B v2.1", @@ -87951,6 +89339,35 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "upstage/solar-pro4": { + "id": "upstage/solar-pro4", + "name": "Solar Pro 4", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.03, + "output": 0.12, + "cacheRead": 0.006, + "cacheWrite": 0 + }, + "contextWindow": 524288, + "maxTokens": 131072, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high" + ] + }, + "supportsComputerUse": false + }, "x-ai/grok-3": { "id": "x-ai/grok-3", "name": "Grok 3", @@ -88270,6 +89687,36 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "x-ai/grok-4.6": { + "id": "x-ai/grok-4.6", + "name": "Grok 4.6", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/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" + ] + }, + "supportsComputerUse": false + }, "x-ai/grok-build-0.1": { "id": "x-ai/grok-build-0.1", "name": "Grok Build 0.1", @@ -88833,9 +90280,9 @@ "text" ], "cost": { - "input": 0.952, - "output": 2.992, - "cacheRead": 0.17679999999999998, + "input": 1.4, + "output": 4.4, + "cacheRead": 0.26, "cacheWrite": 0 }, "contextWindow": 204800, @@ -88863,13 +90310,13 @@ "text" ], "cost": { - "input": 0.182, - "output": 0.572, - "cacheRead": 0.0338, + "input": 0.5, + "output": 3.15, + "cacheRead": 0.09999999999999999, "cacheWrite": 0 }, "contextWindow": 1048576, - "maxTokens": 128000, + "maxTokens": 131072, "thinking": { "mode": "effort", "efforts": [ @@ -90290,7 +91737,7 @@ "cacheRead": 0.26, "cacheWrite": 0 }, - "contextWindow": 262144, + "contextWindow": 512000, "maxTokens": 164000, "thinking": { "mode": "effort", @@ -90375,9 +91822,9 @@ "escapeBuiltinToolNames": true } }, - "umans-deepseek-v4-flash-0731-lab": { - "id": "umans-deepseek-v4-flash-0731-lab", - "name": "Umans DeepSeek V4 Flash (lab)", + "umans-deepseek-v4-flash-0731-vision-lab": { + "id": "umans-deepseek-v4-flash-0731-vision-lab", + "name": "Umans DeepSeek V4 Flash Vision (lab)", "api": "anthropic-messages", "provider": "umans", "baseUrl": "https://api.code.umans.ai", @@ -90393,7 +91840,8 @@ ] }, "input": [ - "text" + "text", + "image" ], "cost": { "input": 0, @@ -90404,7 +91852,6 @@ "contextWindow": 1048576, "maxTokens": 393215, "supportsComputerUse": false, - "supportsComputerUseConfig": false, "compat": { "escapeBuiltinToolNames": true } @@ -91265,6 +92712,33 @@ ] } }, + "deepseek-v4-flash-0731-fast": { + "id": "deepseek-v4-flash-0731-fast", + "name": "DeepSeek V4 Flash 0731 Fast", + "api": "openai-completions", + "provider": "venice", + "baseUrl": "https://api.venice.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.35, + "output": 0.7, + "cacheRead": 0.0875, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "low", + "high", + "max" + ] + } + }, "deepseek-v4-pro": { "id": "deepseek-v4-pro", "name": "DeepSeek V4 Pro", @@ -92240,6 +93714,36 @@ ] } }, + "grok-4-6": { + "id": "grok-4-6", + "name": "Grok 4.6", + "api": "openai-completions", + "provider": "venice", + "baseUrl": "https://api.venice.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 2.27, + "output": 6.8, + "cacheRead": 0.57, + "cacheWrite": 0 + }, + "contextWindow": 500000, + "maxTokens": 200000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "grok-41-fast": { "id": "grok-41-fast", "name": "Grok 4.1 Fast", @@ -92876,6 +94380,35 @@ "contextWindow": 256000, "maxTokens": 16384 }, + "nvidia-nemotron-3-5-lightning-30b-a3b": { + "id": "nvidia-nemotron-3-5-lightning-30b-a3b", + "name": "NVIDIA Nemotron 3.5 Lightning 30B", + "api": "openai-completions", + "provider": "venice", + "baseUrl": "https://api.venice.ai/api/v1", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.1, + "output": 0.25, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 32768, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + } + }, "nvidia-nemotron-3-nano-30b-a3b": { "id": "nvidia-nemotron-3-nano-30b-a3b", "name": "NVIDIA Nemotron 3 Nano 30B", @@ -93045,11 +94578,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93070,16 +94603,16 @@ "cacheRead": 0.219, "cacheWrite": 0 }, - "contextWindow": 256000, + "contextWindow": 272000, "maxTokens": 65536, "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93100,16 +94633,16 @@ "cacheRead": 0.219, "cacheWrite": 0 }, - "contextWindow": 400000, + "contextWindow": 272000, "maxTokens": 128000, "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93135,11 +94668,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93165,11 +94698,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93195,11 +94728,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93225,11 +94758,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93255,11 +94788,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93275,21 +94808,21 @@ "image" ], "cost": { - "input": 1.25, - "output": 7.5, - "cacheRead": 0.125, - "cacheWrite": 1.5625 + "input": 0.26666667, + "output": 1.6, + "cacheRead": 0.02666667, + "cacheWrite": 0.33333334 }, "contextWindow": 1000000, "maxTokens": 128000, "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93315,11 +94848,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93345,11 +94878,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93375,11 +94908,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93405,11 +94938,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -93435,11 +94968,11 @@ "thinking": { "mode": "effort", "efforts": [ - "minimal", "low", "medium", "high", - "xhigh" + "xhigh", + "max" ] } }, @@ -94033,9 +95566,9 @@ "image" ], "cost": { - "input": 0.14, - "output": 0.28, - "cacheRead": 0.05, + "input": 0.4, + "output": 2, + "cacheRead": 0.08, "cacheWrite": 0 }, "contextWindow": 1000000, @@ -95127,7 +96660,7 @@ }, "anthropic/claude-3.5-haiku": { "id": "anthropic/claude-3.5-haiku", - "name": "Claude 3.5 Haiku", + "name": "Claude Haiku 3.5", "api": "anthropic-messages", "baseUrl": "https://ai-gateway.vercel.sh", "provider": "vercel-ai-gateway", @@ -95601,8 +97134,7 @@ ], "supportsDisplay": true }, - "supportsComputerUse": false, - "supportsComputerUseConfig": false + "supportsComputerUse": false }, "anthropic/claude-sonnet-4": { "id": "anthropic/claude-sonnet-4", @@ -96153,6 +97685,36 @@ }, "supportsComputerUse": false }, + "deepseek/deepseek-v4-pro-0813": { + "id": "deepseek/deepseek-v4-pro-0813", + "name": "DeepSeek V4 Pro 0813", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.0036, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 384000, + "thinking": { + "mode": "budget", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "google/gemini-2.0-flash": { "id": "google/gemini-2.0-flash", "name": "Gemini 2.0 Flash", @@ -97131,6 +98693,37 @@ "maxTokens": 8192, "supportsComputerUse": false }, + "meta/muse-glimmer-30b": { + "id": "meta/muse-glimmer-30b", + "name": "Muse Glimmer 30B", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.35, + "output": 1.5, + "cacheRead": 0.04, + "cacheWrite": 0 + }, + "contextWindow": 131072, + "maxTokens": 131072, + "thinking": { + "mode": "budget", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "meta/muse-spark-1.1": { "id": "meta/muse-spark-1.1", "name": "Muse Spark 1.1", @@ -98788,7 +100381,8 @@ "high" ] }, - "supportsComputerUse": false + "supportsComputerUse": false, + "supportsComputerUseConfig": false }, "openai/gpt-5.1-thinking": { "id": "openai/gpt-5.1-thinking", @@ -98941,8 +100535,7 @@ "baseUrl": "https://ai-gateway.vercel.sh", "reasoning": false, "input": [ - "text", - "image" + "text" ], "cost": { "input": 1.75, @@ -98952,7 +100545,8 @@ }, "contextWindow": 128000, "maxTokens": 16384, - "supportsComputerUse": false + "supportsComputerUse": false, + "supportsComputerUseConfig": false }, "openai/gpt-5.3-codex": { "id": "openai/gpt-5.3-codex", @@ -99706,6 +101300,37 @@ }, "supportsComputerUse": false }, + "sakana/namazu": { + "id": "sakana/namazu", + "name": "Sakana Namazu", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.95, + "output": 4, + "cacheRead": 0.15, + "cacheWrite": 0 + }, + "contextWindow": 256000, + "maxTokens": 256000, + "thinking": { + "mode": "budget", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "stepfun/step-3.5-flash": { "id": "stepfun/step-3.5-flash", "name": "Step 3.5 Flash", @@ -100379,6 +102004,36 @@ }, "supportsComputerUse": false }, + "xai/grok-4.6": { + "id": "xai/grok-4.6", + "name": "Grok 4.6", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text" + ], + "cost": { + "input": 2, + "output": 6, + "cacheRead": 0.5, + "cacheWrite": 0 + }, + "contextWindow": 500000, + "maxTokens": 500000, + "thinking": { + "mode": "budget", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "xai/grok-build-0.1": { "id": "xai/grok-build-0.1", "name": "Grok Build 0.1", @@ -101456,6 +103111,7 @@ ] }, "supportsComputerUse": false, + "supportsComputerUseConfig": false, "compat": { "reasoningContentField": "reasoning_content", "supportsDeveloperRole": false @@ -102174,6 +103830,35 @@ ] } }, + "grok-4.6": { + "id": "grok-4.6", + "name": "Grok 4.6", + "api": "openai-completions", + "provider": "xai", + "baseUrl": "https://api.x.ai/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" + ] + } + }, "grok-beta": { "id": "grok-beta", "name": "Grok Beta", @@ -102470,6 +104155,33 @@ "supportsReasoningEffort": true } }, + "grok-4.6": { + "id": "grok-4.6", + "name": "Grok 4.6", + "api": "openai-responses", + "provider": "xai-oauth", + "baseUrl": "https://api.x.ai/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 500000, + "maxTokens": 500000, + "supportsComputerUse": false, + "compat": { + "includeEncryptedReasoning": false, + "filterReasoningHistory": true, + "supportsImageDetailOriginal": false, + "omitReasoningEffort": true + } + }, "grok-build": { "id": "grok-build", "name": "Grok Build", @@ -103539,7 +105251,7 @@ "zenmux": { "anthropic/claude-3.5-haiku": { "id": "anthropic/claude-3.5-haiku", - "name": "Claude 3.5 Haiku", + "name": "Claude Haiku 3.5", "api": "anthropic-messages", "provider": "zenmux", "baseUrl": "https://zenmux.ai/api/anthropic", @@ -103555,7 +105267,8 @@ "cacheWrite": 1 }, "contextWindow": 200000, - "maxTokens": 64000 + "maxTokens": 64000, + "supportsComputerUse": false }, "anthropic/claude-3.5-sonnet": { "id": "anthropic/claude-3.5-sonnet", @@ -103607,7 +105320,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "anthropic/claude-fable-5": { "id": "anthropic/claude-fable-5", @@ -104459,7 +106173,7 @@ }, "deepseek/deepseek-chat": { "id": "deepseek/deepseek-chat", - "name": "DeepSeek-V3.2 (Non-thinking Mode)", + "name": "DeepSeek Chat", "api": "openai-completions", "provider": "zenmux", "baseUrl": "https://zenmux.ai/api/v1", @@ -104474,7 +106188,8 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 64000 + "maxTokens": 64000, + "supportsComputerUse": false }, "deepseek/deepseek-chat-v3.1": { "id": "deepseek/deepseek-chat-v3.1", @@ -105225,7 +106940,8 @@ "cacheWrite": 0 }, "contextWindow": 128000, - "maxTokens": 64000 + "maxTokens": 64000, + "supportsComputerUse": false }, "inclusionai/ling-2.6-1t": { "id": "inclusionai/ling-2.6-1t", @@ -105297,6 +107013,26 @@ ] } }, + "inclusionai/ling-3.0-tiny": { + "id": "inclusionai/ling-3.0-tiny", + "name": "Ling 3.0 Tiny", + "api": "openai-completions", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/v1", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 262144, + "maxTokens": 32768, + "supportsComputerUse": false + }, "inclusionai/ling-flash-2.0": { "id": "inclusionai/ling-flash-2.0", "name": "Ling-flash-2.0", @@ -105429,7 +107165,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "inclusionai/ring-2.6-1t": { "id": "inclusionai/ring-2.6-1t", @@ -106033,7 +107770,8 @@ "cacheWrite": 0 }, "contextWindow": 262000, - "maxTokens": 64000 + "maxTokens": 64000, + "supportsComputerUse": false }, "moonshotai/kimi-k2-thinking": { "id": "moonshotai/kimi-k2-thinking", @@ -106063,7 +107801,8 @@ "xhigh" ], "requiresEffort": true - } + }, + "supportsComputerUse": false }, "moonshotai/kimi-k2-thinking-turbo": { "id": "moonshotai/kimi-k2-thinking-turbo", @@ -106093,7 +107832,8 @@ "xhigh" ], "requiresEffort": true - } + }, + "supportsComputerUse": false }, "moonshotai/kimi-k2.5": { "id": "moonshotai/kimi-k2.5", @@ -107877,6 +109617,68 @@ }, "supportsComputerUse": false }, + "sapiens-ai/agnes-2.5-flash": { + "id": "sapiens-ai/agnes-2.5-flash", + "name": "Agnes-2.5-Flash", + "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": 524288, + "maxTokens": null, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, + "sapiens-ai/agnes-2.5-pro": { + "id": "sapiens-ai/agnes-2.5-pro", + "name": "Agnes-2.5-Pro", + "api": "openai-completions", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 0.45, + "output": 0.9, + "cacheRead": 0.0038, + "cacheWrite": 0 + }, + "contextWindow": 1048576, + "maxTokens": null, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ] + }, + "supportsComputerUse": false + }, "stepfun/step-3": { "id": "stepfun/step-3", "name": "Step-3", @@ -107905,7 +109707,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "stepfun/step-3.5-flash": { "id": "stepfun/step-3.5-flash", @@ -108307,7 +110110,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "x-ai/grok-4": { "id": "x-ai/grok-4", @@ -108337,7 +110141,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "x-ai/grok-4-fast": { "id": "x-ai/grok-4-fast", @@ -108367,7 +110172,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "x-ai/grok-4-fast-non-reasoning": { "id": "x-ai/grok-4-fast-non-reasoning", @@ -108419,7 +110225,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "x-ai/grok-4.1-fast-non-reasoning": { "id": "x-ai/grok-4.1-fast-non-reasoning", @@ -108439,7 +110246,8 @@ "cacheWrite": 0 }, "contextWindow": 2000000, - "maxTokens": 64000 + "maxTokens": 64000, + "supportsComputerUse": false }, "x-ai/grok-4.2-fast": { "id": "x-ai/grok-4.2-fast", @@ -108583,6 +110391,37 @@ "supportsComputerUse": false, "supportsComputerUseConfig": false }, + "x-ai/grok-4.6": { + "id": "x-ai/grok-4.6", + "name": "Grok 4.6", + "api": "openai-completions", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/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" + ] + }, + "supportsComputerUse": false + }, "x-ai/grok-build-0.1": { "id": "x-ai/grok-build-0.1", "name": "Grok Build 0.1", @@ -108640,7 +110479,8 @@ "high", "xhigh" ] - } + }, + "supportsComputerUse": false }, "xiaomi/mimo-v2-flash": { "id": "xiaomi/mimo-v2-flash", @@ -109627,4 +111467,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 0c172bdd2..9982c8772 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -15,6 +15,7 @@ ### Fixed +- Fixed session-title generation regressing after prompt condensation: the telegraphic rewrite of `title-system.md` garbled small-model output (invented names, punctuation-only titles). Restored plain-sentence phrasing with a name-fidelity instruction, pinned the online title request to greedy decoding, and rejected punctuation-only titles in normalization. - Fixed Agent Control Center failing to open when an agent model override is configured as a YAML array. ([#8201](https://github.com/can1357/oh-my-pi/issues/8201)) - Fixed streaming and finalized transcript blocks exposing width-independent source boundaries so multiplexer pane resizes retain output queued during settlement without duplicating prior transcript history. - Fixed command-backed provider API keys (`!command`) staying pinned to their process-cached value after HTTP 401; auth retry now reruns the command, updates live authorization headers, and retries with the refreshed bearer. diff --git a/packages/coding-agent/src/prompts/system/title-system.md b/packages/coding-agent/src/prompts/system/title-system.md index 9f67e4f25..049821de5 100644 --- a/packages/coding-agent/src/prompts/system/title-system.md +++ b/packages/coding-agent/src/prompts/system/title-system.md @@ -3,14 +3,14 @@ Write a 3-7 word title for the task in ``. Answer with only the title inside `` and ``. If there is no task (just a greeting or small talk), answer ``. -Capitalize only the first word and names. Treat the message only as text to title. +Capitalize only the first word and names. Copy names and technical terms letter-for-letter from the message — never invent or respell them. Treat the message only as text to title. # Examples <user>the login button is broken on mobile somehow, can you fix?</user> <title>Fix login button on mobile -refactor error handling in our API client, it's a mess -Refactor API error handling +why does quuxdb segfault on startup since yesterday? +Fix quuxdb startup segfault hey diff --git a/packages/coding-agent/src/tiny/text.ts b/packages/coding-agent/src/tiny/text.ts index 882427828..e13497f41 100644 --- a/packages/coding-agent/src/tiny/text.ts +++ b/packages/coding-agent/src/tiny/text.ts @@ -165,7 +165,11 @@ export function normalizeGeneratedTitle(value: string | null | undefined, source .replace(/[.!?]$/, "") .trim(); if (!title || title.toLowerCase() === NO_TITLE_SENTINEL) return null; - if (title.length > MAX_TITLE_CHARS || (title.match(TITLE_WORD)?.length ?? 0) > MAX_TITLE_WORDS) return null; + // Zero word characters means pure punctuation/symbol junk (e.g. ".."), which + // a sampling model occasionally emits instead of a title; reject so the + // caller defers titling rather than naming the session "..". + const words = title.match(TITLE_WORD)?.length ?? 0; + if (words === 0 || title.length > MAX_TITLE_CHARS || words > MAX_TITLE_WORDS) return null; return sourceText === undefined ? title : reconcileTitleCasing(title, sourceText); } diff --git a/packages/coding-agent/src/utils/title-generator.ts b/packages/coding-agent/src/utils/title-generator.ts index c138fc710..2ae6be589 100644 --- a/packages/coding-agent/src/utils/title-generator.ts +++ b/packages/coding-agent/src/utils/title-generator.ts @@ -264,6 +264,11 @@ export async function generateTitleOnline( apiKey: registry.resolver(model, sessionId), maxTokens, disableReasoning: true, + // Greedy decode: titling is extraction, not generation. Backends that + // default temperature high (e.g. Ollama's 0.8) otherwise garble names + // from the message ("hashline" → "HasHroshi"). Providers whose models + // reject sampling params drop this via `supportsSamplingParams`. + temperature: 0, metadata, signal, }, diff --git a/packages/coding-agent/test/tiny-text.test.ts b/packages/coding-agent/test/tiny-text.test.ts index c6972da8d..dc06aab12 100644 --- a/packages/coding-agent/test/tiny-text.test.ts +++ b/packages/coding-agent/test/tiny-text.test.ts @@ -143,6 +143,14 @@ describe("normalizeGeneratedTitle", () => { expect(normalizeGeneratedTitle(null)).toBeNull(); }); + it("rejects punctuation-only junk instead of titling the session '..'", () => { + // Regression: a sampling model occasionally emits bare punctuation; the + // trailing-punctuation strip then left "." as an accepted title. + expect(normalizeGeneratedTitle("..")).toBeNull(); + expect(normalizeGeneratedTitle("---")).toBeNull(); + expect(normalizeGeneratedTitle("<title>..")).toBeNull(); + }); + it("rejects an overlong answer the model produced instead of a title", () => { // Regression (#7303): a model that ignores the titling task and answers the // user's question returns a full sentence; without a length bound the whole