From 164a69a601257308cd5f985c48a72c33c5d2bf5f Mon Sep 17 00:00:00 2001 From: Timo Lins Date: Tue, 13 Jan 2026 12:51:45 +0100 Subject: [PATCH 1/4] Add Vercel AI Gateway support --- packages/ai/CHANGELOG.md | 4 + packages/ai/README.md | 2 + packages/ai/scripts/generate-models.ts | 78 +- packages/ai/src/models.generated.ts | 2110 +++++++++++++++++ packages/ai/src/stream.ts | 1 + packages/ai/src/types.ts | 1 + packages/ai/test/stream.test.ts | 19 + packages/coding-agent/README.md | 3 +- packages/coding-agent/src/cli/args.ts | 1 + .../coding-agent/src/core/model-resolver.ts | 1 + .../coding-agent/test/model-resolver.test.ts | 36 +- .../web-ui/src/components/ProviderKeyInput.ts | 1 + 12 files changed, 2254 insertions(+), 3 deletions(-) diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 29ba1cf2..2ac0ff3c 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +- Added Vercel AI Gateway provider with model discovery and `AI_GATEWAY_API_KEY` env support. + ## [0.45.3] - 2026-01-13 ## [0.45.2] - 2026-01-13 diff --git a/packages/ai/README.md b/packages/ai/README.md index 90a71116..9a218115 100644 --- a/packages/ai/README.md +++ b/packages/ai/README.md @@ -56,6 +56,7 @@ Unified LLM API with automatic model discovery, provider configuration, token an - **Cerebras** - **xAI** - **OpenRouter** +- **Vercel AI Gateway** - **MiniMax** - **GitHub Copilot** (requires OAuth, see below) - **Google Gemini CLI** (requires OAuth, see below) @@ -862,6 +863,7 @@ In Node.js environments, you can set environment variables to avoid passing API | Cerebras | `CEREBRAS_API_KEY` | | xAI | `XAI_API_KEY` | | OpenRouter | `OPENROUTER_API_KEY` | +| Vercel AI Gateway | `AI_GATEWAY_API_KEY` | | zAI | `ZAI_API_KEY` | | MiniMax | `MINIMAX_API_KEY` | | GitHub Copilot | `COPILOT_GITHUB_TOKEN` or `GH_TOKEN` or `GITHUB_TOKEN` | diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index 11476ad9..05396fdb 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -32,6 +32,20 @@ interface ModelsDevModel { }; } +interface AiGatewayModel { + id: string; + name?: string; + context_window?: number; + max_tokens?: number; + tags?: string[]; + pricing?: { + input?: string | number; + output?: string | number; + input_cache_read?: string | number; + input_cache_write?: string | number; + }; +} + const COPILOT_STATIC_HEADERS = { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", @@ -39,6 +53,8 @@ const COPILOT_STATIC_HEADERS = { "Copilot-Integration-Id": "vscode-chat", } as const; +const AI_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh/v1"; + async function fetchOpenRouterModels(): Promise[]> { try { console.log("Fetching models from OpenRouter API..."); @@ -97,6 +113,64 @@ async function fetchOpenRouterModels(): Promise[]> { } } +async function fetchAiGatewayModels(): Promise[]> { + try { + console.log("Fetching models from Vercel AI Gateway API..."); + const response = await fetch(`${AI_GATEWAY_BASE_URL}/models`); + const data = await response.json(); + const models: Model[] = []; + + const toNumber = (value: string | number | undefined): number => { + if (typeof value === "number") { + return Number.isFinite(value) ? value : 0; + } + const parsed = parseFloat(value ?? "0"); + return Number.isFinite(parsed) ? parsed : 0; + }; + + const items = Array.isArray(data.data) ? (data.data as AiGatewayModel[]) : []; + for (const model of items) { + const tags = Array.isArray(model.tags) ? model.tags : []; + // Only include models that support tools + if (!tags.includes("tool-use")) continue; + + const input: ("text" | "image")[] = ["text"]; + if (tags.includes("vision")) { + input.push("image"); + } + + const inputCost = toNumber(model.pricing?.input) * 1_000_000; + const outputCost = toNumber(model.pricing?.output) * 1_000_000; + const cacheReadCost = toNumber(model.pricing?.input_cache_read) * 1_000_000; + const cacheWriteCost = toNumber(model.pricing?.input_cache_write) * 1_000_000; + + models.push({ + id: model.id, + name: model.name || model.id, + api: "openai-completions", + baseUrl: AI_GATEWAY_BASE_URL, + provider: "ai-gateway", + reasoning: tags.includes("reasoning"), + input, + cost: { + input: inputCost, + output: outputCost, + cacheRead: cacheReadCost, + cacheWrite: cacheWriteCost, + }, + contextWindow: model.context_window || 4096, + maxTokens: model.max_tokens || 4096, + }); + } + + console.log(`Fetched ${models.length} tool-capable models from Vercel AI Gateway`); + return models; + } catch (error) { + console.error("Failed to fetch Vercel AI Gateway models:", error); + return []; + } +} + async function loadModelsDevData(): Promise[]> { try { console.log("Fetching models from models.dev API..."); @@ -529,11 +603,13 @@ async function generateModels() { // Fetch models from both sources // models.dev: Anthropic, Google, OpenAI, Groq, Cerebras // OpenRouter: xAI and other providers (excluding Anthropic, Google, OpenAI) + // AI Gateway: OpenAI-compatible catalog with tool-capable models const modelsDevModels = await loadModelsDevData(); const openRouterModels = await fetchOpenRouterModels(); + const aiGatewayModels = await fetchAiGatewayModels(); // Combine models (models.dev has priority) - const allModels = [...modelsDevModels, ...openRouterModels]; + const allModels = [...modelsDevModels, ...openRouterModels, ...aiGatewayModels]; // Fix incorrect cache pricing for Claude Opus 4.5 from models.dev // models.dev has 3x the correct pricing (1.5/18.75 instead of 0.5/6.25) diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 27a585d9..490c1d38 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -4,6 +4,2116 @@ import type { Model } from "./types.js"; export const MODELS = { + "ai-gateway": { + "alibaba/qwen-3-14b": { + id: "alibaba/qwen-3-14b", + name: "Qwen3-14B", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.06, + output: 0.24, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "alibaba/qwen-3-235b": { + id: "alibaba/qwen-3-235b", + name: "Qwen3 235B A22b Instruct 2507", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.13, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "alibaba/qwen-3-30b": { + id: "alibaba/qwen-3-30b", + name: "Qwen3-30B-A3B", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.08, + output: 0.29, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "alibaba/qwen-3-32b": { + id: "alibaba/qwen-3-32b", + name: "Qwen 3.32B", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-235b-a22b-thinking": { + id: "alibaba/qwen3-235b-a22b-thinking", + name: "Qwen3 235B A22B Thinking 2507", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.9000000000000004, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-coder": { + id: "alibaba/qwen3-coder", + name: "Qwen3 Coder 480B A35B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.38, + output: 1.53, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 66536, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-coder-30b-a3b": { + id: "alibaba/qwen3-coder-30b-a3b", + name: "Qwen 3 Coder 30B A3B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.07, + output: 0.27, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 160000, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-coder-plus": { + id: "alibaba/qwen3-coder-plus", + name: "Qwen3 Coder Plus", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-max": { + id: "alibaba/qwen3-max", + name: "Qwen3 Max", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1.2, + output: 6, + cacheRead: 0.24, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "alibaba/qwen3-max-preview": { + id: "alibaba/qwen3-max-preview", + name: "Qwen3 Max Preview", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1.2, + output: 6, + cacheRead: 0.24, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "anthropic/claude-3-haiku": { + id: "anthropic/claude-3-haiku", + name: "Claude 3 Haiku", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.25, + output: 1.25, + cacheRead: 0.03, + cacheWrite: 0.3, + }, + contextWindow: 200000, + maxTokens: 4096, + } satisfies Model<"openai-completions">, + "anthropic/claude-3-opus": { + id: "anthropic/claude-3-opus", + name: "Claude 3 Opus", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "anthropic/claude-3.5-haiku": { + id: "anthropic/claude-3.5-haiku", + name: "Claude 3.5 Haiku", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.7999999999999999, + output: 4, + cacheRead: 0.08, + cacheWrite: 1, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "anthropic/claude-3.5-sonnet": { + id: "anthropic/claude-3.5-sonnet", + name: "Claude 3.5 Sonnet", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "anthropic/claude-3.5-sonnet-20240620": { + id: "anthropic/claude-3.5-sonnet-20240620", + name: "Claude 3.5 Sonnet (2024-06-20)", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "anthropic/claude-3.7-sonnet": { + id: "anthropic/claude-3.7-sonnet", + name: "Claude 3.7 Sonnet", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "anthropic/claude-haiku-4.5": { + id: "anthropic/claude-haiku-4.5", + name: "Claude Haiku 4.5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 5, + cacheRead: 0.09999999999999999, + cacheWrite: 1.25, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4": { + id: "anthropic/claude-opus-4", + name: "Claude Opus 4", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.1": { + id: "anthropic/claude-opus-4.1", + name: "Claude Opus 4.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.5": { + id: "anthropic/claude-opus-4.5", + name: "Claude Opus 4.5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-4": { + id: "anthropic/claude-sonnet-4", + name: "Claude Sonnet 4", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-4.5": { + id: "anthropic/claude-sonnet-4.5", + name: "Claude Sonnet 4.5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "bytedance/seed-1.6": { + id: "bytedance/seed-1.6", + name: "Seed 1.6", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 32000, + } satisfies Model<"openai-completions">, + "cohere/command-a": { + id: "cohere/command-a", + name: "Command A", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 8000, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v3": { + id: "deepseek/deepseek-v3", + name: "DeepSeek V3 0324", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.77, + output: 0.77, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v3.1": { + id: "deepseek/deepseek-v3.1", + name: "DeepSeek-V3.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v3.1-terminus": { + id: "deepseek/deepseek-v3.1-terminus", + name: "DeepSeek V3.1 Terminus", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v3.2-exp": { + id: "deepseek/deepseek-v3.2-exp", + name: "DeepSeek V3.2 Exp", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 163840, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v3.2-thinking": { + id: "deepseek/deepseek-v3.2-thinking", + name: "DeepSeek V3.2 Thinking", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.28, + output: 0.42, + cacheRead: 0.028, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "google/gemini-2.0-flash": { + id: "google/gemini-2.0-flash", + name: "Gemini 2.0 Flash", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "google/gemini-2.0-flash-lite": { + id: "google/gemini-2.0-flash-lite", + name: "Gemini 2.0 Flash Lite", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash": { + id: "google/gemini-2.5-flash", + name: "Gemini 2.5 Flash", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash-lite": { + id: "google/gemini-2.5-flash-lite", + name: "Gemini 2.5 Flash Lite", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash-lite-preview-09-2025": { + id: "google/gemini-2.5-flash-lite-preview-09-2025", + name: "Gemini 2.5 Flash Lite Preview 09-2025", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash-preview-09-2025": { + id: "google/gemini-2.5-flash-preview-09-2025", + name: "Gemini 2.5 Flash Preview 09-2025", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-pro": { + id: "google/gemini-2.5-pro", + name: "Gemini 2.5 Pro", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3-flash": { + id: "google/gemini-3-flash", + name: "Gemini 3 Flash", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 3, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "google/gemini-3-pro-preview": { + id: "google/gemini-3-pro-preview", + name: "Gemini 3 Pro Preview", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 12, + cacheRead: 0.19999999999999998, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "inception/mercury-coder-small": { + id: "inception/mercury-coder-small", + name: "Mercury Coder Small Beta", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "meituan/longcat-flash-chat": { + id: "meituan/longcat-flash-chat", + name: "LongCat Flash Chat", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meituan/longcat-flash-thinking": { + id: "meituan/longcat-flash-thinking", + name: "LongCat Flash Thinking", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.15, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meta/llama-3.1-70b": { + id: "meta/llama-3.1-70b", + name: "Llama 3.1 70B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "meta/llama-3.1-8b": { + id: "meta/llama-3.1-8b", + name: "Llama 3.1 8B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.049999999999999996, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "meta/llama-3.2-11b": { + id: "meta/llama-3.2-11b", + name: "Llama 3.2 11B Vision Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.16, + output: 0.16, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meta/llama-3.2-90b": { + id: "meta/llama-3.2-90b", + name: "Llama 3.2 90B Vision Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.72, + output: 0.72, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meta/llama-3.3-70b": { + id: "meta/llama-3.3-70b", + name: "Llama 3.3 70B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.72, + output: 0.72, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meta/llama-4-maverick": { + id: "meta/llama-4-maverick", + name: "Llama 4 Maverick 17B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "meta/llama-4-scout": { + id: "meta/llama-4-scout", + name: "Llama 4 Scout 17B Instruct", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.08, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "minimax/minimax-m2": { + id: "minimax/minimax-m2", + name: "MiniMax M2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 1.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"openai-completions">, + "minimax/minimax-m2.1": { + id: "minimax/minimax-m2.1", + name: "MiniMax M2.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.28, + output: 1.2, + cacheRead: 0.14, + cacheWrite: 0, + }, + contextWindow: 196608, + maxTokens: 196608, + } satisfies Model<"openai-completions">, + "minimax/minimax-m2.1-lightning": { + id: "minimax/minimax-m2.1-lightning", + name: "MiniMax M2.1 Lightning", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 2.4, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "mistral/codestral": { + id: "mistral/codestral", + name: "Mistral Codestral", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "mistral/devstral-2": { + id: "mistral/devstral-2", + name: "Devstral 2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "mistral/devstral-small": { + id: "mistral/devstral-small", + name: "Devstral Small 1.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "mistral/devstral-small-2": { + id: "mistral/devstral-small-2", + name: "Devstral Small 2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "mistral/ministral-3b": { + id: "mistral/ministral-3b", + name: "Ministral 3B", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.04, + output: 0.04, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "mistral/ministral-8b": { + id: "mistral/ministral-8b", + name: "Ministral 8B", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "mistral/mistral-medium": { + id: "mistral/mistral-medium", + name: "Mistral Medium 3.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "mistral/mistral-nemo": { + id: "mistral/mistral-nemo", + name: "Mistral Nemo", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.04, + output: 0.16999999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 60288, + maxTokens: 16000, + } satisfies Model<"openai-completions">, + "mistral/mistral-small": { + id: "mistral/mistral-small", + name: "Mistral Small", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "mistral/pixtral-12b": { + id: "mistral/pixtral-12b", + name: "Pixtral 12B 2409", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "mistral/pixtral-large": { + id: "mistral/pixtral-large", + name: "Pixtral Large", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, + "moonshotai/kimi-k2": { + id: "moonshotai/kimi-k2", + name: "Kimi K2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "moonshotai/kimi-k2-thinking": { + id: "moonshotai/kimi-k2-thinking", + name: "Kimi K2 Thinking", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.47, + output: 2, + cacheRead: 0.14100000000000001, + cacheWrite: 0, + }, + contextWindow: 216144, + maxTokens: 216144, + } satisfies Model<"openai-completions">, + "moonshotai/kimi-k2-thinking-turbo": { + id: "moonshotai/kimi-k2-thinking-turbo", + name: "Kimi K2 Thinking Turbo", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 1.15, + output: 8, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"openai-completions">, + "moonshotai/kimi-k2-turbo": { + id: "moonshotai/kimi-k2-turbo", + name: "Kimi K2 Turbo", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.4, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "nvidia/nemotron-nano-12b-v2-vl": { + id: "nvidia/nemotron-nano-12b-v2-vl", + name: "Nvidia Nemotron Nano 12B V2 VL", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "nvidia/nemotron-nano-9b-v2": { + id: "nvidia/nemotron-nano-9b-v2", + name: "Nvidia Nemotron Nano 9B V2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.04, + output: 0.16, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "openai/codex-mini": { + id: "openai/codex-mini", + name: "Codex Mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 6, + cacheRead: 0.375, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/gpt-4-turbo": { + id: "openai/gpt-4-turbo", + name: "GPT-4 Turbo", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model<"openai-completions">, + "openai/gpt-4.1": { + id: "openai/gpt-4.1", + name: "GPT-4.1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "openai/gpt-4.1-mini": { + id: "openai/gpt-4.1-mini", + name: "GPT-4.1 mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 1.5999999999999999, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "openai/gpt-4.1-nano": { + id: "openai/gpt-4.1-nano", + name: "GPT-4.1 nano", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "openai/gpt-4o": { + id: "openai/gpt-4o", + name: "GPT-4o", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2.5, + output: 10, + cacheRead: 1.25, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-4o-mini": { + id: "openai/gpt-4o-mini", + name: "GPT-4o mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-5": { + id: "openai/gpt-5", + name: "GPT-5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5-chat": { + id: "openai/gpt-5-chat", + name: "GPT-5 Chat", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-5-codex": { + id: "openai/gpt-5-codex", + name: "GPT-5-Codex", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5-mini": { + id: "openai/gpt-5-mini", + name: "GPT-5 mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5-nano": { + id: "openai/gpt-5-nano", + name: "GPT-5 nano", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5-pro": { + id: "openai/gpt-5-pro", + name: "GPT-5 pro", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 120, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 272000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.1-codex": { + id: "openai/gpt-5.1-codex", + name: "GPT-5.1-Codex", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.1-codex-max": { + id: "openai/gpt-5.1-codex-max", + name: "GPT 5.1 Codex Max", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.1-codex-mini": { + id: "openai/gpt-5.1-codex-mini", + name: "GPT-5.1 Codex mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.1-instant": { + id: "openai/gpt-5.1-instant", + name: "GPT-5.1 Instant", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-5.1-thinking": { + id: "openai/gpt-5.1-thinking", + name: "GPT 5.1 Thinking", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.2": { + id: "openai/gpt-5.2", + name: "GPT-5.2", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.75, + output: 14, + cacheRead: 0.175, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.2-chat": { + id: "openai/gpt-5.2-chat", + name: "GPT-5.2 Chat", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.75, + output: 14, + cacheRead: 0.175, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-5.2-pro": { + id: "openai/gpt-5.2-pro", + name: "GPT 5.2 ", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 21, + output: 168, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-oss-120b": { + id: "openai/gpt-oss-120b", + name: "gpt-oss-120b", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "openai/gpt-oss-20b": { + id: "openai/gpt-oss-20b", + name: "gpt-oss-20b", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.07, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "openai/gpt-oss-safeguard-20b": { + id: "openai/gpt-oss-safeguard-20b", + name: "gpt-oss-safeguard-20b", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0.037, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "openai/o1": { + id: "openai/o1", + name: "o1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 60, + cacheRead: 7.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3": { + id: "openai/o3", + name: "o3", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-deep-research": { + id: "openai/o3-deep-research", + name: "o3-deep-research", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 10, + output: 40, + cacheRead: 2.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-mini": { + id: "openai/o3-mini", + name: "o3-mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-pro": { + id: "openai/o3-pro", + name: "o3 Pro", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 20, + output: 80, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o4-mini": { + id: "openai/o4-mini", + name: "o4-mini", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "perplexity/sonar": { + id: "perplexity/sonar", + name: "Sonar", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 127000, + maxTokens: 8000, + } satisfies Model<"openai-completions">, + "perplexity/sonar-pro": { + id: "perplexity/sonar-pro", + name: "Sonar Pro", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8000, + } satisfies Model<"openai-completions">, + "prime-intellect/intellect-3": { + id: "prime-intellect/intellect-3", + name: "INTELLECT 3", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "stealth/sonoma-dusk-alpha": { + id: "stealth/sonoma-dusk-alpha", + name: "Sonoma Dusk Alpha", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "stealth/sonoma-sky-alpha": { + id: "stealth/sonoma-sky-alpha", + name: "Sonoma Sky Alpha", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "vercel/v0-1.0-md": { + id: "vercel/v0-1.0-md", + name: "v0-1.0-md", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 32000, + } satisfies Model<"openai-completions">, + "vercel/v0-1.5-md": { + id: "vercel/v0-1.5-md", + name: "v0-1.5-md", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "xai/grok-2-vision": { + id: "xai/grok-2-vision", + name: "Grok 2 Vision", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "xai/grok-3": { + id: "xai/grok-3", + name: "Grok 3 Beta", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "xai/grok-3-fast": { + id: "xai/grok-3-fast", + name: "Grok 3 Fast Beta", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 5, + output: 25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "xai/grok-3-mini": { + id: "xai/grok-3-mini", + name: "Grok 3 Mini Beta", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "xai/grok-3-mini-fast": { + id: "xai/grok-3-mini-fast", + name: "Grok 3 Mini Fast Beta", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.6, + output: 4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "xai/grok-4": { + id: "xai/grok-4", + name: "Grok 4", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "xai/grok-4-fast-non-reasoning": { + id: "xai/grok-4-fast-non-reasoning", + name: "Grok 4 Fast Non-Reasoning", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "xai/grok-4-fast-reasoning": { + id: "xai/grok-4-fast-reasoning", + name: "Grok 4 Fast Reasoning", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "xai/grok-4.1-fast-non-reasoning": { + id: "xai/grok-4.1-fast-non-reasoning", + name: "Grok 4.1 Fast Non-Reasoning", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 30000, + } satisfies Model<"openai-completions">, + "xai/grok-4.1-fast-reasoning": { + id: "xai/grok-4.1-fast-reasoning", + name: "Grok 4.1 Fast Reasoning", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 30000, + } satisfies Model<"openai-completions">, + "xai/grok-code-fast-1": { + id: "xai/grok-code-fast-1", + name: "Grok Code Fast 1", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.5, + cacheRead: 0.02, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"openai-completions">, + "xiaomi/mimo-v2-flash": { + id: "xiaomi/mimo-v2-flash", + name: "MiMo V2 Flash", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.098, + output: 0.293, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32000, + } satisfies Model<"openai-completions">, + "zai/glm-4.5": { + id: "zai/glm-4.5", + name: "GLM-4.5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.6, + output: 2.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "zai/glm-4.5-air": { + id: "zai/glm-4.5-air", + name: "GLM 4.5 Air", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 96000, + } satisfies Model<"openai-completions">, + "zai/glm-4.5v": { + id: "zai/glm-4.5v", + name: "GLM 4.5V", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.6, + output: 1.7999999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxTokens: 66000, + } satisfies Model<"openai-completions">, + "zai/glm-4.6": { + id: "zai/glm-4.6", + name: "GLM 4.6", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.44999999999999996, + output: 1.7999999999999998, + cacheRead: 0.11, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 96000, + } satisfies Model<"openai-completions">, + "zai/glm-4.6v": { + id: "zai/glm-4.6v", + name: "GLM-4.6V", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 24000, + } satisfies Model<"openai-completions">, + "zai/glm-4.6v-flash": { + id: "zai/glm-4.6v-flash", + name: "GLM-4.6V-Flash", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 24000, + } satisfies Model<"openai-completions">, + "zai/glm-4.7": { + id: "zai/glm-4.7", + name: "GLM 4.7", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.43, + output: 1.75, + cacheRead: 0.08, + cacheWrite: 0, + }, + contextWindow: 202752, + maxTokens: 120000, + } satisfies Model<"openai-completions">, + }, "amazon-bedrock": { "anthropic.claude-3-5-haiku-20241022-v1:0": { id: "anthropic.claude-3-5-haiku-20241022-v1:0", diff --git a/packages/ai/src/stream.ts b/packages/ai/src/stream.ts index f7cd936a..b27846f4 100644 --- a/packages/ai/src/stream.ts +++ b/packages/ai/src/stream.ts @@ -96,6 +96,7 @@ export function getEnvApiKey(provider: any): string | undefined { cerebras: "CEREBRAS_API_KEY", xai: "XAI_API_KEY", openrouter: "OPENROUTER_API_KEY", + "ai-gateway": "AI_GATEWAY_API_KEY", zai: "ZAI_API_KEY", mistral: "MISTRAL_API_KEY", minimax: "MINIMAX_API_KEY", diff --git a/packages/ai/src/types.ts b/packages/ai/src/types.ts index ef245f23..e8632322 100644 --- a/packages/ai/src/types.ts +++ b/packages/ai/src/types.ts @@ -56,6 +56,7 @@ export type KnownProvider = | "groq" | "cerebras" | "openrouter" + | "ai-gateway" | "zai" | "mistral" | "minimax" diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index deca07eb..5aa98e1e 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -598,6 +598,25 @@ describe("Generate E2E Tests", () => { }); }); + describe.skipIf(!process.env.AI_GATEWAY_API_KEY)( + "Vercel AI Gateway Provider (google/gemini-2.5-flash via OpenAI Completions)", + () => { + const llm = getModel("ai-gateway", "google/gemini-2.5-flash"); + + it("should complete basic text generation", { retry: 3 }, async () => { + await basicTextGeneration(llm); + }); + + it("should handle tool calling", { retry: 3 }, async () => { + await handleToolCall(llm); + }); + + it("should handle streaming", { retry: 3 }, async () => { + await handleStreaming(llm); + }); + }, + ); + describe.skipIf(!process.env.ZAI_API_KEY)("zAI Provider (glm-4.5-air via OpenAI Completions)", () => { const llm = getModel("zai", "glm-4.5-air"); diff --git a/packages/coding-agent/README.md b/packages/coding-agent/README.md index 7ca93488..c4ae5d92 100644 --- a/packages/coding-agent/README.md +++ b/packages/coding-agent/README.md @@ -166,6 +166,7 @@ Add API keys to `~/.pi/agent/auth.json`: | Cerebras | `cerebras` | `CEREBRAS_API_KEY` | | xAI | `xai` | `XAI_API_KEY` | | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` | +| Vercel AI Gateway | `ai-gateway` | `AI_GATEWAY_API_KEY` | | ZAI | `zai` | `ZAI_API_KEY` | | MiniMax | `minimax` | `MINIMAX_API_KEY` | @@ -1143,7 +1144,7 @@ pi [options] [@files...] [messages...] | Option | Description | |--------|-------------| -| `--provider ` | Provider: `anthropic`, `openai`, `openai-codex`, `google`, `google-vertex`, `amazon-bedrock`, `mistral`, `xai`, `groq`, `cerebras`, `openrouter`, `zai`, `minimax`, `github-copilot`, `google-gemini-cli`, `google-antigravity`, or custom | +| `--provider ` | Provider: `anthropic`, `openai`, `openai-codex`, `google`, `google-vertex`, `amazon-bedrock`, `mistral`, `xai`, `groq`, `cerebras`, `openrouter`, `ai-gateway`, `zai`, `minimax`, `github-copilot`, `google-gemini-cli`, `google-antigravity`, or custom | | `--model ` | Model ID | | `--api-key ` | API key (overrides environment) | | `--system-prompt ` | Custom system prompt (text or file path) | diff --git a/packages/coding-agent/src/cli/args.ts b/packages/coding-agent/src/cli/args.ts index e4442d5e..4c7349ed 100644 --- a/packages/coding-agent/src/cli/args.ts +++ b/packages/coding-agent/src/cli/args.ts @@ -242,6 +242,7 @@ ${chalk.bold("Environment Variables:")} CEREBRAS_API_KEY - Cerebras API key XAI_API_KEY - xAI Grok API key OPENROUTER_API_KEY - OpenRouter API key + AI_GATEWAY_API_KEY - Vercel AI Gateway API key ZAI_API_KEY - ZAI API key MISTRAL_API_KEY - Mistral API key MINIMAX_API_KEY - MiniMax API key diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index 017ea576..d12236e1 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -21,6 +21,7 @@ export const defaultModelPerProvider: Record = { "google-vertex": "gemini-3-pro-preview", "github-copilot": "gpt-4o", openrouter: "openai/gpt-5.1-codex", + "ai-gateway": "anthropic/claude-opus-4.5", xai: "grok-4-fast-non-reasoning", groq: "openai/gpt-oss-120b", cerebras: "zai-glm-4.6", diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index fdef4160..2261236d 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -1,6 +1,6 @@ import type { Model } from "@mariozechner/pi-ai"; import { describe, expect, test } from "vitest"; -import { parseModelPattern } from "../src/core/model-resolver.js"; +import { defaultModelPerProvider, findInitialModel, parseModelPattern } from "../src/core/model-resolver.js"; // Mock models for testing const mockModels: Model<"anthropic-messages">[] = [ @@ -200,3 +200,37 @@ describe("parseModelPattern", () => { }); }); }); + +describe("default model selection", () => { + test("ai-gateway default is opus 4.5", () => { + expect(defaultModelPerProvider["ai-gateway"]).toBe("anthropic/claude-opus-4.5"); + }); + + test("findInitialModel selects ai-gateway default when available", async () => { + const aiGatewayModel: Model<"openai-completions"> = { + id: "anthropic/claude-opus-4.5", + name: "Claude Opus 4.5", + api: "openai-completions", + provider: "ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh/v1", + reasoning: true, + input: ["text", "image"], + cost: { input: 5, output: 15, cacheRead: 0.5, cacheWrite: 5 }, + contextWindow: 200000, + maxTokens: 8192, + }; + + const registry = { + getAvailable: async () => [aiGatewayModel], + } as unknown as Parameters[0]["modelRegistry"]; + + const result = await findInitialModel({ + scopedModels: [], + isContinuing: false, + modelRegistry: registry, + }); + + expect(result.model?.provider).toBe("ai-gateway"); + expect(result.model?.id).toBe("anthropic/claude-opus-4.5"); + }); +}); diff --git a/packages/web-ui/src/components/ProviderKeyInput.ts b/packages/web-ui/src/components/ProviderKeyInput.ts index 23a820be..7cddb185 100644 --- a/packages/web-ui/src/components/ProviderKeyInput.ts +++ b/packages/web-ui/src/components/ProviderKeyInput.ts @@ -15,6 +15,7 @@ const TEST_MODELS: Record = { google: "gemini-2.5-flash", groq: "openai/gpt-oss-20b", openrouter: "z-ai/glm-4.6", + "ai-gateway": "anthropic/claude-opus-4.5", cerebras: "gpt-oss-120b", xai: "grok-4-fast-non-reasoning", zai: "glm-4.5-air", From 9860ee86f3f56dd14328e12c389f2cd2374976d0 Mon Sep 17 00:00:00 2001 From: Timo Lins Date: Tue, 13 Jan 2026 15:20:35 +0100 Subject: [PATCH 2/4] Change to Anthropic compatible API It seemed as if the OpenAI message spec tried to send non-compliant messages with { text: "" } instead of { contet: "" }, which the AI Gateway did not accept. --- packages/ai/scripts/generate-models.ts | 7 +- packages/ai/src/models.generated.ts | 748 ++++++++++++------------- 2 files changed, 378 insertions(+), 377 deletions(-) diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index 05396fdb..ce5c2cf1 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -53,7 +53,8 @@ const COPILOT_STATIC_HEADERS = { "Copilot-Integration-Id": "vscode-chat", } as const; -const AI_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh/v1"; +const AI_GATEWAY_MODELS_URL = "https://ai-gateway.vercel.sh/v1"; +const AI_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh"; async function fetchOpenRouterModels(): Promise[]> { try { @@ -116,7 +117,7 @@ async function fetchOpenRouterModels(): Promise[]> { async function fetchAiGatewayModels(): Promise[]> { try { console.log("Fetching models from Vercel AI Gateway API..."); - const response = await fetch(`${AI_GATEWAY_BASE_URL}/models`); + const response = await fetch(`${AI_GATEWAY_MODELS_URL}/models`); const data = await response.json(); const models: Model[] = []; @@ -147,7 +148,7 @@ async function fetchAiGatewayModels(): Promise[]> { models.push({ id: model.id, name: model.name || model.id, - api: "openai-completions", + api: "anthropic-messages", baseUrl: AI_GATEWAY_BASE_URL, provider: "ai-gateway", reasoning: tags.includes("reasoning"), diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 490c1d38..d8730f6e 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -8,9 +8,9 @@ export const MODELS = { "alibaba/qwen-3-14b": { id: "alibaba/qwen-3-14b", name: "Qwen3-14B", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -21,30 +21,30 @@ export const MODELS = { }, contextWindow: 40960, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen-3-235b": { id: "alibaba/qwen-3-235b", name: "Qwen3 235B A22b Instruct 2507", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { - input: 0.13, - output: 0.6, + input: 0.071, + output: 0.463, cacheRead: 0, cacheWrite: 0, }, contextWindow: 40960, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen-3-30b": { id: "alibaba/qwen-3-30b", name: "Qwen3-30B-A3B", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -55,13 +55,13 @@ export const MODELS = { }, contextWindow: 40960, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen-3-32b": { id: "alibaba/qwen-3-32b", name: "Qwen 3.32B", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -72,13 +72,13 @@ export const MODELS = { }, contextWindow: 40960, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-235b-a22b-thinking": { id: "alibaba/qwen3-235b-a22b-thinking", name: "Qwen3 235B A22B Thinking 2507", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -89,13 +89,13 @@ export const MODELS = { }, contextWindow: 262114, maxTokens: 262114, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-coder": { id: "alibaba/qwen3-coder", name: "Qwen3 Coder 480B A35B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -106,13 +106,13 @@ export const MODELS = { }, contextWindow: 262144, maxTokens: 66536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-coder-30b-a3b": { id: "alibaba/qwen3-coder-30b-a3b", name: "Qwen 3 Coder 30B A3B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -123,13 +123,13 @@ export const MODELS = { }, contextWindow: 160000, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-coder-plus": { id: "alibaba/qwen3-coder-plus", name: "Qwen3 Coder Plus", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -140,13 +140,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-max": { id: "alibaba/qwen3-max", name: "Qwen3 Max", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -157,13 +157,13 @@ export const MODELS = { }, contextWindow: 262144, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3-max-preview": { id: "alibaba/qwen3-max-preview", name: "Qwen3 Max Preview", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -174,13 +174,13 @@ export const MODELS = { }, contextWindow: 262144, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3-haiku": { id: "anthropic/claude-3-haiku", name: "Claude 3 Haiku", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -191,13 +191,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 4096, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3-opus": { id: "anthropic/claude-3-opus", name: "Claude 3 Opus", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -208,13 +208,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3.5-haiku": { id: "anthropic/claude-3.5-haiku", name: "Claude 3.5 Haiku", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -225,13 +225,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3.5-sonnet": { id: "anthropic/claude-3.5-sonnet", name: "Claude 3.5 Sonnet", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -242,13 +242,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3.5-sonnet-20240620": { id: "anthropic/claude-3.5-sonnet-20240620", name: "Claude 3.5 Sonnet (2024-06-20)", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -259,13 +259,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-3.7-sonnet": { id: "anthropic/claude-3.7-sonnet", name: "Claude 3.7 Sonnet", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -276,13 +276,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -293,13 +293,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-opus-4": { id: "anthropic/claude-opus-4", name: "Claude Opus 4", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -310,13 +310,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 32000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-opus-4.1": { id: "anthropic/claude-opus-4.1", name: "Claude Opus 4.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -327,13 +327,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 32000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -344,13 +344,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-sonnet-4": { id: "anthropic/claude-sonnet-4", name: "Claude Sonnet 4", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -361,13 +361,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "anthropic/claude-sonnet-4.5": { id: "anthropic/claude-sonnet-4.5", name: "Claude Sonnet 4.5", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -378,13 +378,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "bytedance/seed-1.6": { id: "bytedance/seed-1.6", name: "Seed 1.6", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -395,13 +395,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 32000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "cohere/command-a": { id: "cohere/command-a", name: "Command A", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -412,13 +412,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 8000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3": { id: "deepseek/deepseek-v3", name: "DeepSeek V3 0324", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -429,13 +429,13 @@ export const MODELS = { }, contextWindow: 163840, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3.1": { id: "deepseek/deepseek-v3.1", name: "DeepSeek-V3.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -446,13 +446,13 @@ export const MODELS = { }, contextWindow: 163840, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3.1-terminus": { id: "deepseek/deepseek-v3.1-terminus", name: "DeepSeek V3.1 Terminus", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -463,13 +463,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3.2-exp": { id: "deepseek/deepseek-v3.2-exp", name: "DeepSeek V3.2 Exp", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -480,13 +480,13 @@ export const MODELS = { }, contextWindow: 163840, maxTokens: 163840, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "deepseek/deepseek-v3.2-thinking": { id: "deepseek/deepseek-v3.2-thinking", name: "DeepSeek V3.2 Thinking", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -497,13 +497,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.0-flash": { id: "google/gemini-2.0-flash", name: "Gemini 2.0 Flash", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -514,13 +514,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.0-flash-lite": { id: "google/gemini-2.0-flash-lite", name: "Gemini 2.0 Flash Lite", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -531,13 +531,13 @@ export const MODELS = { }, contextWindow: 1048576, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.5-flash": { id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -548,13 +548,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.5-flash-lite": { id: "google/gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -565,13 +565,13 @@ export const MODELS = { }, contextWindow: 1048576, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.5-flash-lite-preview-09-2025": { id: "google/gemini-2.5-flash-lite-preview-09-2025", name: "Gemini 2.5 Flash Lite Preview 09-2025", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -582,13 +582,13 @@ export const MODELS = { }, contextWindow: 1048576, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.5-flash-preview-09-2025": { id: "google/gemini-2.5-flash-preview-09-2025", name: "Gemini 2.5 Flash Preview 09-2025", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -599,13 +599,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-2.5-pro": { id: "google/gemini-2.5-pro", name: "Gemini 2.5 Pro", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -616,13 +616,13 @@ export const MODELS = { }, contextWindow: 1048576, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-3-flash": { id: "google/gemini-3-flash", name: "Gemini 3 Flash", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -633,13 +633,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "google/gemini-3-pro-preview": { id: "google/gemini-3-pro-preview", name: "Gemini 3 Pro Preview", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -650,13 +650,13 @@ export const MODELS = { }, contextWindow: 1000000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "inception/mercury-coder-small": { id: "inception/mercury-coder-small", name: "Mercury Coder Small Beta", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -667,13 +667,13 @@ export const MODELS = { }, contextWindow: 32000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meituan/longcat-flash-chat": { id: "meituan/longcat-flash-chat", name: "LongCat Flash Chat", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -684,13 +684,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meituan/longcat-flash-thinking": { id: "meituan/longcat-flash-thinking", name: "LongCat Flash Thinking", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -701,13 +701,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-3.1-70b": { id: "meta/llama-3.1-70b", name: "Llama 3.1 70B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -718,13 +718,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-3.1-8b": { id: "meta/llama-3.1-8b", name: "Llama 3.1 8B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -735,13 +735,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-3.2-11b": { id: "meta/llama-3.2-11b", name: "Llama 3.2 11B Vision Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -752,13 +752,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-3.2-90b": { id: "meta/llama-3.2-90b", name: "Llama 3.2 90B Vision Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -769,13 +769,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-3.3-70b": { id: "meta/llama-3.3-70b", name: "Llama 3.3 70B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -786,13 +786,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-4-maverick": { id: "meta/llama-4-maverick", name: "Llama 4 Maverick 17B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -803,13 +803,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "meta/llama-4-scout": { id: "meta/llama-4-scout", name: "Llama 4 Scout 17B Instruct", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -820,13 +820,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax M2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -837,13 +837,13 @@ export const MODELS = { }, contextWindow: 262114, maxTokens: 262114, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "minimax/minimax-m2.1": { id: "minimax/minimax-m2.1", name: "MiniMax M2.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -854,13 +854,13 @@ export const MODELS = { }, contextWindow: 196608, maxTokens: 196608, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "minimax/minimax-m2.1-lightning": { id: "minimax/minimax-m2.1-lightning", name: "MiniMax M2.1 Lightning", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -871,13 +871,13 @@ export const MODELS = { }, contextWindow: 204800, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/codestral": { id: "mistral/codestral", name: "Mistral Codestral", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -888,13 +888,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/devstral-2": { id: "mistral/devstral-2", name: "Devstral 2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -905,13 +905,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/devstral-small": { id: "mistral/devstral-small", name: "Devstral Small 1.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -922,13 +922,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/devstral-small-2": { id: "mistral/devstral-small-2", name: "Devstral Small 2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -939,13 +939,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/ministral-3b": { id: "mistral/ministral-3b", name: "Ministral 3B", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -956,13 +956,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/ministral-8b": { id: "mistral/ministral-8b", name: "Ministral 8B", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -973,13 +973,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/mistral-medium": { id: "mistral/mistral-medium", name: "Mistral Medium 3.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -990,13 +990,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 64000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/mistral-nemo": { id: "mistral/mistral-nemo", name: "Mistral Nemo", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1007,13 +1007,13 @@ export const MODELS = { }, contextWindow: 60288, maxTokens: 16000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/mistral-small": { id: "mistral/mistral-small", name: "Mistral Small", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1024,13 +1024,13 @@ export const MODELS = { }, contextWindow: 32000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/pixtral-12b": { id: "mistral/pixtral-12b", name: "Pixtral 12B 2409", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1041,13 +1041,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "mistral/pixtral-large": { id: "mistral/pixtral-large", name: "Pixtral Large", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1058,13 +1058,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "moonshotai/kimi-k2": { id: "moonshotai/kimi-k2", name: "Kimi K2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1075,13 +1075,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "moonshotai/kimi-k2-thinking": { id: "moonshotai/kimi-k2-thinking", name: "Kimi K2 Thinking", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1092,13 +1092,13 @@ export const MODELS = { }, contextWindow: 216144, maxTokens: 216144, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "moonshotai/kimi-k2-thinking-turbo": { id: "moonshotai/kimi-k2-thinking-turbo", name: "Kimi K2 Thinking Turbo", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1109,13 +1109,13 @@ export const MODELS = { }, contextWindow: 262114, maxTokens: 262114, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "moonshotai/kimi-k2-turbo": { id: "moonshotai/kimi-k2-turbo", name: "Kimi K2 Turbo", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1126,13 +1126,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "nvidia/nemotron-nano-12b-v2-vl": { id: "nvidia/nemotron-nano-12b-v2-vl", name: "Nvidia Nemotron Nano 12B V2 VL", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1143,13 +1143,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "nvidia/nemotron-nano-9b-v2": { id: "nvidia/nemotron-nano-9b-v2", name: "Nvidia Nemotron Nano 9B V2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1160,13 +1160,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/codex-mini": { id: "openai/codex-mini", name: "Codex Mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1177,13 +1177,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4-turbo": { id: "openai/gpt-4-turbo", name: "GPT-4 Turbo", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1194,13 +1194,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 4096, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4.1": { id: "openai/gpt-4.1", name: "GPT-4.1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1211,13 +1211,13 @@ export const MODELS = { }, contextWindow: 1047576, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4.1-mini": { id: "openai/gpt-4.1-mini", name: "GPT-4.1 mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1228,13 +1228,13 @@ export const MODELS = { }, contextWindow: 1047576, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4.1-nano": { id: "openai/gpt-4.1-nano", name: "GPT-4.1 nano", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1245,13 +1245,13 @@ export const MODELS = { }, contextWindow: 1047576, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4o": { id: "openai/gpt-4o", name: "GPT-4o", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1262,13 +1262,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-4o-mini": { id: "openai/gpt-4o-mini", name: "GPT-4o mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1279,13 +1279,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5": { id: "openai/gpt-5", name: "GPT-5", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1296,13 +1296,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5-chat": { id: "openai/gpt-5-chat", name: "GPT-5 Chat", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1313,13 +1313,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5-codex": { id: "openai/gpt-5-codex", name: "GPT-5-Codex", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1330,13 +1330,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5-mini": { id: "openai/gpt-5-mini", name: "GPT-5 mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1347,13 +1347,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5-nano": { id: "openai/gpt-5-nano", name: "GPT-5 nano", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1364,13 +1364,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5-pro": { id: "openai/gpt-5-pro", name: "GPT-5 pro", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1381,13 +1381,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 272000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.1-codex": { id: "openai/gpt-5.1-codex", name: "GPT-5.1-Codex", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1398,13 +1398,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.1-codex-max": { id: "openai/gpt-5.1-codex-max", name: "GPT 5.1 Codex Max", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1415,13 +1415,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.1-codex-mini": { id: "openai/gpt-5.1-codex-mini", name: "GPT-5.1 Codex mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1432,13 +1432,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.1-instant": { id: "openai/gpt-5.1-instant", name: "GPT-5.1 Instant", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1449,13 +1449,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.1-thinking": { id: "openai/gpt-5.1-thinking", name: "GPT 5.1 Thinking", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1466,13 +1466,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.2": { id: "openai/gpt-5.2", name: "GPT-5.2", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1483,13 +1483,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.2-chat": { id: "openai/gpt-5.2-chat", name: "GPT-5.2 Chat", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1500,13 +1500,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 16384, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-5.2-pro": { id: "openai/gpt-5.2-pro", name: "GPT 5.2 ", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1517,13 +1517,13 @@ export const MODELS = { }, contextWindow: 400000, maxTokens: 128000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "gpt-oss-120b", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1534,13 +1534,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "gpt-oss-20b", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1551,13 +1551,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 8192, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "gpt-oss-safeguard-20b", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1568,13 +1568,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 65536, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o1": { id: "openai/o1", name: "o1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1585,13 +1585,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o3": { id: "openai/o3", name: "o3", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1602,13 +1602,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o3-deep-research": { id: "openai/o3-deep-research", name: "o3-deep-research", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1619,13 +1619,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o3-mini": { id: "openai/o3-mini", name: "o3-mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1636,13 +1636,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o3-pro": { id: "openai/o3-pro", name: "o3 Pro", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1653,13 +1653,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "openai/o4-mini": { id: "openai/o4-mini", name: "o4-mini", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1670,13 +1670,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 100000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "perplexity/sonar": { id: "perplexity/sonar", name: "Sonar", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1687,13 +1687,13 @@ export const MODELS = { }, contextWindow: 127000, maxTokens: 8000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "perplexity/sonar-pro": { id: "perplexity/sonar-pro", name: "Sonar Pro", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1704,13 +1704,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 8000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "prime-intellect/intellect-3": { id: "prime-intellect/intellect-3", name: "INTELLECT 3", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1721,13 +1721,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "stealth/sonoma-dusk-alpha": { id: "stealth/sonoma-dusk-alpha", name: "Sonoma Dusk Alpha", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1738,13 +1738,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "stealth/sonoma-sky-alpha": { id: "stealth/sonoma-sky-alpha", name: "Sonoma Sky Alpha", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1755,13 +1755,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "vercel/v0-1.0-md": { id: "vercel/v0-1.0-md", name: "v0-1.0-md", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1772,13 +1772,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 32000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "vercel/v0-1.5-md": { id: "vercel/v0-1.5-md", name: "v0-1.5-md", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1789,13 +1789,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-2-vision": { id: "xai/grok-2-vision", name: "Grok 2 Vision", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], cost: { @@ -1806,13 +1806,13 @@ export const MODELS = { }, contextWindow: 32768, maxTokens: 32768, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-3": { id: "xai/grok-3", name: "Grok 3 Beta", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1823,13 +1823,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-3-fast": { id: "xai/grok-3-fast", name: "Grok 3 Fast Beta", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1840,13 +1840,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-3-mini": { id: "xai/grok-3-mini", name: "Grok 3 Mini Beta", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1857,13 +1857,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-3-mini-fast": { id: "xai/grok-3-mini-fast", name: "Grok 3 Mini Fast Beta", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1874,13 +1874,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-4": { id: "xai/grok-4", name: "Grok 4", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -1891,13 +1891,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-4-fast-non-reasoning": { id: "xai/grok-4-fast-non-reasoning", name: "Grok 4 Fast Non-Reasoning", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1908,13 +1908,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-4-fast-reasoning": { id: "xai/grok-4-fast-reasoning", name: "Grok 4 Fast Reasoning", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1925,13 +1925,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-4.1-fast-non-reasoning": { id: "xai/grok-4.1-fast-non-reasoning", name: "Grok 4.1 Fast Non-Reasoning", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], cost: { @@ -1942,13 +1942,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 30000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-4.1-fast-reasoning": { id: "xai/grok-4.1-fast-reasoning", name: "Grok 4.1 Fast Reasoning", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1959,13 +1959,13 @@ export const MODELS = { }, contextWindow: 2000000, maxTokens: 30000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xai/grok-code-fast-1": { id: "xai/grok-code-fast-1", name: "Grok Code Fast 1", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1976,13 +1976,13 @@ export const MODELS = { }, contextWindow: 256000, maxTokens: 256000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "xiaomi/mimo-v2-flash": { id: "xiaomi/mimo-v2-flash", name: "MiMo V2 Flash", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -1993,13 +1993,13 @@ export const MODELS = { }, contextWindow: 262144, maxTokens: 32000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.5": { id: "zai/glm-4.5", name: "GLM-4.5", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -2010,13 +2010,13 @@ export const MODELS = { }, contextWindow: 131072, maxTokens: 131072, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.5-air": { id: "zai/glm-4.5-air", name: "GLM 4.5 Air", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -2027,13 +2027,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 96000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.5v": { id: "zai/glm-4.5v", name: "GLM 4.5V", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -2044,13 +2044,13 @@ export const MODELS = { }, contextWindow: 65536, maxTokens: 66000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.6": { id: "zai/glm-4.6", name: "GLM 4.6", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -2061,13 +2061,13 @@ export const MODELS = { }, contextWindow: 200000, maxTokens: 96000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.6v": { id: "zai/glm-4.6v", name: "GLM-4.6V", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -2078,13 +2078,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 24000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.6v-flash": { id: "zai/glm-4.6v-flash", name: "GLM-4.6V-Flash", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], cost: { @@ -2095,13 +2095,13 @@ export const MODELS = { }, contextWindow: 128000, maxTokens: 24000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, "zai/glm-4.7": { id: "zai/glm-4.7", name: "GLM 4.7", - api: "openai-completions", + api: "anthropic-messages", provider: "ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh/v1", + baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], cost: { @@ -2112,7 +2112,7 @@ export const MODELS = { }, contextWindow: 202752, maxTokens: 120000, - } satisfies Model<"openai-completions">, + } satisfies Model<"anthropic-messages">, }, "amazon-bedrock": { "anthropic.claude-3-5-haiku-20241022-v1:0": { From 65eb738c900dce17cdd2d5b6583d9a2f1adb51dc Mon Sep 17 00:00:00 2001 From: Timo Lins Date: Tue, 13 Jan 2026 15:22:34 +0100 Subject: [PATCH 3/4] Rename to `vercel-ai-gateway` for clarity --- packages/ai/scripts/generate-models.ts | 2 +- packages/ai/src/models.generated.ts | 250 +++++++++--------- packages/ai/src/stream.ts | 2 +- packages/ai/src/types.ts | 2 +- packages/ai/test/stream.test.ts | 2 +- packages/coding-agent/README.md | 4 +- .../coding-agent/src/core/model-resolver.ts | 2 +- .../coding-agent/test/model-resolver.test.ts | 6 +- .../web-ui/src/components/ProviderKeyInput.ts | 2 +- 9 files changed, 136 insertions(+), 136 deletions(-) diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index ce5c2cf1..7548ff17 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -150,7 +150,7 @@ async function fetchAiGatewayModels(): Promise[]> { name: model.name || model.id, api: "anthropic-messages", baseUrl: AI_GATEWAY_BASE_URL, - provider: "ai-gateway", + provider: "vercel-ai-gateway", reasoning: tags.includes("reasoning"), input, cost: { diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index d8730f6e..e3601c37 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -4,12 +4,12 @@ import type { Model } from "./types.js"; export const MODELS = { - "ai-gateway": { + "vercel-ai-gateway": { "alibaba/qwen-3-14b": { id: "alibaba/qwen-3-14b", name: "Qwen3-14B", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -26,7 +26,7 @@ export const MODELS = { id: "alibaba/qwen-3-235b", name: "Qwen3 235B A22b Instruct 2507", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -43,7 +43,7 @@ export const MODELS = { id: "alibaba/qwen-3-30b", name: "Qwen3-30B-A3B", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -60,7 +60,7 @@ export const MODELS = { id: "alibaba/qwen-3-32b", name: "Qwen 3.32B", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -77,7 +77,7 @@ export const MODELS = { id: "alibaba/qwen3-235b-a22b-thinking", name: "Qwen3 235B A22B Thinking 2507", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -94,7 +94,7 @@ export const MODELS = { id: "alibaba/qwen3-coder", name: "Qwen3 Coder 480B A35B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -111,7 +111,7 @@ export const MODELS = { id: "alibaba/qwen3-coder-30b-a3b", name: "Qwen 3 Coder 30B A3B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -128,7 +128,7 @@ export const MODELS = { id: "alibaba/qwen3-coder-plus", name: "Qwen3 Coder Plus", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -145,7 +145,7 @@ export const MODELS = { id: "alibaba/qwen3-max", name: "Qwen3 Max", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -162,7 +162,7 @@ export const MODELS = { id: "alibaba/qwen3-max-preview", name: "Qwen3 Max Preview", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -179,7 +179,7 @@ export const MODELS = { id: "anthropic/claude-3-haiku", name: "Claude 3 Haiku", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -196,7 +196,7 @@ export const MODELS = { id: "anthropic/claude-3-opus", name: "Claude 3 Opus", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -213,7 +213,7 @@ export const MODELS = { id: "anthropic/claude-3.5-haiku", name: "Claude 3.5 Haiku", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -230,7 +230,7 @@ export const MODELS = { id: "anthropic/claude-3.5-sonnet", name: "Claude 3.5 Sonnet", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -247,7 +247,7 @@ export const MODELS = { id: "anthropic/claude-3.5-sonnet-20240620", name: "Claude 3.5 Sonnet (2024-06-20)", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -264,7 +264,7 @@ export const MODELS = { id: "anthropic/claude-3.7-sonnet", name: "Claude 3.7 Sonnet", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -281,7 +281,7 @@ export const MODELS = { id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -298,7 +298,7 @@ export const MODELS = { id: "anthropic/claude-opus-4", name: "Claude Opus 4", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -315,7 +315,7 @@ export const MODELS = { id: "anthropic/claude-opus-4.1", name: "Claude Opus 4.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -332,7 +332,7 @@ export const MODELS = { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -349,7 +349,7 @@ export const MODELS = { id: "anthropic/claude-sonnet-4", name: "Claude Sonnet 4", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -366,7 +366,7 @@ export const MODELS = { id: "anthropic/claude-sonnet-4.5", name: "Claude Sonnet 4.5", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -383,7 +383,7 @@ export const MODELS = { id: "bytedance/seed-1.6", name: "Seed 1.6", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -400,7 +400,7 @@ export const MODELS = { id: "cohere/command-a", name: "Command A", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -417,7 +417,7 @@ export const MODELS = { id: "deepseek/deepseek-v3", name: "DeepSeek V3 0324", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -434,7 +434,7 @@ export const MODELS = { id: "deepseek/deepseek-v3.1", name: "DeepSeek-V3.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -451,7 +451,7 @@ export const MODELS = { id: "deepseek/deepseek-v3.1-terminus", name: "DeepSeek V3.1 Terminus", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -468,7 +468,7 @@ export const MODELS = { id: "deepseek/deepseek-v3.2-exp", name: "DeepSeek V3.2 Exp", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -485,7 +485,7 @@ export const MODELS = { id: "deepseek/deepseek-v3.2-thinking", name: "DeepSeek V3.2 Thinking", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -502,7 +502,7 @@ export const MODELS = { id: "google/gemini-2.0-flash", name: "Gemini 2.0 Flash", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -519,7 +519,7 @@ export const MODELS = { id: "google/gemini-2.0-flash-lite", name: "Gemini 2.0 Flash Lite", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -536,7 +536,7 @@ export const MODELS = { id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -553,7 +553,7 @@ export const MODELS = { id: "google/gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -570,7 +570,7 @@ export const MODELS = { id: "google/gemini-2.5-flash-lite-preview-09-2025", name: "Gemini 2.5 Flash Lite Preview 09-2025", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -587,7 +587,7 @@ export const MODELS = { id: "google/gemini-2.5-flash-preview-09-2025", name: "Gemini 2.5 Flash Preview 09-2025", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -604,7 +604,7 @@ export const MODELS = { id: "google/gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -621,7 +621,7 @@ export const MODELS = { id: "google/gemini-3-flash", name: "Gemini 3 Flash", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -638,7 +638,7 @@ export const MODELS = { id: "google/gemini-3-pro-preview", name: "Gemini 3 Pro Preview", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -655,7 +655,7 @@ export const MODELS = { id: "inception/mercury-coder-small", name: "Mercury Coder Small Beta", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -672,7 +672,7 @@ export const MODELS = { id: "meituan/longcat-flash-chat", name: "LongCat Flash Chat", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -689,7 +689,7 @@ export const MODELS = { id: "meituan/longcat-flash-thinking", name: "LongCat Flash Thinking", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -706,7 +706,7 @@ export const MODELS = { id: "meta/llama-3.1-70b", name: "Llama 3.1 70B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -723,7 +723,7 @@ export const MODELS = { id: "meta/llama-3.1-8b", name: "Llama 3.1 8B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -740,7 +740,7 @@ export const MODELS = { id: "meta/llama-3.2-11b", name: "Llama 3.2 11B Vision Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -757,7 +757,7 @@ export const MODELS = { id: "meta/llama-3.2-90b", name: "Llama 3.2 90B Vision Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -774,7 +774,7 @@ export const MODELS = { id: "meta/llama-3.3-70b", name: "Llama 3.3 70B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -791,7 +791,7 @@ export const MODELS = { id: "meta/llama-4-maverick", name: "Llama 4 Maverick 17B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -808,7 +808,7 @@ export const MODELS = { id: "meta/llama-4-scout", name: "Llama 4 Scout 17B Instruct", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -825,7 +825,7 @@ export const MODELS = { id: "minimax/minimax-m2", name: "MiniMax M2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -842,7 +842,7 @@ export const MODELS = { id: "minimax/minimax-m2.1", name: "MiniMax M2.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -859,7 +859,7 @@ export const MODELS = { id: "minimax/minimax-m2.1-lightning", name: "MiniMax M2.1 Lightning", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -876,7 +876,7 @@ export const MODELS = { id: "mistral/codestral", name: "Mistral Codestral", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -893,7 +893,7 @@ export const MODELS = { id: "mistral/devstral-2", name: "Devstral 2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -910,7 +910,7 @@ export const MODELS = { id: "mistral/devstral-small", name: "Devstral Small 1.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -927,7 +927,7 @@ export const MODELS = { id: "mistral/devstral-small-2", name: "Devstral Small 2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -944,7 +944,7 @@ export const MODELS = { id: "mistral/ministral-3b", name: "Ministral 3B", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -961,7 +961,7 @@ export const MODELS = { id: "mistral/ministral-8b", name: "Ministral 8B", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -978,7 +978,7 @@ export const MODELS = { id: "mistral/mistral-medium", name: "Mistral Medium 3.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -995,7 +995,7 @@ export const MODELS = { id: "mistral/mistral-nemo", name: "Mistral Nemo", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1012,7 +1012,7 @@ export const MODELS = { id: "mistral/mistral-small", name: "Mistral Small", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1029,7 +1029,7 @@ export const MODELS = { id: "mistral/pixtral-12b", name: "Pixtral 12B 2409", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1046,7 +1046,7 @@ export const MODELS = { id: "mistral/pixtral-large", name: "Pixtral Large", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1063,7 +1063,7 @@ export const MODELS = { id: "moonshotai/kimi-k2", name: "Kimi K2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1080,7 +1080,7 @@ export const MODELS = { id: "moonshotai/kimi-k2-thinking", name: "Kimi K2 Thinking", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1097,7 +1097,7 @@ export const MODELS = { id: "moonshotai/kimi-k2-thinking-turbo", name: "Kimi K2 Thinking Turbo", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1114,7 +1114,7 @@ export const MODELS = { id: "moonshotai/kimi-k2-turbo", name: "Kimi K2 Turbo", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1131,7 +1131,7 @@ export const MODELS = { id: "nvidia/nemotron-nano-12b-v2-vl", name: "Nvidia Nemotron Nano 12B V2 VL", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1148,7 +1148,7 @@ export const MODELS = { id: "nvidia/nemotron-nano-9b-v2", name: "Nvidia Nemotron Nano 9B V2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1165,7 +1165,7 @@ export const MODELS = { id: "openai/codex-mini", name: "Codex Mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1182,7 +1182,7 @@ export const MODELS = { id: "openai/gpt-4-turbo", name: "GPT-4 Turbo", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1199,7 +1199,7 @@ export const MODELS = { id: "openai/gpt-4.1", name: "GPT-4.1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1216,7 +1216,7 @@ export const MODELS = { id: "openai/gpt-4.1-mini", name: "GPT-4.1 mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1233,7 +1233,7 @@ export const MODELS = { id: "openai/gpt-4.1-nano", name: "GPT-4.1 nano", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1250,7 +1250,7 @@ export const MODELS = { id: "openai/gpt-4o", name: "GPT-4o", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1267,7 +1267,7 @@ export const MODELS = { id: "openai/gpt-4o-mini", name: "GPT-4o mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1284,7 +1284,7 @@ export const MODELS = { id: "openai/gpt-5", name: "GPT-5", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1301,7 +1301,7 @@ export const MODELS = { id: "openai/gpt-5-chat", name: "GPT-5 Chat", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1318,7 +1318,7 @@ export const MODELS = { id: "openai/gpt-5-codex", name: "GPT-5-Codex", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1335,7 +1335,7 @@ export const MODELS = { id: "openai/gpt-5-mini", name: "GPT-5 mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1352,7 +1352,7 @@ export const MODELS = { id: "openai/gpt-5-nano", name: "GPT-5 nano", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1369,7 +1369,7 @@ export const MODELS = { id: "openai/gpt-5-pro", name: "GPT-5 pro", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1386,7 +1386,7 @@ export const MODELS = { id: "openai/gpt-5.1-codex", name: "GPT-5.1-Codex", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1403,7 +1403,7 @@ export const MODELS = { id: "openai/gpt-5.1-codex-max", name: "GPT 5.1 Codex Max", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1420,7 +1420,7 @@ export const MODELS = { id: "openai/gpt-5.1-codex-mini", name: "GPT-5.1 Codex mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1437,7 +1437,7 @@ export const MODELS = { id: "openai/gpt-5.1-instant", name: "GPT-5.1 Instant", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1454,7 +1454,7 @@ export const MODELS = { id: "openai/gpt-5.1-thinking", name: "GPT 5.1 Thinking", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1471,7 +1471,7 @@ export const MODELS = { id: "openai/gpt-5.2", name: "GPT-5.2", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1488,7 +1488,7 @@ export const MODELS = { id: "openai/gpt-5.2-chat", name: "GPT-5.2 Chat", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1505,7 +1505,7 @@ export const MODELS = { id: "openai/gpt-5.2-pro", name: "GPT 5.2 ", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1522,7 +1522,7 @@ export const MODELS = { id: "openai/gpt-oss-120b", name: "gpt-oss-120b", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1539,7 +1539,7 @@ export const MODELS = { id: "openai/gpt-oss-20b", name: "gpt-oss-20b", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1556,7 +1556,7 @@ export const MODELS = { id: "openai/gpt-oss-safeguard-20b", name: "gpt-oss-safeguard-20b", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1573,7 +1573,7 @@ export const MODELS = { id: "openai/o1", name: "o1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1590,7 +1590,7 @@ export const MODELS = { id: "openai/o3", name: "o3", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1607,7 +1607,7 @@ export const MODELS = { id: "openai/o3-deep-research", name: "o3-deep-research", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1624,7 +1624,7 @@ export const MODELS = { id: "openai/o3-mini", name: "o3-mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1641,7 +1641,7 @@ export const MODELS = { id: "openai/o3-pro", name: "o3 Pro", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1658,7 +1658,7 @@ export const MODELS = { id: "openai/o4-mini", name: "o4-mini", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1675,7 +1675,7 @@ export const MODELS = { id: "perplexity/sonar", name: "Sonar", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1692,7 +1692,7 @@ export const MODELS = { id: "perplexity/sonar-pro", name: "Sonar Pro", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1709,7 +1709,7 @@ export const MODELS = { id: "prime-intellect/intellect-3", name: "INTELLECT 3", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1726,7 +1726,7 @@ export const MODELS = { id: "stealth/sonoma-dusk-alpha", name: "Sonoma Dusk Alpha", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1743,7 +1743,7 @@ export const MODELS = { id: "stealth/sonoma-sky-alpha", name: "Sonoma Sky Alpha", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1760,7 +1760,7 @@ export const MODELS = { id: "vercel/v0-1.0-md", name: "v0-1.0-md", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1777,7 +1777,7 @@ export const MODELS = { id: "vercel/v0-1.5-md", name: "v0-1.5-md", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1794,7 +1794,7 @@ export const MODELS = { id: "xai/grok-2-vision", name: "Grok 2 Vision", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text", "image"], @@ -1811,7 +1811,7 @@ export const MODELS = { id: "xai/grok-3", name: "Grok 3 Beta", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1828,7 +1828,7 @@ export const MODELS = { id: "xai/grok-3-fast", name: "Grok 3 Fast Beta", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1845,7 +1845,7 @@ export const MODELS = { id: "xai/grok-3-mini", name: "Grok 3 Mini Beta", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1862,7 +1862,7 @@ export const MODELS = { id: "xai/grok-3-mini-fast", name: "Grok 3 Mini Fast Beta", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1879,7 +1879,7 @@ export const MODELS = { id: "xai/grok-4", name: "Grok 4", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -1896,7 +1896,7 @@ export const MODELS = { id: "xai/grok-4-fast-non-reasoning", name: "Grok 4 Fast Non-Reasoning", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1913,7 +1913,7 @@ export const MODELS = { id: "xai/grok-4-fast-reasoning", name: "Grok 4 Fast Reasoning", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1930,7 +1930,7 @@ export const MODELS = { id: "xai/grok-4.1-fast-non-reasoning", name: "Grok 4.1 Fast Non-Reasoning", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, input: ["text"], @@ -1947,7 +1947,7 @@ export const MODELS = { id: "xai/grok-4.1-fast-reasoning", name: "Grok 4.1 Fast Reasoning", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1964,7 +1964,7 @@ export const MODELS = { id: "xai/grok-code-fast-1", name: "Grok Code Fast 1", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1981,7 +1981,7 @@ export const MODELS = { id: "xiaomi/mimo-v2-flash", name: "MiMo V2 Flash", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -1998,7 +1998,7 @@ export const MODELS = { id: "zai/glm-4.5", name: "GLM-4.5", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -2015,7 +2015,7 @@ export const MODELS = { id: "zai/glm-4.5-air", name: "GLM 4.5 Air", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -2032,7 +2032,7 @@ export const MODELS = { id: "zai/glm-4.5v", name: "GLM 4.5V", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -2049,7 +2049,7 @@ export const MODELS = { id: "zai/glm-4.6", name: "GLM 4.6", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], @@ -2066,7 +2066,7 @@ export const MODELS = { id: "zai/glm-4.6v", name: "GLM-4.6V", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -2083,7 +2083,7 @@ export const MODELS = { id: "zai/glm-4.6v-flash", name: "GLM-4.6V-Flash", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text", "image"], @@ -2100,7 +2100,7 @@ export const MODELS = { id: "zai/glm-4.7", name: "GLM 4.7", api: "anthropic-messages", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], diff --git a/packages/ai/src/stream.ts b/packages/ai/src/stream.ts index b27846f4..0c1cf08f 100644 --- a/packages/ai/src/stream.ts +++ b/packages/ai/src/stream.ts @@ -96,7 +96,7 @@ export function getEnvApiKey(provider: any): string | undefined { cerebras: "CEREBRAS_API_KEY", xai: "XAI_API_KEY", openrouter: "OPENROUTER_API_KEY", - "ai-gateway": "AI_GATEWAY_API_KEY", + "vercel-ai-gateway": "AI_GATEWAY_API_KEY", zai: "ZAI_API_KEY", mistral: "MISTRAL_API_KEY", minimax: "MINIMAX_API_KEY", diff --git a/packages/ai/src/types.ts b/packages/ai/src/types.ts index e8632322..63f0cbfb 100644 --- a/packages/ai/src/types.ts +++ b/packages/ai/src/types.ts @@ -56,7 +56,7 @@ export type KnownProvider = | "groq" | "cerebras" | "openrouter" - | "ai-gateway" + | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index 5aa98e1e..e854c130 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -601,7 +601,7 @@ describe("Generate E2E Tests", () => { describe.skipIf(!process.env.AI_GATEWAY_API_KEY)( "Vercel AI Gateway Provider (google/gemini-2.5-flash via OpenAI Completions)", () => { - const llm = getModel("ai-gateway", "google/gemini-2.5-flash"); + const llm = getModel("vercel-ai-gateway", "google/gemini-2.5-flash"); it("should complete basic text generation", { retry: 3 }, async () => { await basicTextGeneration(llm); diff --git a/packages/coding-agent/README.md b/packages/coding-agent/README.md index c4ae5d92..fc8feb17 100644 --- a/packages/coding-agent/README.md +++ b/packages/coding-agent/README.md @@ -166,7 +166,7 @@ Add API keys to `~/.pi/agent/auth.json`: | Cerebras | `cerebras` | `CEREBRAS_API_KEY` | | xAI | `xai` | `XAI_API_KEY` | | OpenRouter | `openrouter` | `OPENROUTER_API_KEY` | -| Vercel AI Gateway | `ai-gateway` | `AI_GATEWAY_API_KEY` | +| Vercel AI Gateway | `vercel-ai-gateway` | `AI_GATEWAY_API_KEY` | | ZAI | `zai` | `ZAI_API_KEY` | | MiniMax | `minimax` | `MINIMAX_API_KEY` | @@ -1144,7 +1144,7 @@ pi [options] [@files...] [messages...] | Option | Description | |--------|-------------| -| `--provider ` | Provider: `anthropic`, `openai`, `openai-codex`, `google`, `google-vertex`, `amazon-bedrock`, `mistral`, `xai`, `groq`, `cerebras`, `openrouter`, `ai-gateway`, `zai`, `minimax`, `github-copilot`, `google-gemini-cli`, `google-antigravity`, or custom | +| `--provider ` | Provider: `anthropic`, `openai`, `openai-codex`, `google`, `google-vertex`, `amazon-bedrock`, `mistral`, `xai`, `groq`, `cerebras`, `openrouter`, `vercel-ai-gateway`, `zai`, `minimax`, `github-copilot`, `google-gemini-cli`, `google-antigravity`, or custom | | `--model ` | Model ID | | `--api-key ` | API key (overrides environment) | | `--system-prompt ` | Custom system prompt (text or file path) | diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index d12236e1..e54adb01 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -21,7 +21,7 @@ export const defaultModelPerProvider: Record = { "google-vertex": "gemini-3-pro-preview", "github-copilot": "gpt-4o", openrouter: "openai/gpt-5.1-codex", - "ai-gateway": "anthropic/claude-opus-4.5", + "vercel-ai-gateway": "anthropic/claude-opus-4.5", xai: "grok-4-fast-non-reasoning", groq: "openai/gpt-oss-120b", cerebras: "zai-glm-4.6", diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index 2261236d..0471d2d4 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -203,7 +203,7 @@ describe("parseModelPattern", () => { describe("default model selection", () => { test("ai-gateway default is opus 4.5", () => { - expect(defaultModelPerProvider["ai-gateway"]).toBe("anthropic/claude-opus-4.5"); + expect(defaultModelPerProvider["vercel-ai-gateway"]).toBe("anthropic/claude-opus-4.5"); }); test("findInitialModel selects ai-gateway default when available", async () => { @@ -211,7 +211,7 @@ describe("default model selection", () => { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", api: "openai-completions", - provider: "ai-gateway", + provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/v1", reasoning: true, input: ["text", "image"], @@ -230,7 +230,7 @@ describe("default model selection", () => { modelRegistry: registry, }); - expect(result.model?.provider).toBe("ai-gateway"); + expect(result.model?.provider).toBe("vercel-ai-gateway"); expect(result.model?.id).toBe("anthropic/claude-opus-4.5"); }); }); diff --git a/packages/web-ui/src/components/ProviderKeyInput.ts b/packages/web-ui/src/components/ProviderKeyInput.ts index 7cddb185..011af200 100644 --- a/packages/web-ui/src/components/ProviderKeyInput.ts +++ b/packages/web-ui/src/components/ProviderKeyInput.ts @@ -15,7 +15,7 @@ const TEST_MODELS: Record = { google: "gemini-2.5-flash", groq: "openai/gpt-oss-20b", openrouter: "z-ai/glm-4.6", - "ai-gateway": "anthropic/claude-opus-4.5", + "vercel-ai-gateway": "anthropic/claude-opus-4.5", cerebras: "gpt-oss-120b", xai: "grok-4-fast-non-reasoning", zai: "glm-4.5-air", From dd263f3c242e94e09ec5ec66a15837ad95dc24a8 Mon Sep 17 00:00:00 2001 From: Timo Lins Date: Tue, 13 Jan 2026 15:27:01 +0100 Subject: [PATCH 4/4] Update model list --- packages/ai/src/models.generated.ts | 4220 +++++++++++++-------------- 1 file changed, 2110 insertions(+), 2110 deletions(-) diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index e3601c37..cb2fdab6 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -4,2116 +4,6 @@ import type { Model } from "./types.js"; export const MODELS = { - "vercel-ai-gateway": { - "alibaba/qwen-3-14b": { - id: "alibaba/qwen-3-14b", - name: "Qwen3-14B", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.06, - output: 0.24, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 40960, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen-3-235b": { - id: "alibaba/qwen-3-235b", - name: "Qwen3 235B A22b Instruct 2507", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.071, - output: 0.463, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 40960, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen-3-30b": { - id: "alibaba/qwen-3-30b", - name: "Qwen3-30B-A3B", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.08, - output: 0.29, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 40960, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen-3-32b": { - id: "alibaba/qwen-3-32b", - name: "Qwen 3.32B", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.09999999999999999, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 40960, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-235b-a22b-thinking": { - id: "alibaba/qwen3-235b-a22b-thinking", - name: "Qwen3 235B A22B Thinking 2507", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.3, - output: 2.9000000000000004, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 262114, - maxTokens: 262114, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-coder": { - id: "alibaba/qwen3-coder", - name: "Qwen3 Coder 480B A35B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.38, - output: 1.53, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 66536, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-coder-30b-a3b": { - id: "alibaba/qwen3-coder-30b-a3b", - name: "Qwen 3 Coder 30B A3B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.07, - output: 0.27, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 160000, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-coder-plus": { - id: "alibaba/qwen3-coder-plus", - name: "Qwen3 Coder Plus", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 1, - output: 5, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-max": { - id: "alibaba/qwen3-max", - name: "Qwen3 Max", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 1.2, - output: 6, - cacheRead: 0.24, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "alibaba/qwen3-max-preview": { - id: "alibaba/qwen3-max-preview", - name: "Qwen3 Max Preview", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 1.2, - output: 6, - cacheRead: 0.24, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3-haiku": { - id: "anthropic/claude-3-haiku", - name: "Claude 3 Haiku", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.25, - output: 1.25, - cacheRead: 0.03, - cacheWrite: 0.3, - }, - contextWindow: 200000, - maxTokens: 4096, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3-opus": { - id: "anthropic/claude-3-opus", - name: "Claude 3 Opus", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3.5-haiku": { - id: "anthropic/claude-3.5-haiku", - name: "Claude 3.5 Haiku", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.7999999999999999, - output: 4, - cacheRead: 0.08, - cacheWrite: 1, - }, - contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3.5-sonnet": { - id: "anthropic/claude-3.5-sonnet", - name: "Claude 3.5 Sonnet", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3.5-sonnet-20240620": { - id: "anthropic/claude-3.5-sonnet-20240620", - name: "Claude 3.5 Sonnet (2024-06-20)", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-3.7-sonnet": { - id: "anthropic/claude-3.7-sonnet", - name: "Claude 3.7 Sonnet", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-haiku-4.5": { - id: "anthropic/claude-haiku-4.5", - name: "Claude Haiku 4.5", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1, - output: 5, - cacheRead: 0.09999999999999999, - cacheWrite: 1.25, - }, - contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-opus-4": { - id: "anthropic/claude-opus-4", - name: "Claude Opus 4", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-opus-4.1": { - id: "anthropic/claude-opus-4.1", - name: "Claude Opus 4.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-opus-4.5": { - id: "anthropic/claude-opus-4.5", - name: "Claude Opus 4.5", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 5, - output: 25, - cacheRead: 0.5, - cacheWrite: 6.25, - }, - contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-sonnet-4": { - id: "anthropic/claude-sonnet-4", - name: "Claude Sonnet 4", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "anthropic/claude-sonnet-4.5": { - id: "anthropic/claude-sonnet-4.5", - name: "Claude Sonnet 4.5", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, - }, - contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "bytedance/seed-1.6": { - id: "bytedance/seed-1.6", - name: "Seed 1.6", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.25, - output: 2, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "cohere/command-a": { - id: "cohere/command-a", - name: "Command A", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 2.5, - output: 10, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 8000, - } 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.77, - output: 0.77, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 163840, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "deepseek/deepseek-v3.1": { - id: "deepseek/deepseek-v3.1", - name: "DeepSeek-V3.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.3, - output: 1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 163840, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "deepseek/deepseek-v3.1-terminus": { - id: "deepseek/deepseek-v3.1-terminus", - name: "DeepSeek V3.1 Terminus", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.27, - output: 1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "deepseek/deepseek-v3.2-exp": { - id: "deepseek/deepseek-v3.2-exp", - name: "DeepSeek V3.2 Exp", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.27, - output: 0.39999999999999997, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 163840, - maxTokens: 163840, - } satisfies Model<"anthropic-messages">, - "deepseek/deepseek-v3.2-thinking": { - id: "deepseek/deepseek-v3.2-thinking", - name: "DeepSeek V3.2 Thinking", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.28, - output: 0.42, - cacheRead: 0.028, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.0-flash": { - id: "google/gemini-2.0-flash", - name: "Gemini 2.0 Flash", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.024999999999999998, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.0-flash-lite": { - id: "google/gemini-2.0-flash-lite", - name: "Gemini 2.0 Flash Lite", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.075, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 1048576, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.5-flash": { - id: "google/gemini-2.5-flash", - name: "Gemini 2.5 Flash", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.3, - output: 2.5, - cacheRead: 0.03, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.5-flash-lite": { - id: "google/gemini-2.5-flash-lite", - name: "Gemini 2.5 Flash Lite", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.01, - cacheWrite: 0, - }, - contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.5-flash-lite-preview-09-2025": { - id: "google/gemini-2.5-flash-lite-preview-09-2025", - name: "Gemini 2.5 Flash Lite Preview 09-2025", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.01, - cacheWrite: 0, - }, - contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.5-flash-preview-09-2025": { - id: "google/gemini-2.5-flash-preview-09-2025", - name: "Gemini 2.5 Flash Preview 09-2025", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.3, - output: 2.5, - cacheRead: 0.03, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "google/gemini-2.5-pro": { - id: "google/gemini-2.5-pro", - name: "Gemini 2.5 Pro", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "google/gemini-3-flash": { - id: "google/gemini-3-flash", - name: "Gemini 3 Flash", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.5, - output: 3, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "google/gemini-3-pro-preview": { - id: "google/gemini-3-pro-preview", - name: "Gemini 3 Pro Preview", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 2, - output: 12, - cacheRead: 0.19999999999999998, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "inception/mercury-coder-small": { - id: "inception/mercury-coder-small", - name: "Mercury Coder Small Beta", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.25, - output: 1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 32000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "meituan/longcat-flash-chat": { - id: "meituan/longcat-flash-chat", - name: "LongCat Flash Chat", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meituan/longcat-flash-thinking": { - id: "meituan/longcat-flash-thinking", - name: "LongCat Flash Thinking", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.15, - output: 1.5, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meta/llama-3.1-70b": { - id: "meta/llama-3.1-70b", - name: "Llama 3.1 70B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.39999999999999997, - output: 0.39999999999999997, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "meta/llama-3.1-8b": { - id: "meta/llama-3.1-8b", - name: "Llama 3.1 8B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.03, - output: 0.049999999999999996, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "meta/llama-3.2-11b": { - id: "meta/llama-3.2-11b", - name: "Llama 3.2 11B Vision Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.16, - output: 0.16, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meta/llama-3.2-90b": { - id: "meta/llama-3.2-90b", - name: "Llama 3.2 90B Vision Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.72, - output: 0.72, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meta/llama-3.3-70b": { - id: "meta/llama-3.3-70b", - name: "Llama 3.3 70B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.72, - output: 0.72, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meta/llama-4-maverick": { - id: "meta/llama-4-maverick", - name: "Llama 4 Maverick 17B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.15, - output: 0.6, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "meta/llama-4-scout": { - id: "meta/llama-4-scout", - name: "Llama 4 Scout 17B Instruct", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.08, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "minimax/minimax-m2": { - id: "minimax/minimax-m2", - name: "MiniMax M2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.27, - output: 1.15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 262114, - maxTokens: 262114, - } satisfies Model<"anthropic-messages">, - "minimax/minimax-m2.1": { - id: "minimax/minimax-m2.1", - name: "MiniMax M2.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.28, - output: 1.2, - cacheRead: 0.14, - cacheWrite: 0, - }, - contextWindow: 196608, - maxTokens: 196608, - } satisfies Model<"anthropic-messages">, - "minimax/minimax-m2.1-lightning": { - id: "minimax/minimax-m2.1-lightning", - name: "MiniMax M2.1 Lightning", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.3, - output: 2.4, - cacheRead: 0.03, - cacheWrite: 0.375, - }, - contextWindow: 204800, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "mistral/codestral": { - id: "mistral/codestral", - name: "Mistral Codestral", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.3, - output: 0.8999999999999999, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "mistral/devstral-2": { - id: "mistral/devstral-2", - name: "Devstral 2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "mistral/devstral-small": { - id: "mistral/devstral-small", - name: "Devstral Small 1.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.09999999999999999, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "mistral/devstral-small-2": { - id: "mistral/devstral-small-2", - name: "Devstral Small 2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "mistral/ministral-3b": { - id: "mistral/ministral-3b", - name: "Ministral 3B", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.04, - output: 0.04, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "mistral/ministral-8b": { - id: "mistral/ministral-8b", - name: "Ministral 8B", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.09999999999999999, - output: 0.09999999999999999, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "mistral/mistral-medium": { - id: "mistral/mistral-medium", - name: "Mistral Medium 3.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.39999999999999997, - output: 2, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, - "mistral/mistral-nemo": { - id: "mistral/mistral-nemo", - name: "Mistral Nemo", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.04, - output: 0.16999999999999998, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 60288, - maxTokens: 16000, - } satisfies Model<"anthropic-messages">, - "mistral/mistral-small": { - id: "mistral/mistral-small", - name: "Mistral Small", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.09999999999999999, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 32000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "mistral/pixtral-12b": { - id: "mistral/pixtral-12b", - name: "Pixtral 12B 2409", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.15, - output: 0.15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "mistral/pixtral-large": { - id: "mistral/pixtral-large", - name: "Pixtral Large", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 2, - output: 6, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"anthropic-messages">, - "moonshotai/kimi-k2": { - id: "moonshotai/kimi-k2", - name: "Kimi K2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.5, - output: 2, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "moonshotai/kimi-k2-thinking": { - id: "moonshotai/kimi-k2-thinking", - name: "Kimi K2 Thinking", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.47, - output: 2, - cacheRead: 0.14100000000000001, - cacheWrite: 0, - }, - contextWindow: 216144, - maxTokens: 216144, - } satisfies Model<"anthropic-messages">, - "moonshotai/kimi-k2-thinking-turbo": { - id: "moonshotai/kimi-k2-thinking-turbo", - name: "Kimi K2 Thinking Turbo", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 1.15, - output: 8, - cacheRead: 0.15, - cacheWrite: 0, - }, - contextWindow: 262114, - maxTokens: 262114, - } satisfies Model<"anthropic-messages">, - "moonshotai/kimi-k2-turbo": { - id: "moonshotai/kimi-k2-turbo", - name: "Kimi K2 Turbo", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 2.4, - output: 10, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "nvidia/nemotron-nano-12b-v2-vl": { - id: "nvidia/nemotron-nano-12b-v2-vl", - name: "Nvidia Nemotron Nano 12B V2 VL", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.19999999999999998, - output: 0.6, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "nvidia/nemotron-nano-9b-v2": { - id: "nvidia/nemotron-nano-9b-v2", - name: "Nvidia Nemotron Nano 9B V2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.04, - output: 0.16, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "openai/codex-mini": { - id: "openai/codex-mini", - name: "Codex Mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.5, - output: 6, - cacheRead: 0.375, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4-turbo": { - id: "openai/gpt-4-turbo", - name: "GPT-4 Turbo", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 10, - output: 30, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4.1": { - id: "openai/gpt-4.1", - name: "GPT-4.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 2, - output: 8, - cacheRead: 0.5, - cacheWrite: 0, - }, - contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4.1-mini": { - id: "openai/gpt-4.1-mini", - name: "GPT-4.1 mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.39999999999999997, - output: 1.5999999999999999, - cacheRead: 0.09999999999999999, - cacheWrite: 0, - }, - contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4.1-nano": { - id: "openai/gpt-4.1-nano", - name: "GPT-4.1 nano", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.024999999999999998, - cacheWrite: 0, - }, - contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4o": { - id: "openai/gpt-4o", - name: "GPT-4o", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 2.5, - output: 10, - cacheRead: 1.25, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "openai/gpt-4o-mini": { - id: "openai/gpt-4o-mini", - name: "GPT-4o mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.15, - output: 0.6, - cacheRead: 0.075, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5": { - id: "openai/gpt-5", - name: "GPT-5", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.13, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5-chat": { - id: "openai/gpt-5-chat", - name: "GPT-5 Chat", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5-codex": { - id: "openai/gpt-5-codex", - name: "GPT-5-Codex", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.13, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5-mini": { - id: "openai/gpt-5-mini", - name: "GPT-5 mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.25, - output: 2, - cacheRead: 0.03, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5-nano": { - id: "openai/gpt-5-nano", - name: "GPT-5 nano", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.049999999999999996, - output: 0.39999999999999997, - cacheRead: 0.01, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5-pro": { - id: "openai/gpt-5-pro", - name: "GPT-5 pro", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 120, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 272000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.1-codex": { - id: "openai/gpt-5.1-codex", - name: "GPT-5.1-Codex", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.1-codex-max": { - id: "openai/gpt-5.1-codex-max", - name: "GPT 5.1 Codex Max", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.1-codex-mini": { - id: "openai/gpt-5.1-codex-mini", - name: "GPT-5.1 Codex mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.25, - output: 2, - cacheRead: 0.024999999999999998, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.1-instant": { - id: "openai/gpt-5.1-instant", - name: "GPT-5.1 Instant", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.1-thinking": { - id: "openai/gpt-5.1-thinking", - name: "GPT 5.1 Thinking", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.2": { - id: "openai/gpt-5.2", - name: "GPT-5.2", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.75, - output: 14, - cacheRead: 0.175, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.2-chat": { - id: "openai/gpt-5.2-chat", - name: "GPT-5.2 Chat", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.75, - output: 14, - cacheRead: 0.175, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"anthropic-messages">, - "openai/gpt-5.2-pro": { - id: "openai/gpt-5.2-pro", - name: "GPT 5.2 ", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 21, - output: 168, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, - "openai/gpt-oss-120b": { - id: "openai/gpt-oss-120b", - name: "gpt-oss-120b", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.09999999999999999, - output: 0.5, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "openai/gpt-oss-20b": { - id: "openai/gpt-oss-20b", - name: "gpt-oss-20b", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.07, - output: 0.3, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 8192, - } satisfies Model<"anthropic-messages">, - "openai/gpt-oss-safeguard-20b": { - id: "openai/gpt-oss-safeguard-20b", - name: "gpt-oss-safeguard-20b", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.075, - output: 0.3, - cacheRead: 0.037, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 65536, - } satisfies Model<"anthropic-messages">, - "openai/o1": { - id: "openai/o1", - name: "o1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 60, - cacheRead: 7.5, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/o3": { - id: "openai/o3", - name: "o3", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 2, - output: 8, - cacheRead: 0.5, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/o3-deep-research": { - id: "openai/o3-deep-research", - name: "o3-deep-research", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 10, - output: 40, - cacheRead: 2.5, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/o3-mini": { - id: "openai/o3-mini", - name: "o3-mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 1.1, - output: 4.4, - cacheRead: 0.55, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/o3-pro": { - id: "openai/o3-pro", - name: "o3 Pro", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 20, - output: 80, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "openai/o4-mini": { - id: "openai/o4-mini", - name: "o4-mini", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.1, - output: 4.4, - cacheRead: 0.275, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"anthropic-messages">, - "perplexity/sonar": { - id: "perplexity/sonar", - name: "Sonar", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 1, - output: 1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 127000, - maxTokens: 8000, - } satisfies Model<"anthropic-messages">, - "perplexity/sonar-pro": { - id: "perplexity/sonar-pro", - name: "Sonar Pro", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 8000, - } satisfies Model<"anthropic-messages">, - "prime-intellect/intellect-3": { - id: "prime-intellect/intellect-3", - name: "INTELLECT 3", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 1.1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "stealth/sonoma-dusk-alpha": { - id: "stealth/sonoma-dusk-alpha", - name: "Sonoma Dusk Alpha", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "stealth/sonoma-sky-alpha": { - id: "stealth/sonoma-sky-alpha", - name: "Sonoma Sky Alpha", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "vercel/v0-1.0-md": { - id: "vercel/v0-1.0-md", - name: "v0-1.0-md", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "vercel/v0-1.5-md": { - id: "vercel/v0-1.5-md", - name: "v0-1.5-md", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "xai/grok-2-vision": { - id: "xai/grok-2-vision", - name: "Grok 2 Vision", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text", "image"], - cost: { - input: 2, - output: 10, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 32768, - maxTokens: 32768, - } satisfies Model<"anthropic-messages">, - "xai/grok-3": { - id: "xai/grok-3", - name: "Grok 3 Beta", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "xai/grok-3-fast": { - id: "xai/grok-3-fast", - name: "Grok 3 Fast Beta", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 5, - output: 25, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "xai/grok-3-mini": { - id: "xai/grok-3-mini", - name: "Grok 3 Mini Beta", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.3, - output: 0.5, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "xai/grok-3-mini-fast": { - id: "xai/grok-3-mini-fast", - name: "Grok 3 Mini Fast Beta", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.6, - output: 4, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "xai/grok-4": { - id: "xai/grok-4", - name: "Grok 4", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 3, - output: 15, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "xai/grok-4-fast-non-reasoning": { - id: "xai/grok-4-fast-non-reasoning", - name: "Grok 4 Fast Non-Reasoning", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "xai/grok-4-fast-reasoning": { - id: "xai/grok-4-fast-reasoning", - name: "Grok 4 Fast Reasoning", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "xai/grok-4.1-fast-non-reasoning": { - id: "xai/grok-4.1-fast-non-reasoning", - name: "Grok 4.1 Fast Non-Reasoning", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: false, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 30000, - } satisfies Model<"anthropic-messages">, - "xai/grok-4.1-fast-reasoning": { - id: "xai/grok-4.1-fast-reasoning", - name: "Grok 4.1 Fast Reasoning", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.5, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 30000, - } satisfies Model<"anthropic-messages">, - "xai/grok-code-fast-1": { - id: "xai/grok-code-fast-1", - name: "Grok Code Fast 1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 1.5, - cacheRead: 0.02, - cacheWrite: 0, - }, - contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"anthropic-messages">, - "xiaomi/mimo-v2-flash": { - id: "xiaomi/mimo-v2-flash", - name: "MiMo V2 Flash", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.098, - output: 0.293, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.5": { - id: "zai/glm-4.5", - name: "GLM-4.5", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.6, - output: 2.2, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.5-air": { - id: "zai/glm-4.5-air", - name: "GLM 4.5 Air", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 1.1, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 96000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.5v": { - id: "zai/glm-4.5v", - name: "GLM 4.5V", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.6, - output: 1.7999999999999998, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 65536, - maxTokens: 66000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.6": { - id: "zai/glm-4.6", - name: "GLM 4.6", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.44999999999999996, - output: 1.7999999999999998, - cacheRead: 0.11, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 96000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.6v": { - id: "zai/glm-4.6v", - name: "GLM-4.6V", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.3, - output: 0.8999999999999999, - cacheRead: 0.049999999999999996, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 24000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.6v-flash": { - id: "zai/glm-4.6v-flash", - name: "GLM-4.6V-Flash", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 24000, - } satisfies Model<"anthropic-messages">, - "zai/glm-4.7": { - id: "zai/glm-4.7", - name: "GLM 4.7", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text"], - cost: { - input: 0.43, - output: 1.75, - cacheRead: 0.08, - cacheWrite: 0, - }, - contextWindow: 202752, - maxTokens: 120000, - } satisfies Model<"anthropic-messages">, - }, "amazon-bedrock": { "anthropic.claude-3-5-haiku-20241022-v1:0": { id: "anthropic.claude-3-5-haiku-20241022-v1:0", @@ -10350,6 +8240,2116 @@ export const MODELS = { maxTokens: 65535, } satisfies Model<"openai-completions">, }, + "vercel-ai-gateway": { + "alibaba/qwen-3-14b": { + id: "alibaba/qwen-3-14b", + name: "Qwen3-14B", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.06, + output: 0.24, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen-3-235b": { + id: "alibaba/qwen-3-235b", + name: "Qwen3 235B A22b Instruct 2507", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.071, + output: 0.463, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen-3-30b": { + id: "alibaba/qwen-3-30b", + name: "Qwen3-30B-A3B", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.08, + output: 0.29, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen-3-32b": { + id: "alibaba/qwen-3-32b", + name: "Qwen 3.32B", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-235b-a22b-thinking": { + id: "alibaba/qwen3-235b-a22b-thinking", + name: "Qwen3 235B A22B Thinking 2507", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.9000000000000004, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-coder": { + id: "alibaba/qwen3-coder", + name: "Qwen3 Coder 480B A35B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.38, + output: 1.53, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 66536, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-coder-30b-a3b": { + id: "alibaba/qwen3-coder-30b-a3b", + name: "Qwen 3 Coder 30B A3B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.07, + output: 0.27, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 160000, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-coder-plus": { + id: "alibaba/qwen3-coder-plus", + name: "Qwen3 Coder Plus", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-max": { + id: "alibaba/qwen3-max", + name: "Qwen3 Max", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 1.2, + output: 6, + cacheRead: 0.24, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "alibaba/qwen3-max-preview": { + id: "alibaba/qwen3-max-preview", + name: "Qwen3 Max Preview", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 1.2, + output: 6, + cacheRead: 0.24, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3-haiku": { + id: "anthropic/claude-3-haiku", + name: "Claude 3 Haiku", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.25, + output: 1.25, + cacheRead: 0.03, + cacheWrite: 0.3, + }, + contextWindow: 200000, + maxTokens: 4096, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3-opus": { + id: "anthropic/claude-3-opus", + name: "Claude 3 Opus", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3.5-haiku": { + id: "anthropic/claude-3.5-haiku", + name: "Claude 3.5 Haiku", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.7999999999999999, + output: 4, + cacheRead: 0.08, + cacheWrite: 1, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3.5-sonnet": { + id: "anthropic/claude-3.5-sonnet", + name: "Claude 3.5 Sonnet", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3.5-sonnet-20240620": { + id: "anthropic/claude-3.5-sonnet-20240620", + name: "Claude 3.5 Sonnet (2024-06-20)", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-3.7-sonnet": { + id: "anthropic/claude-3.7-sonnet", + name: "Claude 3.7 Sonnet", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-haiku-4.5": { + id: "anthropic/claude-haiku-4.5", + name: "Claude Haiku 4.5", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 5, + cacheRead: 0.09999999999999999, + cacheWrite: 1.25, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-opus-4": { + id: "anthropic/claude-opus-4", + name: "Claude Opus 4", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-opus-4.1": { + id: "anthropic/claude-opus-4.1", + name: "Claude Opus 4.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-opus-4.5": { + id: "anthropic/claude-opus-4.5", + name: "Claude Opus 4.5", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-sonnet-4": { + id: "anthropic/claude-sonnet-4", + name: "Claude Sonnet 4", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "anthropic/claude-sonnet-4.5": { + id: "anthropic/claude-sonnet-4.5", + name: "Claude Sonnet 4.5", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "bytedance/seed-1.6": { + id: "bytedance/seed-1.6", + name: "Seed 1.6", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "cohere/command-a": { + id: "cohere/command-a", + name: "Command A", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 8000, + } 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.77, + output: 0.77, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "deepseek/deepseek-v3.1": { + id: "deepseek/deepseek-v3.1", + name: "DeepSeek-V3.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "deepseek/deepseek-v3.1-terminus": { + id: "deepseek/deepseek-v3.1-terminus", + name: "DeepSeek V3.1 Terminus", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "deepseek/deepseek-v3.2-exp": { + id: "deepseek/deepseek-v3.2-exp", + name: "DeepSeek V3.2 Exp", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 163840, + } satisfies Model<"anthropic-messages">, + "deepseek/deepseek-v3.2-thinking": { + id: "deepseek/deepseek-v3.2-thinking", + name: "DeepSeek V3.2 Thinking", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.28, + output: 0.42, + cacheRead: 0.028, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.0-flash": { + id: "google/gemini-2.0-flash", + name: "Gemini 2.0 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.0-flash-lite": { + id: "google/gemini-2.0-flash-lite", + name: "Gemini 2.0 Flash Lite", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.5-flash": { + id: "google/gemini-2.5-flash", + name: "Gemini 2.5 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.5-flash-lite": { + id: "google/gemini-2.5-flash-lite", + name: "Gemini 2.5 Flash Lite", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.5-flash-lite-preview-09-2025": { + id: "google/gemini-2.5-flash-lite-preview-09-2025", + name: "Gemini 2.5 Flash Lite Preview 09-2025", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.5-flash-preview-09-2025": { + id: "google/gemini-2.5-flash-preview-09-2025", + name: "Gemini 2.5 Flash Preview 09-2025", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "google/gemini-2.5-pro": { + id: "google/gemini-2.5-pro", + name: "Gemini 2.5 Pro", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "google/gemini-3-flash": { + id: "google/gemini-3-flash", + name: "Gemini 3 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 3, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "google/gemini-3-pro-preview": { + id: "google/gemini-3-pro-preview", + name: "Gemini 3 Pro Preview", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 12, + cacheRead: 0.19999999999999998, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "inception/mercury-coder-small": { + id: "inception/mercury-coder-small", + name: "Mercury Coder Small Beta", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "meituan/longcat-flash-chat": { + id: "meituan/longcat-flash-chat", + name: "LongCat Flash Chat", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meituan/longcat-flash-thinking": { + id: "meituan/longcat-flash-thinking", + name: "LongCat Flash Thinking", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.15, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meta/llama-3.1-70b": { + id: "meta/llama-3.1-70b", + name: "Llama 3.1 70B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "meta/llama-3.1-8b": { + id: "meta/llama-3.1-8b", + name: "Llama 3.1 8B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.049999999999999996, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "meta/llama-3.2-11b": { + id: "meta/llama-3.2-11b", + name: "Llama 3.2 11B Vision Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.16, + output: 0.16, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meta/llama-3.2-90b": { + id: "meta/llama-3.2-90b", + name: "Llama 3.2 90B Vision Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.72, + output: 0.72, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meta/llama-3.3-70b": { + id: "meta/llama-3.3-70b", + name: "Llama 3.3 70B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.72, + output: 0.72, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meta/llama-4-maverick": { + id: "meta/llama-4-maverick", + name: "Llama 4 Maverick 17B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "meta/llama-4-scout": { + id: "meta/llama-4-scout", + name: "Llama 4 Scout 17B Instruct", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.08, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "minimax/minimax-m2": { + id: "minimax/minimax-m2", + name: "MiniMax M2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 1.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"anthropic-messages">, + "minimax/minimax-m2.1": { + id: "minimax/minimax-m2.1", + name: "MiniMax M2.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.28, + output: 1.2, + cacheRead: 0.14, + cacheWrite: 0, + }, + contextWindow: 196608, + maxTokens: 196608, + } satisfies Model<"anthropic-messages">, + "minimax/minimax-m2.1-lightning": { + id: "minimax/minimax-m2.1-lightning", + name: "MiniMax M2.1 Lightning", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 2.4, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "mistral/codestral": { + id: "mistral/codestral", + name: "Mistral Codestral", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "mistral/devstral-2": { + id: "mistral/devstral-2", + name: "Devstral 2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "mistral/devstral-small": { + id: "mistral/devstral-small", + name: "Devstral Small 1.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "mistral/devstral-small-2": { + id: "mistral/devstral-small-2", + name: "Devstral Small 2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "mistral/ministral-3b": { + id: "mistral/ministral-3b", + name: "Ministral 3B", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.04, + output: 0.04, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "mistral/ministral-8b": { + id: "mistral/ministral-8b", + name: "Ministral 8B", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "mistral/mistral-medium": { + id: "mistral/mistral-medium", + name: "Mistral Medium 3.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, + "mistral/mistral-nemo": { + id: "mistral/mistral-nemo", + name: "Mistral Nemo", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.04, + output: 0.16999999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 60288, + maxTokens: 16000, + } satisfies Model<"anthropic-messages">, + "mistral/mistral-small": { + id: "mistral/mistral-small", + name: "Mistral Small", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "mistral/pixtral-12b": { + id: "mistral/pixtral-12b", + name: "Pixtral 12B 2409", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "mistral/pixtral-large": { + id: "mistral/pixtral-large", + name: "Pixtral Large", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"anthropic-messages">, + "moonshotai/kimi-k2": { + id: "moonshotai/kimi-k2", + name: "Kimi K2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "moonshotai/kimi-k2-thinking": { + id: "moonshotai/kimi-k2-thinking", + name: "Kimi K2 Thinking", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.47, + output: 2, + cacheRead: 0.14100000000000001, + cacheWrite: 0, + }, + contextWindow: 216144, + maxTokens: 216144, + } satisfies Model<"anthropic-messages">, + "moonshotai/kimi-k2-thinking-turbo": { + id: "moonshotai/kimi-k2-thinking-turbo", + name: "Kimi K2 Thinking Turbo", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 1.15, + output: 8, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 262114, + maxTokens: 262114, + } satisfies Model<"anthropic-messages">, + "moonshotai/kimi-k2-turbo": { + id: "moonshotai/kimi-k2-turbo", + name: "Kimi K2 Turbo", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 2.4, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "nvidia/nemotron-nano-12b-v2-vl": { + id: "nvidia/nemotron-nano-12b-v2-vl", + name: "Nvidia Nemotron Nano 12B V2 VL", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "nvidia/nemotron-nano-9b-v2": { + id: "nvidia/nemotron-nano-9b-v2", + name: "Nvidia Nemotron Nano 9B V2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.04, + output: 0.16, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "openai/codex-mini": { + id: "openai/codex-mini", + name: "Codex Mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 6, + cacheRead: 0.375, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4-turbo": { + id: "openai/gpt-4-turbo", + name: "GPT-4 Turbo", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4.1": { + id: "openai/gpt-4.1", + name: "GPT-4.1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4.1-mini": { + id: "openai/gpt-4.1-mini", + name: "GPT-4.1 mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 1.5999999999999999, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4.1-nano": { + id: "openai/gpt-4.1-nano", + name: "GPT-4.1 nano", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4o": { + id: "openai/gpt-4o", + name: "GPT-4o", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2.5, + output: 10, + cacheRead: 1.25, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "openai/gpt-4o-mini": { + id: "openai/gpt-4o-mini", + name: "GPT-4o mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5": { + id: "openai/gpt-5", + name: "GPT-5", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5-chat": { + id: "openai/gpt-5-chat", + name: "GPT-5 Chat", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5-codex": { + id: "openai/gpt-5-codex", + name: "GPT-5-Codex", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5-mini": { + id: "openai/gpt-5-mini", + name: "GPT-5 mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.03, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5-nano": { + id: "openai/gpt-5-nano", + name: "GPT-5 nano", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.39999999999999997, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5-pro": { + id: "openai/gpt-5-pro", + name: "GPT-5 pro", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 120, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 272000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.1-codex": { + id: "openai/gpt-5.1-codex", + name: "GPT-5.1-Codex", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.1-codex-max": { + id: "openai/gpt-5.1-codex-max", + name: "GPT 5.1 Codex Max", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.1-codex-mini": { + id: "openai/gpt-5.1-codex-mini", + name: "GPT-5.1 Codex mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.1-instant": { + id: "openai/gpt-5.1-instant", + name: "GPT-5.1 Instant", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.1-thinking": { + id: "openai/gpt-5.1-thinking", + name: "GPT 5.1 Thinking", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.2": { + id: "openai/gpt-5.2", + name: "GPT-5.2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.75, + output: 14, + cacheRead: 0.175, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.2-chat": { + id: "openai/gpt-5.2-chat", + name: "GPT-5.2 Chat", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.75, + output: 14, + cacheRead: 0.175, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"anthropic-messages">, + "openai/gpt-5.2-pro": { + id: "openai/gpt-5.2-pro", + name: "GPT 5.2 ", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 21, + output: 168, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, + "openai/gpt-oss-120b": { + id: "openai/gpt-oss-120b", + name: "gpt-oss-120b", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "openai/gpt-oss-20b": { + id: "openai/gpt-oss-20b", + name: "gpt-oss-20b", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.07, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 8192, + } satisfies Model<"anthropic-messages">, + "openai/gpt-oss-safeguard-20b": { + id: "openai/gpt-oss-safeguard-20b", + name: "gpt-oss-safeguard-20b", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0.037, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 65536, + } satisfies Model<"anthropic-messages">, + "openai/o1": { + id: "openai/o1", + name: "o1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 60, + cacheRead: 7.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/o3": { + id: "openai/o3", + name: "o3", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/o3-deep-research": { + id: "openai/o3-deep-research", + name: "o3-deep-research", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 10, + output: 40, + cacheRead: 2.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/o3-mini": { + id: "openai/o3-mini", + name: "o3-mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/o3-pro": { + id: "openai/o3-pro", + name: "o3 Pro", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 20, + output: 80, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "openai/o4-mini": { + id: "openai/o4-mini", + name: "o4-mini", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"anthropic-messages">, + "perplexity/sonar": { + id: "perplexity/sonar", + name: "Sonar", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 127000, + maxTokens: 8000, + } satisfies Model<"anthropic-messages">, + "perplexity/sonar-pro": { + id: "perplexity/sonar-pro", + name: "Sonar Pro", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 8000, + } satisfies Model<"anthropic-messages">, + "prime-intellect/intellect-3": { + id: "prime-intellect/intellect-3", + name: "INTELLECT 3", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "stealth/sonoma-dusk-alpha": { + id: "stealth/sonoma-dusk-alpha", + name: "Sonoma Dusk Alpha", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "stealth/sonoma-sky-alpha": { + id: "stealth/sonoma-sky-alpha", + name: "Sonoma Sky Alpha", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "vercel/v0-1.0-md": { + id: "vercel/v0-1.0-md", + name: "v0-1.0-md", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "vercel/v0-1.5-md": { + id: "vercel/v0-1.5-md", + name: "v0-1.5-md", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "xai/grok-2-vision": { + id: "xai/grok-2-vision", + name: "Grok 2 Vision", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 32768, + } satisfies Model<"anthropic-messages">, + "xai/grok-3": { + id: "xai/grok-3", + name: "Grok 3 Beta", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "xai/grok-3-fast": { + id: "xai/grok-3-fast", + name: "Grok 3 Fast Beta", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 5, + output: 25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "xai/grok-3-mini": { + id: "xai/grok-3-mini", + name: "Grok 3 Mini Beta", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "xai/grok-3-mini-fast": { + id: "xai/grok-3-mini-fast", + name: "Grok 3 Mini Fast Beta", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.6, + output: 4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "xai/grok-4": { + id: "xai/grok-4", + name: "Grok 4", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "xai/grok-4-fast-non-reasoning": { + id: "xai/grok-4-fast-non-reasoning", + name: "Grok 4 Fast Non-Reasoning", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "xai/grok-4-fast-reasoning": { + id: "xai/grok-4-fast-reasoning", + name: "Grok 4 Fast Reasoning", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "xai/grok-4.1-fast-non-reasoning": { + id: "xai/grok-4.1-fast-non-reasoning", + name: "Grok 4.1 Fast Non-Reasoning", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 30000, + } satisfies Model<"anthropic-messages">, + "xai/grok-4.1-fast-reasoning": { + id: "xai/grok-4.1-fast-reasoning", + name: "Grok 4.1 Fast Reasoning", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 30000, + } satisfies Model<"anthropic-messages">, + "xai/grok-code-fast-1": { + id: "xai/grok-code-fast-1", + name: "Grok Code Fast 1", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.5, + cacheRead: 0.02, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 256000, + } satisfies Model<"anthropic-messages">, + "xiaomi/mimo-v2-flash": { + id: "xiaomi/mimo-v2-flash", + name: "MiMo V2 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.098, + output: 0.293, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.5": { + id: "zai/glm-4.5", + name: "GLM-4.5", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.6, + output: 2.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.5-air": { + id: "zai/glm-4.5-air", + name: "GLM 4.5 Air", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 96000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.5v": { + id: "zai/glm-4.5v", + name: "GLM 4.5V", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.6, + output: 1.7999999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxTokens: 66000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.6": { + id: "zai/glm-4.6", + name: "GLM 4.6", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.44999999999999996, + output: 1.7999999999999998, + cacheRead: 0.11, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 96000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.6v": { + id: "zai/glm-4.6v", + name: "GLM-4.6V", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 24000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.6v-flash": { + id: "zai/glm-4.6v-flash", + name: "GLM-4.6V-Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 24000, + } satisfies Model<"anthropic-messages">, + "zai/glm-4.7": { + id: "zai/glm-4.7", + name: "GLM 4.7", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.43, + output: 1.75, + cacheRead: 0.08, + cacheWrite: 0, + }, + contextWindow: 202752, + maxTokens: 120000, + } satisfies Model<"anthropic-messages">, + }, "xai": { "grok-2": { id: "grok-2",