From 8a7bc2a7f1b1230d477c6b29ad276c5db9b44781 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 4 Sep 2026 12:13:36 +0200 Subject: [PATCH] chore(ai): refresh the generated model catalog from live provider sources Explicit, reviewed regeneration via `npm run generate-models`: 1238 -> 1262 models (41 added, 17 removed). No provider dropped wholesale or lost >30% of its rows. GitHub Copilot removed claude-opus-4.5, claude-opus-4.6, claude-sonnet-4, claude-sonnet-4.5, gemini-3.1-pro-preview, gpt-4.1, gpt-5.2, and gpt-5.2-codex; its stale claude-sonnet-4.5 entry is what broke CI type checks against the regenerated catalog. Test references to the removed Copilot models move to claude-sonnet-4.6 and gpt-5.3-codex; the interleaved-thinking beta test uses claude-haiku-4.5, the only remaining non-adaptive Claude in the Copilot catalog. All other providers' referenced ids are unchanged. Every defaultModelPerProvider entry exists in the refreshed catalog except the pre-existing zai glm-5.1 gap already fixed in #2032. Linear: RES-1269 --- .../res-1269-refresh-model-catalog.md | 1 + packages/ai/src/models.generated.ts | 1299 +++++++++++------ packages/ai/test/context-overflow.test.ts | 2 +- .../ai/test/cross-provider-handoff.test.ts | 4 +- packages/ai/test/empty.test.ts | 8 +- .../ai/test/github-copilot-anthropic.test.ts | 8 +- packages/ai/test/image-tool-result.test.ts | 4 +- packages/ai/test/responseid.test.ts | 2 +- packages/ai/test/stream.test.ts | 2 +- packages/ai/test/tokens.test.ts | 2 +- .../test/tool-call-id-normalization.test.ts | 4 +- .../ai/test/tool-call-without-result.test.ts | 2 +- packages/ai/test/total-tokens.test.ts | 2 +- packages/ai/test/unicode-surrogate.test.ts | 6 +- 14 files changed, 883 insertions(+), 463 deletions(-) create mode 100644 packages/ai/.changes/res-1269-refresh-model-catalog.md diff --git a/packages/ai/.changes/res-1269-refresh-model-catalog.md b/packages/ai/.changes/res-1269-refresh-model-catalog.md new file mode 100644 index 0000000000..38650f84a5 --- /dev/null +++ b/packages/ai/.changes/res-1269-refresh-model-catalog.md @@ -0,0 +1 @@ +- Refreshed the generated model catalog from live provider sources: 41 models added (including claude-fable-5.1, gemini-3.8-flash, and GLM-5.3 across providers) and 17 removed; GitHub Copilot tests now use claude-sonnet-4.6 and gpt-5.3-codex for the models Copilot dropped. diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index a3945be9a1..a0a645884c 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -91,6 +91,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"bedrock-converse-stream">, + "anthropic.claude-fable-5-1": { + id: "anthropic.claude-fable-5-1", + name: "Claude Fable 5.1", + api: "bedrock-converse-stream", + provider: "amazon-bedrock", + baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"bedrock-converse-stream">, "anthropic.claude-haiku-4-5-20251001-v1:0": { id: "anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5", @@ -637,6 +655,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"bedrock-converse-stream">, + "global.anthropic.claude-fable-5-1": { + id: "global.anthropic.claude-fable-5-1", + name: "Claude Fable 5.1 (Global)", + api: "bedrock-converse-stream", + provider: "amazon-bedrock", + baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"bedrock-converse-stream">, "global.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "global.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (Global)", @@ -1728,6 +1764,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"bedrock-converse-stream">, + "us.anthropic.claude-fable-5-1": { + id: "us.anthropic.claude-fable-5-1", + name: "Claude Fable 5.1 (US)", + api: "bedrock-converse-stream", + provider: "amazon-bedrock", + baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 11, + output: 55, + cacheRead: 0.275, + cacheWrite: 13.75, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"bedrock-converse-stream">, "us.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "us.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (US)", @@ -2094,6 +2148,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "claude-fable-5-1": { + id: "claude-fable-5-1", + name: "Claude Fable 5.1", + api: "anthropic-messages", + provider: "anthropic", + baseUrl: "https://api.anthropic.com", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (latest)", @@ -3083,6 +3155,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "claude-fable-5.1": { + id: "claude-fable-5.1", + name: "Claude Fable 5.1", + api: "anthropic-messages", + provider: "cloudflare-ai-gateway", + baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "claude-haiku-4.5": { id: "claude-haiku-4.5", name: "Claude Haiku 4.5 (latest)", @@ -3904,6 +3994,24 @@ export const MODELS = { contextWindow: 262144, maxTokens: 256000, } satisfies Model<"openai-completions">, + "@cf/zai-org/glm-5.3": { + id: "@cf/zai-org/glm-5.3", + name: "Glm 5.3", + api: "openai-completions", + provider: "cloudflare-workers-ai", + baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", + compat: {"sendSessionAffinityHeaders":true}, + reasoning: true, + input: ["text"], + cost: { + input: 1.4, + output: 4.4, + cacheRead: 0.26, + cacheWrite: 0, + }, + contextWindow: 1310720, + maxTokens: 1310720, + } satisfies Model<"openai-completions">, "@cf/zai-org/glm-5.3-flash": { id: "@cf/zai-org/glm-5.3-flash", name: "Glm 5.3 Flash", @@ -3920,7 +4028,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1310720, - maxTokens: 1310720, + maxTokens: 1048576, } satisfies Model<"openai-completions">, }, "deepseek": { @@ -3964,35 +4072,35 @@ export const MODELS = { } satisfies Model<"openai-completions">, }, "fireworks": { - "accounts/fireworks/models/deepseek-v4-flash": { - id: "accounts/fireworks/models/deepseek-v4-flash", - name: "DeepSeek V4 Flash", + "accounts/fireworks/models/deepseek-v4-flash-0731": { + id: "accounts/fireworks/models/deepseek-v4-flash-0731", + name: "DeepSeek V4 Flash 0731", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { - input: 0.14, - output: 0.28, - cacheRead: 0.028, + input: 0.22, + output: 0.66, + cacheRead: 0.007, cacheWrite: 0, }, contextWindow: 1000000, maxTokens: 384000, } satisfies Model<"anthropic-messages">, - "accounts/fireworks/models/deepseek-v4-flash-0731": { - id: "accounts/fireworks/models/deepseek-v4-flash-0731", - name: "DeepSeek V4 Flash 0731", + "accounts/fireworks/models/deepseek-v4-flash-vision-exp": { + id: "accounts/fireworks/models/deepseek-v4-flash-vision-exp", + name: "DeepSeek V4 Flash Vision Exp", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { - input: 0.14, - output: 0.28, - cacheRead: 0.028, + input: 0.22, + output: 0.66, + cacheRead: 0.007, cacheWrite: 0, }, contextWindow: 1000000, @@ -4032,6 +4140,40 @@ export const MODELS = { contextWindow: 1048575, maxTokens: 131072, } satisfies Model<"anthropic-messages">, + "accounts/fireworks/models/glm-5p3": { + id: "accounts/fireworks/models/glm-5p3", + name: "GLM 5.3", + api: "anthropic-messages", + provider: "fireworks", + baseUrl: "https://api.fireworks.ai/inference", + reasoning: true, + input: ["text"], + cost: { + input: 1.4, + output: 4.4, + cacheRead: 0.26, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "accounts/fireworks/models/glm-5p3-flash": { + id: "accounts/fireworks/models/glm-5p3-flash", + name: "GLM 5.3 Flash", + api: "anthropic-messages", + provider: "fireworks", + baseUrl: "https://api.fireworks.ai/inference", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.5, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, "accounts/fireworks/models/gpt-oss-120b": { id: "accounts/fireworks/models/gpt-oss-120b", name: "GPT OSS 120B", @@ -4276,61 +4418,43 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, - "claude-haiku-4.5": { - id: "claude-haiku-4.5", - name: "Claude Haiku 4.5 (latest)", + "claude-fable-5.1": { + id: "claude-fable-5.1", + name: "Claude Fable 5.1", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsEagerToolInputStreaming":false}, reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, input: ["text", "image"], cost: { - input: 1, - output: 5, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, }, - contextWindow: 200000, - maxTokens: 64000, + contextWindow: 1000000, + maxTokens: 128000, } satisfies Model<"anthropic-messages">, - "claude-opus-4.5": { - id: "claude-opus-4.5", - name: "Claude Opus 4.5 (latest)", + "claude-haiku-4.5": { + id: "claude-haiku-4.5", + name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, + compat: {"supportsEagerToolInputStreaming":false}, reasoning: true, input: ["text", "image"], cost: { - input: 5, - output: 25, - cacheRead: 0.5, - cacheWrite: 6.25, + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, }, contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "claude-opus-4.6": { - id: "claude-opus-4.6", - name: "Claude Opus 4.6", - api: "anthropic-messages", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - reasoning: true, - thinkingLevelMap: {"max":"max"}, - input: ["text", "image"], - cost: { - input: 5, - output: 25, - cacheRead: 0.5, - cacheWrite: 6.25, - }, - contextWindow: 1000000, - maxTokens: 32000, + maxTokens: 64000, } satisfies Model<"anthropic-messages">, "claude-opus-4.7": { id: "claude-opus-4.7", @@ -4389,44 +4513,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"anthropic-messages">, - "claude-sonnet-4": { - id: "claude-sonnet-4", - name: "Claude Sonnet 4 (latest)", - api: "anthropic-messages", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsEagerToolInputStreaming":false}, - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 216000, - maxTokens: 16000, - } satisfies Model<"anthropic-messages">, - "claude-sonnet-4.5": { - id: "claude-sonnet-4.5", - name: "Claude Sonnet 4.5 (latest)", - api: "anthropic-messages", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsEagerToolInputStreaming":false}, - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, "claude-sonnet-4.6": { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", @@ -4465,25 +4551,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, - "gemini-3.1-pro-preview": { - id: "gemini-3.1-pro-preview", - name: "Gemini 3.1 Pro Preview", - api: "openai-completions", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, - reasoning: true, - input: ["text", "image"], - cost: { - input: 2, - output: 12, - cacheRead: 0.2, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, "gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", @@ -4541,24 +4608,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"openai-completions">, - "gpt-4.1": { - id: "gpt-4.1", - name: "GPT-4.1", + "gemini-3.8-flash": { + id: "gemini-3.8-flash", + name: "Gemini 3.8 Flash", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, - reasoning: false, + reasoning: true, input: ["text", "image"], cost: { - input: 2, - output: 8, - cacheRead: 0.5, + input: 0.75, + output: 3.75, + cacheRead: 0.075, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 16384, + contextWindow: 1000000, + maxTokens: 64000, } satisfies Model<"openai-completions">, "gpt-5-mini": { id: "gpt-5-mini", @@ -4579,44 +4646,6 @@ export const MODELS = { contextWindow: 264000, maxTokens: 64000, } satisfies Model<"openai-responses">, - "gpt-5.2": { - id: "gpt-5.2", - name: "GPT-5.2", - api: "openai-responses", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - reasoning: true, - thinkingLevelMap: {"off":null,"xhigh":"xhigh"}, - input: ["text", "image"], - cost: { - input: 1.75, - output: 14, - cacheRead: 0.175, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-responses">, - "gpt-5.2-codex": { - id: "gpt-5.2-codex", - name: "GPT-5.2 Codex", - api: "openai-responses", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - reasoning: true, - thinkingLevelMap: {"off":null,"xhigh":"xhigh"}, - input: ["text", "image"], - cost: { - input: 1.75, - output: 14, - cacheRead: 0.175, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-responses">, "gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", @@ -5099,13 +5128,14 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, - "gemini-flash-latest": { - id: "gemini-flash-latest", - name: "Gemini Flash Latest", + "gemini-3.8-flash": { + id: "gemini-3.8-flash", + name: "Gemini 3.8 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, + thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { input: 0.75, @@ -5116,38 +5146,38 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, - "gemini-flash-lite-latest": { - id: "gemini-flash-lite-latest", - name: "Gemini Flash-Lite Latest", + "gemini-flash-latest": { + id: "gemini-flash-latest", + name: "Gemini Flash Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { - input: 0.3, - output: 2.5, - cacheRead: 0.03, + input: 0.75, + output: 3.75, + cacheRead: 0.075, cacheWrite: 0, }, contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, - "gemini-robotics-er-1.6-preview": { - id: "gemini-robotics-er-1.6-preview", - name: "Gemini Robotics-ER 1.6 Preview", + "gemini-flash-lite-latest": { + id: "gemini-flash-lite-latest", + name: "Gemini Flash-Lite Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { - input: 1, - output: 5, - cacheRead: 0, + input: 0.3, + output: 2.5, + cacheRead: 0.03, cacheWrite: 0, }, - contextWindow: 131072, + contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, "gemma-4-26b-a4b-it": { @@ -5517,6 +5547,23 @@ export const MODELS = { contextWindow: 131072, maxTokens: 16384, } satisfies Model<"openai-completions">, + "qwen/qwen3.8-27b": { + id: "qwen/qwen3.8-27b", + name: "Qwen3.8 27B", + api: "openai-completions", + provider: "groq", + baseUrl: "https://api.groq.com/openai/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.8, + output: 4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131042, + maxTokens: 16384, + } satisfies Model<"openai-completions">, }, "huggingface": { "MiniMaxAI/MiniMax-M2": { @@ -6203,6 +6250,24 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 384000, } satisfies Model<"openai-completions">, + "deepseek-ai/DeepSeek-V4-Flash-Vision-Exp": { + id: "deepseek-ai/DeepSeek-V4-Flash-Vision-Exp", + name: "DeepSeek V4 Flash Vision Exp", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.44, + output: 1.32, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 384000, + } satisfies Model<"openai-completions">, "deepseek-ai/DeepSeek-V4-Pro": { id: "deepseek-ai/DeepSeek-V4-Pro", name: "DeepSeek V4 Pro", @@ -6526,7 +6591,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 64000, + maxTokens: 128000, } satisfies Model<"openai-completions">, "thinkingmachines/Inkling": { id: "thinkingmachines/Inkling", @@ -6744,6 +6809,24 @@ export const MODELS = { contextWindow: 262144, maxTokens: 131072, } satisfies Model<"openai-completions">, + "zai-org/GLM-5.3": { + id: "zai-org/GLM-5.3", + name: "GLM-5.3", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text"], + cost: { + input: 1.4, + output: 4.4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 131072, + } satisfies Model<"openai-completions">, "zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM-5.3-Flash", @@ -6752,7 +6835,7 @@ export const MODELS = { baseUrl: "https://router.huggingface.co/v1", compat: {"supportsDeveloperRole":false}, reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { input: 0.15, output: 0.5, @@ -8816,6 +8899,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "claude-fable-5-1": { + id: "claude-fable-5-1", + name: "Claude Fable 5.1", + api: "anthropic-messages", + provider: "opencode", + baseUrl: "https://opencode.ai/zen", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5", @@ -9138,6 +9239,24 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"google-generative-ai">, + "gemini-3.8-flash": { + id: "gemini-3.8-flash", + name: "Gemini 3.8 Flash", + api: "google-generative-ai", + provider: "opencode", + baseUrl: "https://opencode.ai/zen/v1", + reasoning: true, + thinkingLevelMap: {"off":null}, + input: ["text", "image"], + cost: { + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"google-generative-ai">, "glm-5": { id: "glm-5", name: "GLM-5", @@ -9582,23 +9701,6 @@ export const MODELS = { contextWindow: 256000, maxTokens: 256000, } satisfies Model<"openai-responses">, - "hy3-free": { - id: "hy3-free", - name: "Hy3 Free", - api: "openai-completions", - provider: "opencode", - baseUrl: "https://opencode.ai/zen/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 190000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, "kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", @@ -9668,6 +9770,23 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 131072, } satisfies Model<"openai-completions">, + "ling-3.0-flash-fin-free": { + id: "ling-3.0-flash-fin-free", + name: "Ling 3.0 Flash Fin Free", + api: "openai-completions", + provider: "opencode", + baseUrl: "https://opencode.ai/zen/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32768, + } satisfies Model<"openai-completions">, "mimo-v2.5-free": { id: "mimo-v2.5-free", name: "MiMo V2.5 Free", @@ -9770,6 +9889,23 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 131072, } satisfies Model<"openai-responses">, + "muse-spark-1.3-contributor-free": { + id: "muse-spark-1.3-contributor-free", + name: "Muse Spark 1.3 Free", + api: "openai-responses", + provider: "opencode", + baseUrl: "https://opencode.ai/zen/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 131072, + } satisfies Model<"openai-responses">, "nemotron-3-ultra-free": { id: "nemotron-3-ultra-free", name: "Nemotron 3 Ultra Free", @@ -10002,19 +10138,36 @@ export const MODELS = { } satisfies Model<"openai-responses">, "hy3": { id: "hy3", - name: "Hy3 (8x usage)", + name: "Hy3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/zen/go/v1", reasoning: true, input: ["text"], cost: { - input: 0.0175, - output: 0.0725, - cacheRead: 0.004375, + input: 0.14, + output: 0.58, + cacheRead: 0.035, cacheWrite: 0, }, contextWindow: 256000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "hy4-preview": { + id: "hy4-preview", + name: "Hy4 preview", + api: "openai-completions", + provider: "opencode-go", + baseUrl: "https://opencode.ai/zen/go/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.834, + output: 2.501, + cacheRead: 0.042, + cacheWrite: 0, + }, + contextWindow: 1024000, maxTokens: 64000, } satisfies Model<"openai-completions">, "kimi-k2.6": { @@ -10171,6 +10324,40 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 131072, } satisfies Model<"openai-responses">, + "muse-spark-1.3-contributor": { + id: "muse-spark-1.3-contributor", + name: "Muse Spark 1.3 Contributor", + api: "openai-responses", + provider: "opencode-go", + baseUrl: "https://opencode.ai/zen/go/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.1, + output: 0.2, + cacheRead: 0.002, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 131072, + } satisfies Model<"openai-responses">, + "omen-alpha": { + id: "omen-alpha", + name: "Omen Alpha", + api: "openai-completions", + provider: "opencode-go", + baseUrl: "https://opencode.ai/zen/go/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.66, + cacheRead: 0.04, + cacheWrite: 0, + }, + contextWindow: 500000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", @@ -10438,6 +10625,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-fable-5.1": { + id: "anthropic/claude-fable-5.1", + name: "Anthropic: Claude Fable 5.1", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Anthropic: Claude Haiku 4.5", @@ -10550,24 +10755,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "anthropic/claude-opus-4.7-fast": { - id: "anthropic/claude-opus-4.7-fast", - name: "Anthropic: Claude Opus 4.7 (Fast)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}, - input: ["text", "image"], - cost: { - input: 30, - output: 150, - cacheRead: 3, - cacheWrite: 37.5, - }, - contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, "anthropic/claude-opus-4.8": { id: "anthropic/claude-opus-4.8", name: "Anthropic: Claude Opus 4.8", @@ -10586,24 +10773,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "anthropic/claude-opus-4.8-fast": { - id: "anthropic/claude-opus-4.8-fast", - name: "Anthropic: Claude Opus 4.8 (Fast)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}, - input: ["text", "image"], - cost: { - input: 10, - output: 50, - cacheRead: 1, - cacheWrite: 12.5, - }, - contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, "anthropic/claude-opus-5": { id: "anthropic/claude-opus-5", name: "Claude Opus 5", @@ -10622,24 +10791,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "anthropic/claude-opus-5-fast": { - id: "anthropic/claude-opus-5-fast", - name: "Claude Opus 5 (Fast)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}, - input: ["text", "image"], - cost: { - input: 10, - output: 50, - cacheRead: 1, - cacheWrite: 12.5, - }, - contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, "anthropic/claude-sonnet-4": { id: "anthropic/claude-sonnet-4", name: "Anthropic: Claude Sonnet 4", @@ -10721,34 +10872,17 @@ export const MODELS = { provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", compat: {"supportsReasoningEffort":false}, - reasoning: true, - thinkingLevelMap: {"off":null,"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, - input: ["text"], - cost: { - input: 0.22, - output: 0.85, - cacheRead: 0.06, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 235929, - } satisfies Model<"openai-completions">, - "arcee-ai/virtuoso-large": { - id: "arcee-ai/virtuoso-large", - name: "Arcee AI: Virtuoso Large", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0.75, - output: 1.2, - cacheRead: 0, + input: 0.25, + output: 0.7999999999999999, + cacheRead: 0.06, cacheWrite: 0, }, - contextWindow: 131072, - maxTokens: 64000, + contextWindow: 262144, + maxTokens: 80000, } satisfies Model<"openai-completions">, "auto": { id: "auto", @@ -10940,13 +11074,13 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.2574, - output: 1.0287, + input: 0.32, + output: 0.8899999999999999, cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 16000, + maxTokens: 16384, } satisfies Model<"openai-completions">, "deepseek/deepseek-chat-v3-0324": { id: "deepseek/deepseek-chat-v3-0324", @@ -11109,9 +11243,9 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max","max":null}, input: ["text"], cost: { - input: 0.07, - output: 0.14, - cacheRead: 0.014, + input: 0.065, + output: 0.18, + cacheRead: 0.016, cacheWrite: 0, }, contextWindow: 1310720, @@ -11147,9 +11281,9 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max","max":null}, input: ["text"], cost: { - input: 0.87, - output: 1.74, - cacheRead: 0.0725, + input: 1.04226, + output: 2.08452, + cacheRead: 0.086855, cacheWrite: 0, }, contextWindow: 1048576, @@ -11166,9 +11300,9 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max","max":null}, input: ["text"], cost: { - input: 1.32, - output: 3.9600000000000004, - cacheRead: 0.044, + input: 1.1154, + output: 3.3461999999999996, + cacheRead: 0.03718, cacheWrite: 0, }, contextWindow: 1048576, @@ -11461,10 +11595,28 @@ export const MODELS = { thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}, input: ["text", "image"], cost: { - input: 0.375, - output: 1.875, - cacheRead: 0.0375, - cacheWrite: 0.0208333333333333, + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.0416666666666667, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3.8-flash": { + id: "google/gemini-3.8-flash", + name: "Google: Gemini 3.8 Flash", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}, + input: ["text", "image"], + cost: { + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.0416666666666667, }, contextWindow: 1048576, maxTokens: 65536, @@ -11500,7 +11652,7 @@ export const MODELS = { cacheRead: 0.04, cacheWrite: 0, }, - contextWindow: 262144, + contextWindow: 131072, maxTokens: 117964, } satisfies Model<"openai-completions">, "google/gemma-4-26b-a4b-it": { @@ -11596,6 +11748,24 @@ export const MODELS = { contextWindow: 131072, maxTokens: 117964, } satisfies Model<"openai-completions">, + "ibm-granite/granite-4.2-8b": { + id: "ibm-granite/granite-4.2-8b", + name: "IBM: Granite 4.2 8B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":null}, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.15, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 117964, + } satisfies Model<"openai-completions">, "inception/mercury-2": { id: "inception/mercury-2", name: "Inception: Mercury 2", @@ -11614,6 +11784,24 @@ export const MODELS = { contextWindow: 128000, maxTokens: 50000, } satisfies Model<"openai-completions">, + "inception/mercury-2.5-preview": { + id: "inception/mercury-2.5-preview", + name: "Inception: Mercury 2.5 Preview", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}, + input: ["text"], + cost: { + input: 0.04, + output: 0.15, + cacheRead: 0.004, + cacheWrite: 0, + }, + contextWindow: 260000, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "inclusionai/ling-3.0-flash": { id: "inclusionai/ling-3.0-flash", name: "Ling-3.0-flash", @@ -11633,9 +11821,9 @@ export const MODELS = { contextWindow: 262144, maxTokens: 32768, } satisfies Model<"openai-completions">, - "inclusionai/ling-3.0-flash-fin:free": { - id: "inclusionai/ling-3.0-flash-fin:free", - name: "Ling 3.0 Flash Fin (free)", + "inclusionai/ling-3.0-flash-fin": { + id: "inclusionai/ling-3.0-flash-fin", + name: "Ling 3.0 Flash Fin", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -11644,30 +11832,32 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0, - output: 0, - cacheRead: 0, + input: 0.06, + output: 0.18, + cacheRead: 0.012, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 235929, } satisfies Model<"openai-completions">, - "kwaipilot/kat-coder-air-v2.5": { - id: "kwaipilot/kat-coder-air-v2.5", - name: "Kwaipilot: KAT-Coder-Air V2.5", + "inclusionai/ling-3.0-flash-fin:free": { + id: "inclusionai/ling-3.0-flash-fin:free", + name: "Ling 3.0 Flash Fin (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + compat: {"supportsReasoningEffort":false}, + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0.15, - output: 0.6, - cacheRead: 0.03, + input: 0, + output: 0, + cacheRead: 0, cacheWrite: 0, }, - contextWindow: 256000, - maxTokens: 80000, + contextWindow: 262144, + maxTokens: 32768, } satisfies Model<"openai-completions">, "kwaipilot/kat-coder-pro-v2": { id: "kwaipilot/kat-coder-pro-v2", @@ -11684,7 +11874,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 80000, + maxTokens: 144000, } satisfies Model<"openai-completions">, "kwaipilot/kat-coder-pro-v2.5": { id: "kwaipilot/kat-coder-pro-v2.5", @@ -11701,7 +11891,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 80000, + maxTokens: 235929, } satisfies Model<"openai-completions">, "liquid/lfm-2.5-2.6b:free": { id: "liquid/lfm-2.5-2.6b:free", @@ -11784,13 +11974,13 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.71, - output: 0.71, - cacheRead: 0.71, + input: 0.09999999999999999, + output: 0.32, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 115200, + maxTokens: 16384, } satisfies Model<"openai-completions">, "meta-llama/llama-4-maverick": { id: "meta-llama/llama-4-maverick", @@ -11802,12 +11992,12 @@ export const MODELS = { input: ["text", "image"], cost: { input: 0.19999999999999998, - output: 0.7999999999999999, + output: 0.696, cacheRead: 0, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 16384, + maxTokens: 115200, } satisfies Model<"openai-completions">, "meta-llama/llama-4-scout": { id: "meta-llama/llama-4-scout", @@ -11818,13 +12008,13 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.11, - output: 0.33999999999999997, - cacheRead: 0.055, + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1310720, - maxTokens: 8192, + maxTokens: 16384, } satisfies Model<"openai-completions">, "meta/muse-glimmer-30b": { id: "meta/muse-glimmer-30b", @@ -11836,8 +12026,8 @@ export const MODELS = { thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}, input: ["text", "image"], cost: { - input: 0.35, - output: 1.5, + input: 0.3, + output: 1.1, cacheRead: 0.04, cacheWrite: 0, }, @@ -11898,6 +12088,42 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 943718, } satisfies Model<"openai-completions">, + "meta/muse-spark-1.3": { + id: "meta/muse-spark-1.3", + name: "Meta: Muse Spark 1.3", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}, + input: ["text", "image"], + cost: { + input: 1.25, + output: 4.25, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 943718, + } satisfies Model<"openai-completions">, + "meta/muse-spark-1.3-contributor": { + id: "meta/muse-spark-1.3-contributor", + name: "Meta: Muse Spark 1.3 Contributor", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.19999999999999998, + cacheRead: 0.002, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 943718, + } satisfies Model<"openai-completions">, "minimax/minimax-m1": { id: "minimax/minimax-m1", name: "MiniMax: MiniMax M1", @@ -12076,9 +12302,9 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.44, - output: 2.2, - cacheRead: 0.044, + input: 0.39999999999999997, + output: 2, + cacheRead: 0.04, cacheWrite: 0, }, contextWindow: 262144, @@ -12338,8 +12564,8 @@ export const MODELS = { cacheRead: 0.01, cacheWrite: 0, }, - contextWindow: 32000, - maxTokens: 25600, + contextWindow: 32768, + maxTokens: 26214, } satisfies Model<"openai-completions">, "moonshotai/kimi-k2": { id: "moonshotai/kimi-k2", @@ -12520,11 +12746,11 @@ export const MODELS = { cost: { input: 0.049999999999999996, output: 0.19999999999999998, - cacheRead: 0.024999999999999998, + cacheRead: 0.03, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 228000, + maxTokens: 235929, } satisfies Model<"openai-completions">, "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": { id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", @@ -12591,13 +12817,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":"medium","high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0.5, - output: 2.2, - cacheRead: 0.09999999999999999, + input: 0.625, + output: 3.125, + cacheRead: 0.1875, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 16384, + maxTokens: 32768, } satisfies Model<"openai-completions">, "nvidia/nemotron-3-ultra-550b-a55b:free": { id: "nvidia/nemotron-3-ultra-550b-a55b:free", @@ -12628,13 +12854,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0.09999999999999999, - output: 0.25, - cacheRead: 0.049999999999999996, + input: 0.08, + output: 0.19999999999999998, + cacheRead: 0.04, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 235929, + maxTokens: 131072, } satisfies Model<"openai-completions">, "nvidia/nemotron-3.5-lightning:free": { id: "nvidia/nemotron-3.5-lightning:free", @@ -14161,13 +14387,13 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.13, - output: 0.52, + input: 0.15, + output: 0.6, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 16384, } satisfies Model<"openai-completions">, "qwen/qwen3-vl-30b-a3b-thinking": { id: "qwen/qwen3-vl-30b-a3b-thinking", @@ -14252,13 +14478,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text", "image"], cost: { - input: 0.26, - output: 2.08, + input: 0.29, + output: 2.4, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 235929, + maxTokens: 81920, } satisfies Model<"openai-completions">, "qwen/qwen3.5-27b": { id: "qwen/qwen3.5-27b", @@ -14309,13 +14535,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text", "image"], cost: { - input: 0.39, - output: 2.34, - cacheRead: 0, + input: 0.55, + output: 3.5, + cacheRead: 0.22499999999999998, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, + maxTokens: 235929, } satisfies Model<"openai-completions">, "qwen/qwen3.5-9b": { id: "qwen/qwen3.5-9b", @@ -14573,10 +14799,10 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":null,"xhigh":"xhigh","max":null}, input: ["text", "image"], cost: { - input: 0.425, - output: 2.5500000000000003, + input: 0.42, + output: 3, cacheRead: 0.08499999999999999, - cacheWrite: 0.53125, + cacheWrite: 0, }, contextWindow: 1000000, maxTokens: 131072, @@ -14823,13 +15049,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":"minimal","low":"low","medium":"medium","high":"high","xhigh":null,"max":"max"}, input: ["text", "image"], cost: { - input: 0.95, + input: 1, output: 4.05, - cacheRead: 0.16, + cacheRead: 0.16999999999999998, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 262144, + maxTokens: 471859, } satisfies Model<"openai-completions">, "thinkingmachines/inkling-small": { id: "thinkingmachines/inkling-small", @@ -15121,13 +15347,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 0.43, - output: 1.75, - cacheRead: 0.08, + input: 0.55, + output: 2.2, + cacheRead: 0.11, cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 16384, + maxTokens: 131072, } satisfies Model<"openai-completions">, "z-ai/glm-4.6v": { id: "z-ai/glm-4.6v", @@ -15235,13 +15461,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null,"max":null}, input: ["text"], cost: { - input: 1.26, - output: 3.9600000000000004, - cacheRead: 0.234, + input: 0.966, + output: 3.036, + cacheRead: 0.1794, cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 182476, + maxTokens: 128000, } satisfies Model<"openai-completions">, "z-ai/glm-5.2": { id: "z-ai/glm-5.2", @@ -15253,13 +15479,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"xhigh","max":null}, input: ["text"], cost: { - input: 1.19, - output: 3.74, - cacheRead: 0.221, + input: 0.966, + output: 3.036, + cacheRead: 0.1932, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 262144, + maxTokens: 131072, } satisfies Model<"openai-completions">, "z-ai/glm-5.2:free": { id: "z-ai/glm-5.2:free", @@ -15291,11 +15517,11 @@ export const MODELS = { cost: { input: 1.4, output: 4.4, - cacheRead: 0.26, + cacheRead: 0.14, cacheWrite: 0, }, - contextWindow: 1048576, - maxTokens: 131072, + contextWindow: 1310720, + maxTokens: 262144, } satisfies Model<"openai-completions">, "z-ai/glm-5.3-flash": { id: "z-ai/glm-5.3-flash", @@ -15346,7 +15572,7 @@ export const MODELS = { cost: { input: 10, output: 50, - cacheRead: 1, + cacheRead: 0.25, cacheWrite: 12.5, }, contextWindow: 1000000, @@ -15418,13 +15644,13 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max","max":null}, input: ["text"], cost: { - input: 0.03, - output: 0.09999999999999999, - cacheRead: 0.007, + input: 0.049999999999999996, + output: 0.16, + cacheRead: 0.013000000000000001, cacheWrite: 0, }, contextWindow: 1310720, - maxTokens: 131072, + maxTokens: 393216, } satisfies Model<"openai-completions">, "~google/gemini-flash-latest": { id: "~google/gemini-flash-latest", @@ -15436,10 +15662,10 @@ export const MODELS = { thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}, input: ["text", "image"], cost: { - input: 0.375, - output: 1.875, - cacheRead: 0.0375, - cacheWrite: 0.0208333333333333, + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.0416666666666667, }, contextWindow: 1048576, maxTokens: 65536, @@ -15472,9 +15698,9 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}, input: ["text", "image"], cost: { - input: 2.5500000000000003, - output: 12.75, - cacheRead: 0.25599998999999996, + input: 2.5, + output: 14, + cacheRead: 0.29, cacheWrite: 0, }, contextWindow: 1048576, @@ -15534,6 +15760,24 @@ export const MODELS = { contextWindow: 500000, maxTokens: 450000, } satisfies Model<"openai-completions">, + "~z-ai/glm-flash-latest": { + id: "~z-ai/glm-flash-latest", + name: "Z.ai: GLM Flash Latest", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.25, + cacheRead: 0.015, + cacheWrite: 0, + }, + contextWindow: 1310720, + maxTokens: 943718, + } satisfies Model<"openai-completions">, "~z-ai/glm-latest": { id: "~z-ai/glm-latest", name: "Z.ai: GLM Latest", @@ -15544,13 +15788,13 @@ export const MODELS = { thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":null,"high":"high","xhigh":null,"max":"max"}, input: ["text"], cost: { - input: 1.4, - output: 4.4, - cacheRead: 0.26, + input: 1.15, + output: 3.5, + cacheRead: 0.09999999999999999, cacheWrite: 0, }, - contextWindow: 1048576, - maxTokens: 131072, + contextWindow: 1310720, + maxTokens: 235929, } satisfies Model<"openai-completions">, }, "prime-inference": { @@ -15806,7 +16050,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 16000, + maxTokens: 16384, } satisfies Model<"openai-completions">, "deepseek/deepseek-chat-v3-0324": { id: "deepseek/deepseek-chat-v3-0324", @@ -16129,7 +16373,7 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 262144, + contextWindow: 131072, maxTokens: 117964, } satisfies Model<"openai-completions">, "meta-llama/Llama-3.2-1B-Instruct": { @@ -16184,7 +16428,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 115200, + maxTokens: 16384, } satisfies Model<"openai-completions">, "meta-llama/llama-4-maverick": { id: "meta-llama/llama-4-maverick", @@ -16202,7 +16446,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 16384, + maxTokens: 115200, } satisfies Model<"openai-completions">, "minimax/minimax-m2.5": { id: "minimax/minimax-m2.5", @@ -16448,7 +16692,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 228000, + maxTokens: 235929, featured: true, } satisfies Model<"openai-completions">, "nvidia/nemotron-3-super-120b-a12b": { @@ -16824,8 +17068,8 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":"max"}, input: ["text", "image"], cost: { - input: 1, - output: 6, + input: 0.2, + output: 1.2, cacheRead: 0, cacheWrite: 0, }, @@ -17169,7 +17413,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 16384, } satisfies Model<"openai-completions">, "qwen/qwen3-vl-8b-instruct": { id: "qwen/qwen3-vl-8b-instruct", @@ -17344,6 +17588,25 @@ export const MODELS = { maxTokens: 30000, featured: true, } satisfies Model<"openai-completions">, + "x-ai/grok-4.6": { + id: "x-ai/grok-4.6", + name: "Grok 4.6", + api: "openai-completions", + provider: "prime-inference", + baseUrl: "https://api.pinference.ai/api/v1", + compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","supportsStrictMode":false}, + reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":"xhigh","max":null}, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 500000, + maxTokens: 450000, + } satisfies Model<"openai-completions">, "xiaomi/mimo-v2.5": { id: "xiaomi/mimo-v2.5", name: "Mimo V2.5", @@ -17437,7 +17700,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 16384, + maxTokens: 131072, } satisfies Model<"openai-completions">, "z-ai/glm-4.7": { id: "z-ai/glm-4.7", @@ -17514,7 +17777,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 182476, + maxTokens: 128000, featured: true, } satisfies Model<"openai-completions">, "z-ai/glm-5.2": { @@ -17534,7 +17797,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 262144, + maxTokens: 131072, featured: true, } satisfies Model<"openai-completions">, "z-ai/glm-5.3": { @@ -17553,8 +17816,8 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 1048576, - maxTokens: 131072, + contextWindow: 1310720, + maxTokens: 262144, } satisfies Model<"openai-completions">, "z-ai/glm-5.3-flash": { id: "z-ai/glm-5.3-flash", @@ -18013,11 +18276,11 @@ export const MODELS = { cost: { input: 2, output: 6, - cacheRead: 0.19999999999999998, + cacheRead: 0.25, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 131072, + maxTokens: 128000, } satisfies Model<"anthropic-messages">, "alibaba/qwen3.8-27b": { id: "alibaba/qwen3.8-27b", @@ -18028,10 +18291,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.55, - output: 3.3000000000000003, - cacheRead: 0.11, - cacheWrite: 0, + input: 0.5, + output: 3, + cacheRead: 0.09999999999999999, + cacheWrite: 0.625, }, contextWindow: 1000000, maxTokens: 131072, @@ -18053,6 +18316,23 @@ export const MODELS = { contextWindow: 991000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "alibaba/qwen3.8-flash-next": { + id: "alibaba/qwen3.8-flash-next", + name: "Qwen 3.8 Flash Next", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.12, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3.8-max": { id: "alibaba/qwen3.8-max", name: "Qwen 3.8 Max", @@ -18070,6 +18350,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "alibaba/qwen3.8-max-0902": { + id: "alibaba/qwen3.8-max-0902", + name: "Qwen3.8 Max 0902", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0.25, + cacheWrite: 2.5, + }, + contextWindow: 991000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "amazon/nova-2-lite": { id: "amazon/nova-2-lite", name: "Nova 2 Lite", @@ -18173,6 +18470,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "anthropic/claude-fable-5.1": { + id: "anthropic/claude-fable-5.1", + name: "Claude Fable 5.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + thinkingLevelMap: {"off":null,"xhigh":"xhigh","max":"max"}, + input: ["text", "image"], + cost: { + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", @@ -18487,23 +18802,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 8192, } satisfies Model<"anthropic-messages">, - "deepseek/deepseek-v3": { - id: "deepseek/deepseek-v3", - name: "DeepSeek V3 0324", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.27, - output: 1.12, - cacheRead: 0.135, - cacheWrite: 0, - }, - contextWindow: 163840, - maxTokens: 163840, - } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3.1": { id: "deepseek/deepseek-v3.1", name: "DeepSeek V3.1", @@ -18620,8 +18918,8 @@ export const MODELS = { cacheRead: 0.007, cacheWrite: 0, }, - contextWindow: 1000000, - maxTokens: 384000, + contextWindow: 1048576, + maxTokens: 1048576, } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v4-pro": { id: "deepseek/deepseek-v4-pro", @@ -18632,13 +18930,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 1.74, - output: 3.48, - cacheRead: 0.14, + input: 0.66, + output: 1.9800000000000002, + cacheRead: 0.022, cacheWrite: 0, }, - contextWindow: 1048600, - maxTokens: 1048600, + contextWindow: 1000000, + maxTokens: 384000, } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v4-pro-0813": { id: "deepseek/deepseek-v4-pro-0813", @@ -18827,6 +19125,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 65536, } satisfies Model<"anthropic-messages">, + "google/gemini-3.8-flash": { + id: "google/gemini-3.8-flash", + name: "Gemini 3.8 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, "google/gemma-4-26b-a4b-it": { id: "google/gemma-4-26b-a4b-it", name: "Google Gemma 4 26B A4B", @@ -19184,6 +19499,40 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 1048576, } satisfies Model<"anthropic-messages">, + "meta/muse-spark-1.3": { + id: "meta/muse-spark-1.3", + name: "Muse Spark 1.3", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 4.25, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, + "meta/muse-spark-1.3-contributor": { + id: "meta/muse-spark-1.3-contributor", + name: "Muse Spark 1.3 Contributor", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.19999999999999998, + cacheRead: 0.002, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, "minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax M2", @@ -19271,7 +19620,7 @@ export const MODELS = { } satisfies Model<"anthropic-messages">, "minimax/minimax-m2.7": { id: "minimax/minimax-m2.7", - name: "Minimax M2.7", + name: "MiniMax M2.7", api: "anthropic-messages", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", @@ -19288,7 +19637,7 @@ export const MODELS = { } satisfies Model<"anthropic-messages">, "minimax/minimax-m2.7-free": { id: "minimax/minimax-m2.7-free", - name: "Minimax M2.7 (Free)", + name: "MiniMax M2.7 (Free)", api: "anthropic-messages", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", @@ -19334,8 +19683,8 @@ export const MODELS = { cacheRead: 0.06, cacheWrite: 0, }, - contextWindow: 1000000, - maxTokens: 1000000, + contextWindow: 512000, + maxTokens: 512000, } satisfies Model<"anthropic-messages">, "minimax/minimax-m3-free": { id: "minimax/minimax-m3-free", @@ -19637,7 +19986,7 @@ export const MODELS = { cost: { input: 0.95, output: 4, - cacheRead: 0.19, + cacheRead: 0.16, cacheWrite: 0, }, contextWindow: 256000, @@ -19757,8 +20106,8 @@ export const MODELS = { input: ["text"], cost: { input: 0.049999999999999996, - output: 0.15, - cacheRead: 0.049999999999999996, + output: 0.19999999999999998, + cacheRead: 0.01, cacheWrite: 0, }, contextWindow: 262144, @@ -21086,13 +21435,30 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.13199999999999998, - output: 0.5279999999999999, - cacheRead: 0.032999999999999995, + input: 0.14, + output: 0.58, + cacheRead: 0.035, cacheWrite: 0, }, - contextWindow: 256000, - maxTokens: 128000, + contextWindow: 262144, + maxTokens: 262144, + } satisfies Model<"anthropic-messages">, + "tencent/hy4-preview": { + id: "tencent/hy4-preview", + name: "Tencent Hy4 Preview", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.834, + output: 2.501, + cacheRead: 0.041999999999999996, + cacheWrite: 0, + }, + contextWindow: 1024000, + maxTokens: 64000, } satisfies Model<"anthropic-messages">, "thinkingmachines/inkling": { id: "thinkingmachines/inkling", @@ -21162,6 +21528,23 @@ export const MODELS = { contextWindow: 1050000, maxTokens: 131000, } satisfies Model<"anthropic-messages">, + "xiaomi/mimo-v2.5-pro-ultraspeed": { + id: "xiaomi/mimo-v2.5-pro-ultraspeed", + name: "MiMo V2.5 Pro UltraSpeed", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 1.305, + output: 2.61, + cacheRead: 0.0108, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, "zai/glm-4.5": { id: "zai/glm-4.5", name: "GLM 4.5", @@ -21375,13 +21758,30 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 1.4, - output: 4.4, - cacheRead: 0.26, + input: 0.7, + output: 2.2, + cacheRead: 0.13, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 12800, + maxTokens: 1000000, + } satisfies Model<"anthropic-messages">, + "zai/glm-5.3-fast": { + id: "zai/glm-5.3-fast", + name: "GLM 5.3 Fast", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 2.0999999999999996, + output: 6.6000000000000005, + cacheRead: 0.21, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 262144, } satisfies Model<"anthropic-messages">, "zai/glm-5.3-flash": { id: "zai/glm-5.3-flash", @@ -21400,6 +21800,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 131000, } satisfies Model<"anthropic-messages">, + "zai/glm-5.3-promo-50": { + id: "zai/glm-5.3-promo-50", + name: "GLM 5.3 (50% off)", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.7, + output: 2.2, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, "zai/glm-5v-turbo": { id: "zai/glm-5v-turbo", name: "GLM 5V Turbo", diff --git a/packages/ai/test/context-overflow.test.ts b/packages/ai/test/context-overflow.test.ts index 63d185ef71..fbb5722391 100644 --- a/packages/ai/test/context-overflow.test.ts +++ b/packages/ai/test/context-overflow.test.ts @@ -116,7 +116,7 @@ describe("Context overflow error handling", () => { it.skipIf(!githubCopilotToken)( "claude-sonnet-4 - should detect overflow via isContextOverflow", async () => { - const model = getModel("github-copilot", "claude-sonnet-4.5"); + const model = getModel("github-copilot", "claude-sonnet-4.6"); const result = await testContextOverflow(model, githubCopilotToken!); logResult(result); diff --git a/packages/ai/test/cross-provider-handoff.test.ts b/packages/ai/test/cross-provider-handoff.test.ts index b1abc6d5fa..dc1a7be092 100644 --- a/packages/ai/test/cross-provider-handoff.test.ts +++ b/packages/ai/test/cross-provider-handoff.test.ts @@ -40,8 +40,8 @@ const PROVIDER_MODEL_PAIRS: ProviderModelPair[] = [ { provider: "azure-openai-responses", model: "gpt-4o-mini", label: "azure-openai-responses-gpt-4o-mini" }, { provider: "openai-codex", model: "gpt-5.2-codex", label: "openai-codex-gpt-5.2-codex" }, { provider: "prime-inference", model: "openai/gpt-5.5", label: "prime-inference-gpt-5.5" }, - { provider: "github-copilot", model: "claude-sonnet-4.5", label: "copilot-claude-sonnet-4.5" }, - { provider: "github-copilot", model: "gpt-5.2-codex", label: "copilot-gpt-5.2-codex" }, + { provider: "github-copilot", model: "claude-sonnet-4.6", label: "copilot-claude-sonnet-4.6" }, + { provider: "github-copilot", model: "gpt-5.3-codex", label: "copilot-gpt-5.3-codex" }, { provider: "github-copilot", model: "gemini-3.5-flash", label: "copilot-gemini-3.5-flash" }, { provider: "github-copilot", model: "grok-4.5", label: "copilot-grok-4.5" }, { diff --git a/packages/ai/test/empty.test.ts b/packages/ai/test/empty.test.ts index d68c1bf6fb..53e102effc 100644 --- a/packages/ai/test/empty.test.ts +++ b/packages/ai/test/empty.test.ts @@ -616,7 +616,7 @@ describe("AI Providers Empty Message Tests", () => { "claude-sonnet-4 - should handle empty content array", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testEmptyMessage(llm, { apiKey: githubCopilotToken }); }, ); @@ -625,7 +625,7 @@ describe("AI Providers Empty Message Tests", () => { "claude-sonnet-4 - should handle empty string content", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testEmptyStringMessage(llm, { apiKey: githubCopilotToken }); }, ); @@ -634,7 +634,7 @@ describe("AI Providers Empty Message Tests", () => { "claude-sonnet-4 - should handle whitespace-only content", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testWhitespaceOnlyMessage(llm, { apiKey: githubCopilotToken }); }, ); @@ -643,7 +643,7 @@ describe("AI Providers Empty Message Tests", () => { "claude-sonnet-4 - should handle empty assistant message in conversation", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testEmptyAssistantMessage(llm, { apiKey: githubCopilotToken }); }, ); diff --git a/packages/ai/test/github-copilot-anthropic.test.ts b/packages/ai/test/github-copilot-anthropic.test.ts index 92bff083be..986fe6e4c9 100644 --- a/packages/ai/test/github-copilot-anthropic.test.ts +++ b/packages/ai/test/github-copilot-anthropic.test.ts @@ -54,7 +54,7 @@ describe("Copilot Claude via Anthropic Messages", () => { }; it("uses Bearer auth, Copilot headers, and valid Anthropic Messages payload", async () => { - const model = getModel("github-copilot", "claude-sonnet-4.5"); + const model = getModel("github-copilot", "claude-sonnet-4.6"); expect(model.api).toBe("anthropic-messages"); const { streamAnthropic } = await import("../src/providers/anthropic.js"); @@ -80,14 +80,16 @@ describe("Copilot Claude via Anthropic Messages", () => { expect(beta).not.toContain("fine-grained-tool-streaming"); const params = mockState.createParams!; - expect(params.model).toBe("claude-sonnet-4.5"); + expect(params.model).toBe("claude-sonnet-4.6"); expect(params.stream).toBe(true); expect(params.max_tokens).toBeGreaterThan(0); expect(Array.isArray(params.messages)).toBe(true); }); it("includes interleaved-thinking beta when reasoning is enabled", async () => { - const model = getModel("github-copilot", "claude-sonnet-4.5"); + // claude-haiku-4.5: the beta header is only sent for non-adaptive-thinking models, + // and haiku is the only remaining non-adaptive Claude in the Copilot catalog. + const model = getModel("github-copilot", "claude-haiku-4.5"); const { streamAnthropic } = await import("../src/providers/anthropic.js"); const s = streamAnthropic(model, context, { apiKey: "tid_copilot_session_test_token", diff --git a/packages/ai/test/image-tool-result.test.ts b/packages/ai/test/image-tool-result.test.ts index 3f06cecb82..febc7e12f1 100644 --- a/packages/ai/test/image-tool-result.test.ts +++ b/packages/ai/test/image-tool-result.test.ts @@ -404,7 +404,7 @@ describe("Tool Results with Images", () => { "claude-sonnet-4 - should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await handleToolWithImageResult(llm, { apiKey: githubCopilotToken }); }, ); @@ -413,7 +413,7 @@ describe("Tool Results with Images", () => { "claude-sonnet-4 - should handle tool result with text and image", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await handleToolWithTextAndImageResult(llm, { apiKey: githubCopilotToken }); }, ); diff --git a/packages/ai/test/responseid.test.ts b/packages/ai/test/responseid.test.ts index 0ab4fd861c..00e6cc5df0 100644 --- a/packages/ai/test/responseid.test.ts +++ b/packages/ai/test/responseid.test.ts @@ -106,7 +106,7 @@ describe("responseId E2E Tests", () => { "Anthropic path should expose responseId", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await expectResponseId(llm, { apiKey: githubCopilotToken }); }, ); diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index 5de75a4f04..f2548247e5 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -1189,7 +1189,7 @@ describe("Generate E2E Tests", () => { }); describe("GitHub Copilot Provider (claude-sonnet-4 via Anthropic Messages)", () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); it.skipIf(!githubCopilotToken)("should complete basic text generation", { retry: 3 }, async () => { await basicTextGeneration(llm, { apiKey: githubCopilotToken }); diff --git a/packages/ai/test/tokens.test.ts b/packages/ai/test/tokens.test.ts index cdf9dd2f9e..eac9011642 100644 --- a/packages/ai/test/tokens.test.ts +++ b/packages/ai/test/tokens.test.ts @@ -266,7 +266,7 @@ describe("Token Statistics on Abort", () => { "claude-sonnet-4 - should include token stats when aborted mid-stream", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testTokensOnAbort(llm, { apiKey: githubCopilotToken }); }, ); diff --git a/packages/ai/test/tool-call-id-normalization.test.ts b/packages/ai/test/tool-call-id-normalization.test.ts index a41eaeba73..e266aea94c 100644 --- a/packages/ai/test/tool-call-id-normalization.test.ts +++ b/packages/ai/test/tool-call-id-normalization.test.ts @@ -23,7 +23,7 @@ describe("Tool Call ID Normalization - Live Handoff", () => { it.skipIf(!copilotToken || !openrouterKey)( "github-copilot -> openrouter should normalize pipe-separated IDs", async () => { - const copilotModel = getModel("github-copilot", "gpt-5.2-codex"); + const copilotModel = getModel("github-copilot", "gpt-5.3-codex"); const openrouterModel = getModel("openrouter", "openai/gpt-5.2-codex"); const userMessage: Message = { @@ -88,7 +88,7 @@ describe("Tool Call ID Normalization - Live Handoff", () => { it.skipIf(!copilotToken || !codexToken)( "github-copilot -> openai-codex should normalize pipe-separated IDs", async () => { - const copilotModel = getModel("github-copilot", "gpt-5.2-codex"); + const copilotModel = getModel("github-copilot", "gpt-5.3-codex"); const codexModel = getModel("openai-codex", "gpt-5.2-codex"); const userMessage: Message = { diff --git a/packages/ai/test/tool-call-without-result.test.ts b/packages/ai/test/tool-call-without-result.test.ts index 8a76350c5d..b7c91596d4 100644 --- a/packages/ai/test/tool-call-without-result.test.ts +++ b/packages/ai/test/tool-call-without-result.test.ts @@ -273,7 +273,7 @@ describe("Tool Call Without Result Tests", () => { "claude-sonnet-4 - should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => { - const model = getModel("github-copilot", "claude-sonnet-4.5"); + const model = getModel("github-copilot", "claude-sonnet-4.6"); await testToolCallWithoutResult(model, { apiKey: githubCopilotToken }); }, ); diff --git a/packages/ai/test/total-tokens.test.ts b/packages/ai/test/total-tokens.test.ts index c4da819dbd..f6b4e6bf87 100644 --- a/packages/ai/test/total-tokens.test.ts +++ b/packages/ai/test/total-tokens.test.ts @@ -554,7 +554,7 @@ describe("totalTokens field", () => { "claude-sonnet-4 - should return totalTokens equal to sum of components", { retry: 3, timeout: 60000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); console.log(`\nGitHub Copilot / ${llm.id}:`); const { first, second } = await testTotalTokensWithCache(llm, { apiKey: githubCopilotToken }); diff --git a/packages/ai/test/unicode-surrogate.test.ts b/packages/ai/test/unicode-surrogate.test.ts index b0c05a73ee..61f3880cac 100644 --- a/packages/ai/test/unicode-surrogate.test.ts +++ b/packages/ai/test/unicode-surrogate.test.ts @@ -401,7 +401,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => { "claude-sonnet-4 - should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testEmojiInToolResults(llm, { apiKey: githubCopilotToken }); }, ); @@ -410,7 +410,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => { "claude-sonnet-4 - should handle real-world LinkedIn comment data with emoji", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testRealWorldLinkedInData(llm, { apiKey: githubCopilotToken }); }, ); @@ -419,7 +419,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => { "claude-sonnet-4 - should handle unpaired high surrogate (0xD83D) in tool results", { retry: 3, timeout: 30000 }, async () => { - const llm = getModel("github-copilot", "claude-sonnet-4.5"); + const llm = getModel("github-copilot", "claude-sonnet-4.6"); await testUnpairedHighSurrogate(llm, { apiKey: githubCopilotToken }); }, );