diff --git a/.gitignore b/.gitignore index 44d8b05d..94323a97 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,4 @@ packages/*/dist/ coverage/ .nyc_output/ .pi_config/ -tui-debug.log - -# Generated files -packages/ai/src/models.generated.ts \ No newline at end of file +tui-debug.log \ No newline at end of file diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts new file mode 100644 index 00000000..7eea62d9 --- /dev/null +++ b/packages/ai/src/models.generated.ts @@ -0,0 +1,2755 @@ +// This file is auto-generated by scripts/generate-models.ts +// Do not edit manually - run 'npm run generate-models' to update + +import type { Model } from "./types.js"; + +export const PROVIDERS = { + groq: { + models: { + "deepseek-r1-distill-llama-70b": { + id: "deepseek-r1-distill-llama-70b", + name: "DeepSeek R1 Distill Llama 70B", + provider: "groq", + reasoning: true, + input: ["text"], + cost: { + input: 0.75, + output: 0.99, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model, + "llama3-70b-8192": { + id: "llama3-70b-8192", + name: "Llama 3 70B", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.59, + output: 0.79, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 8192, + } satisfies Model, + "llama-3.3-70b-versatile": { + id: "llama-3.3-70b-versatile", + name: "Llama 3.3 70B Versatile", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.59, + output: 0.79, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 32768, + } satisfies Model, + "llama-3.1-8b-instant": { + id: "llama-3.1-8b-instant", + name: "Llama 3.1 8B Instant", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.05, + output: 0.08, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model, + "qwen-qwq-32b": { + id: "qwen-qwq-32b", + name: "Qwen QwQ 32B", + provider: "groq", + reasoning: true, + input: ["text"], + cost: { + input: 0.29, + output: 0.39, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "gemma2-9b-it": { + id: "gemma2-9b-it", + name: "Gemma 2 9B", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.2, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 8192, + } satisfies Model, + "mistral-saba-24b": { + id: "mistral-saba-24b", + name: "Mistral Saba 24B", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.79, + output: 0.79, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 32768, + } satisfies Model, + "llama3-8b-8192": { + id: "llama3-8b-8192", + name: "Llama 3 8B", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 0.05, + output: 0.08, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 8192, + } satisfies Model, + "openai/gpt-oss-120b": { + id: "openai/gpt-oss-120b", + name: "GPT OSS 120B", + provider: "groq", + reasoning: true, + input: ["text"], + cost: { + input: 0.15, + output: 0.75, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 32768, + } satisfies Model, + "openai/gpt-oss-20b": { + id: "openai/gpt-oss-20b", + name: "GPT OSS 20B", + provider: "groq", + reasoning: true, + input: ["text"], + cost: { + input: 0.1, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 32768, + } satisfies Model, + "meta-llama/llama-4-maverick-17b-128e-instruct": { + id: "meta-llama/llama-4-maverick-17b-128e-instruct", + name: "Llama 4 Maverick 17B", + provider: "groq", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model, + "meta-llama/llama-4-scout-17b-16e-instruct": { + id: "meta-llama/llama-4-scout-17b-16e-instruct", + name: "Llama 4 Scout 17B", + provider: "groq", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.11, + output: 0.34, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model, + "qwen/qwen3-32b": { + id: "qwen/qwen3-32b", + name: "Qwen3 32B", + provider: "groq", + reasoning: true, + input: ["text"], + cost: { + input: 0.29, + output: 0.59, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "moonshotai/kimi-k2-instruct": { + id: "moonshotai/kimi-k2-instruct", + name: "Kimi K2 Instruct", + provider: "groq", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + }, + }, + cerebras: { + models: { + "qwen-3-235b-a22b-instruct-2507": { + id: "qwen-3-235b-a22b-instruct-2507", + name: "Qwen 3 235B Instruct", + provider: "cerebras", + reasoning: false, + input: ["text"], + cost: { + input: 0.6, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131000, + maxTokens: 32000, + } satisfies Model, + "gpt-oss-120b": { + id: "gpt-oss-120b", + name: "GPT OSS 120B", + provider: "cerebras", + reasoning: true, + input: ["text"], + cost: { + input: 0.25, + output: 0.69, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 32768, + } satisfies Model, + "qwen-3-coder-480b": { + id: "qwen-3-coder-480b", + name: "Qwen 3 Coder 480B", + provider: "cerebras", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131000, + maxTokens: 32000, + } satisfies Model, + }, + }, + openrouter: { + models: { + "qwen/qwen3-30b-a3b-thinking-2507": { + id: "qwen/qwen3-30b-a3b-thinking-2507", + name: "Qwen: Qwen3 30B A3B Thinking 2507", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.0713, + output: 0.2852, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 262144, + } satisfies Model, + "nousresearch/hermes-4-70b": { + id: "nousresearch/hermes-4-70b", + name: "Nous: Hermes 4 70B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.09329544, + output: 0.3733632, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "nousresearch/hermes-4-405b": { + id: "nousresearch/hermes-4-405b", + name: "Nous: Hermes 4 405B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.1999188, + output: 0.800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-chat-v3.1:free": { + id: "deepseek/deepseek-chat-v3.1:free", + name: "DeepSeek: DeepSeek V3.1 (free)", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 64000, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-chat-v3.1": { + id: "deepseek/deepseek-chat-v3.1", + name: "DeepSeek: DeepSeek V3.1", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.7999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-medium-3.1": { + id: "mistralai/mistral-medium-3.1", + name: "Mistral: Mistral Medium 3.1", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "z-ai/glm-4.5v": { + id: "z-ai/glm-4.5v", + name: "Z.AI: GLM 4.5V", + provider: "openrouter", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 1.7999999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxTokens: 65536, + } satisfies Model, + "ai21/jamba-mini-1.7": { + id: "ai21/jamba-mini-1.7", + name: "AI21: Jamba Mini 1.7", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 4096, + } satisfies Model, + "ai21/jamba-large-1.7": { + id: "ai21/jamba-large-1.7", + name: "AI21: Jamba Large 1.7", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 4096, + } satisfies Model, + "mistralai/codestral-2508": { + id: "mistralai/codestral-2508", + name: "Mistral: Codestral 2508", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-coder-30b-a3b-instruct": { + id: "qwen/qwen3-coder-30b-a3b-instruct", + name: "Qwen: Qwen3 Coder 30B A3B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.051830799999999996, + output: 0.207424, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-30b-a3b-instruct-2507": { + id: "qwen/qwen3-30b-a3b-instruct-2507", + name: "Qwen: Qwen3 30B A3B Instruct 2507", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.051830799999999996, + output: 0.207424, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "z-ai/glm-4.5": { + id: "z-ai/glm-4.5", + name: "Z.AI: GLM 4.5", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.1999188, + output: 0.800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "z-ai/glm-4.5-air:free": { + id: "z-ai/glm-4.5-air:free", + name: "Z.AI: GLM 4.5 Air (free)", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "z-ai/glm-4.5-air": { + id: "z-ai/glm-4.5-air", + name: "Z.AI: GLM 4.5 Air", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.14, + output: 0.86, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 131072, + } satisfies Model, + "qwen/qwen3-235b-a22b-thinking-2507": { + id: "qwen/qwen3-235b-a22b-thinking-2507", + name: "Qwen: Qwen3 235B A22B Thinking 2507", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.077968332, + output: 0.31202496, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "z-ai/glm-4-32b": { + id: "z-ai/glm-4-32b", + name: "Z.AI: GLM 4 32B ", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-coder:free": { + id: "qwen/qwen3-coder:free", + name: "Qwen: Qwen3 Coder 480B A35B (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-coder": { + id: "qwen/qwen3-coder", + name: "Qwen: Qwen3 Coder 480B A35B", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.7999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-235b-a22b-2507": { + id: "qwen/qwen3-235b-a22b-2507", + name: "Qwen: Qwen3 235B A22B Instruct 2507", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.077968332, + output: 0.31202496, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "moonshotai/kimi-k2:free": { + id: "moonshotai/kimi-k2:free", + name: "MoonshotAI: Kimi K2 (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "moonshotai/kimi-k2": { + id: "moonshotai/kimi-k2", + name: "MoonshotAI: Kimi K2", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.14, + output: 2.4899999999999998, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 63000, + maxTokens: 63000, + } satisfies Model, + "mistralai/devstral-medium": { + id: "mistralai/devstral-medium", + name: "Mistral: Devstral Medium", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "mistralai/devstral-small": { + id: "mistralai/devstral-small", + name: "Mistral: Devstral Small 1.1", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.07, + output: 0.28, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "inception/mercury": { + id: "inception/mercury", + name: "Inception: Mercury", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "mistralai/mistral-small-3.2-24b-instruct:free": { + id: "mistralai/mistral-small-3.2-24b-instruct:free", + name: "Mistral: Mistral Small 3.2 24B (free)", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-small-3.2-24b-instruct": { + id: "mistralai/mistral-small-3.2-24b-instruct", + name: "Mistral: Mistral Small 3.2 24B", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "minimax/minimax-m1": { + id: "minimax/minimax-m1", + name: "MiniMax: MiniMax M1", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 1.6500000000000001, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 40000, + } satisfies Model, + "mistralai/magistral-small-2506": { + id: "mistralai/magistral-small-2506", + name: "Mistral: Magistral Small 2506", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.5, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40000, + maxTokens: 40000, + } satisfies Model, + "mistralai/magistral-medium-2506": { + id: "mistralai/magistral-medium-2506", + name: "Mistral: Magistral Medium 2506", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 2, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 40000, + } satisfies Model, + "mistralai/magistral-medium-2506:thinking": { + id: "mistralai/magistral-medium-2506:thinking", + name: "Mistral: Magistral Medium 2506 (thinking)", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 2, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 40000, + } satisfies Model, + "deepseek/deepseek-r1-0528": { + id: "deepseek/deepseek-r1-0528", + name: "DeepSeek: R1 0528", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.1999188, + output: 0.800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 4096, + } satisfies Model, + "mistralai/devstral-small-2505:free": { + id: "mistralai/devstral-small-2505:free", + name: "Mistral: Devstral Small 2505 (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "mistralai/devstral-small-2505": { + id: "mistralai/devstral-small-2505", + name: "Mistral: Devstral Small 2505", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.01999188, + output: 0.0800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3.3-8b-instruct:free": { + id: "meta-llama/llama-3.3-8b-instruct:free", + name: "Meta: Llama 3.3 8B Instruct (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4028, + } satisfies Model, + "mistralai/mistral-medium-3": { + id: "mistralai/mistral-medium-3", + name: "Mistral: Mistral Medium 3", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "arcee-ai/virtuoso-large": { + id: "arcee-ai/virtuoso-large", + name: "Arcee AI: Virtuoso Large", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.75, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 64000, + } satisfies Model, + "inception/mercury-coder": { + id: "inception/mercury-coder", + name: "Inception: Mercury Coder", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "qwen/qwen3-4b:free": { + id: "qwen/qwen3-4b:free", + name: "Qwen: Qwen3 4B (free)", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-30b-a3b": { + id: "qwen/qwen3-30b-a3b", + name: "Qwen: Qwen3 30B A3B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.01999188, + output: 0.0800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-14b": { + id: "qwen/qwen3-14b", + name: "Qwen: Qwen3 14B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.06, + output: 0.24, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 40960, + } satisfies Model, + "qwen/qwen3-32b": { + id: "qwen/qwen3-32b", + name: "Qwen: Qwen3 32B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.017992691999999998, + output: 0.07200576, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-235b-a22b:free": { + id: "qwen/qwen3-235b-a22b:free", + name: "Qwen: Qwen3 235B A22B (free)", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen3-235b-a22b": { + id: "qwen/qwen3-235b-a22b", + name: "Qwen: Qwen3 235B A22B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.13, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 40960, + maxTokens: 40960, + } satisfies Model, + "meta-llama/llama-4-maverick:free": { + id: "meta-llama/llama-4-maverick:free", + name: "Meta: Llama 4 Maverick (free)", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4028, + } satisfies Model, + "meta-llama/llama-4-maverick": { + id: "meta-llama/llama-4-maverick", + name: "Meta: Llama 4 Maverick", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 16384, + } satisfies Model, + "meta-llama/llama-4-scout:free": { + id: "meta-llama/llama-4-scout:free", + name: "Meta: Llama 4 Scout (free)", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4028, + } satisfies Model, + "meta-llama/llama-4-scout": { + id: "meta-llama/llama-4-scout", + name: "Meta: Llama 4 Scout", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.08, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model, + "deepseek/deepseek-chat-v3-0324:free": { + id: "deepseek/deepseek-chat-v3-0324:free", + name: "DeepSeek: DeepSeek V3 0324 (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-chat-v3-0324": { + id: "deepseek/deepseek-chat-v3-0324", + name: "DeepSeek: DeepSeek V3 0324", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.1999188, + output: 0.800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-small-3.1-24b-instruct:free": { + id: "mistralai/mistral-small-3.1-24b-instruct:free", + name: "Mistral: Mistral Small 3.1 24B (free)", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-small-3.1-24b-instruct": { + id: "mistralai/mistral-small-3.1-24b-instruct", + name: "Mistral: Mistral Small 3.1 24B", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.01999188, + output: 0.0800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 96000, + } satisfies Model, + "mistralai/mistral-saba": { + id: "mistralai/mistral-saba", + name: "Mistral: Saba", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "qwen/qwen-turbo": { + id: "qwen/qwen-turbo", + name: "Qwen: Qwen-Turbo", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.049999999999999996, + output: 0.19999999999999998, + cacheRead: 0.02, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 8192, + } satisfies Model, + "qwen/qwen-plus": { + id: "qwen/qwen-plus", + name: "Qwen: Qwen-Plus", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 1.2, + cacheRead: 0.16, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model, + "qwen/qwen-max": { + id: "qwen/qwen-max", + name: "Qwen: Qwen-Max ", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 1.5999999999999999, + output: 6.3999999999999995, + cacheRead: 0.64, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 8192, + } satisfies Model, + "mistralai/mistral-small-24b-instruct-2501": { + id: "mistralai/mistral-small-24b-instruct-2501", + name: "Mistral: Mistral Small 3", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.01999188, + output: 0.0800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-r1-distill-llama-70b": { + id: "deepseek/deepseek-r1-distill-llama-70b", + name: "DeepSeek: R1 Distill Llama 70B", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.025915399999999998, + output: 0.103712, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-r1": { + id: "deepseek/deepseek-r1", + name: "DeepSeek: R1", + provider: "openrouter", + reasoning: true, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 163840, + } satisfies Model, + "mistralai/codestral-2501": { + id: "mistralai/codestral-2501", + name: "Mistral: Codestral 2501", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model, + "deepseek/deepseek-chat": { + id: "deepseek/deepseek-chat", + name: "DeepSeek: DeepSeek V3", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.1999188, + output: 0.800064, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3.3-70b-instruct:free": { + id: "meta-llama/llama-3.3-70b-instruct:free", + name: "Meta: Llama 3.3 70B Instruct (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3.3-70b-instruct": { + id: "meta-llama/llama-3.3-70b-instruct", + name: "Meta: Llama 3.3 70B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.038000000000000006, + output: 0.12, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "amazon/nova-lite-v1": { + id: "amazon/nova-lite-v1", + name: "Amazon: Nova Lite 1.0", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.06, + output: 0.24, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 300000, + maxTokens: 5120, + } satisfies Model, + "amazon/nova-micro-v1": { + id: "amazon/nova-micro-v1", + name: "Amazon: Nova Micro 1.0", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.035, + output: 0.14, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 5120, + } satisfies Model, + "amazon/nova-pro-v1": { + id: "amazon/nova-pro-v1", + name: "Amazon: Nova Pro 1.0", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.7999999999999999, + output: 3.1999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 300000, + maxTokens: 5120, + } satisfies Model, + "mistralai/mistral-large-2411": { + id: "mistralai/mistral-large-2411", + name: "Mistral Large 2411", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-large-2407": { + id: "mistralai/mistral-large-2407", + name: "Mistral Large 2407", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "mistralai/pixtral-large-2411": { + id: "mistralai/pixtral-large-2411", + name: "Mistral: Pixtral Large 2411", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "thedrummer/unslopnemo-12b": { + id: "thedrummer/unslopnemo-12b", + name: "TheDrummer: UnslopNemo 12B", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "mistralai/ministral-8b": { + id: "mistralai/ministral-8b", + name: "Mistral: Ministral 8B", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "nvidia/llama-3.1-nemotron-70b-instruct": { + id: "nvidia/llama-3.1-nemotron-70b-instruct", + name: "NVIDIA: Llama 3.1 Nemotron 70B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.12, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "thedrummer/rocinante-12b": { + id: "thedrummer/rocinante-12b", + name: "TheDrummer: Rocinante 12B", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.16999999999999998, + output: 0.43, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3.2-3b-instruct": { + id: "meta-llama/llama-3.2-3b-instruct", + name: "Meta: Llama 3.2 3B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.003, + output: 0.006, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 20000, + maxTokens: 20000, + } satisfies Model, + "qwen/qwen-2.5-72b-instruct": { + id: "qwen/qwen-2.5-72b-instruct", + name: "Qwen2.5 72B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.051830799999999996, + output: 0.207424, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "mistralai/pixtral-12b": { + id: "mistralai/pixtral-12b", + name: "Mistral: Pixtral 12B", + provider: "openrouter", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "cohere/command-r-plus-08-2024": { + id: "cohere/command-r-plus-08-2024", + name: "Cohere: Command R+ (08-2024)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "cohere/command-r-08-2024": { + id: "cohere/command-r-08-2024", + name: "Cohere: Command R (08-2024)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "microsoft/phi-3.5-mini-128k-instruct": { + id: "microsoft/phi-3.5-mini-128k-instruct", + name: "Microsoft: Phi-3.5 Mini 128K Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "nousresearch/hermes-3-llama-3.1-70b": { + id: "nousresearch/hermes-3-llama-3.1-70b", + name: "Nous: Hermes 3 70B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.28, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3.1-8b-instruct": { + id: "meta-llama/llama-3.1-8b-instruct", + name: "Meta: Llama 3.1 8B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.015, + output: 0.02, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "meta-llama/llama-3.1-70b-instruct": { + id: "meta-llama/llama-3.1-70b-instruct", + name: "Meta: Llama 3.1 70B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.28, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 16384, + } satisfies Model, + "meta-llama/llama-3.1-405b-instruct": { + id: "meta-llama/llama-3.1-405b-instruct", + name: "Meta: Llama 3.1 405B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.7999999999999999, + output: 0.7999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model, + "mistralai/mistral-nemo": { + id: "mistralai/mistral-nemo", + name: "Mistral: Mistral Nemo", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.0075, + output: 0.049999999999999996, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-7b-instruct-v0.3": { + id: "mistralai/mistral-7b-instruct-v0.3", + name: "Mistral: Mistral 7B Instruct v0.3", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.028, + output: 0.054, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model, + "mistralai/mistral-7b-instruct:free": { + id: "mistralai/mistral-7b-instruct:free", + name: "Mistral: Mistral 7B Instruct (free)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model, + "mistralai/mistral-7b-instruct": { + id: "mistralai/mistral-7b-instruct", + name: "Mistral: Mistral 7B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.028, + output: 0.054, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model, + "microsoft/phi-3-mini-128k-instruct": { + id: "microsoft/phi-3-mini-128k-instruct", + name: "Microsoft: Phi-3 Mini 128K Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.09999999999999999, + output: 0.09999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "microsoft/phi-3-medium-128k-instruct": { + id: "microsoft/phi-3-medium-128k-instruct", + name: "Microsoft: Phi-3 Medium 128K Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "meta-llama/llama-3-70b-instruct": { + id: "meta-llama/llama-3-70b-instruct", + name: "Meta: Llama 3 70B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 16384, + } satisfies Model, + "meta-llama/llama-3-8b-instruct": { + id: "meta-llama/llama-3-8b-instruct", + name: "Meta: Llama 3 8B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.06, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 16384, + } satisfies Model, + "mistralai/mixtral-8x22b-instruct": { + id: "mistralai/mixtral-8x22b-instruct", + name: "Mistral: Mixtral 8x22B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.8999999999999999, + output: 0.8999999999999999, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxTokens: 4096, + } satisfies Model, + "cohere/command-r-plus": { + id: "cohere/command-r-plus", + name: "Cohere: Command R+", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "cohere/command-r-plus-04-2024": { + id: "cohere/command-r-plus-04-2024", + name: "Cohere: Command R+ (04-2024)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "cohere/command-r": { + id: "cohere/command-r", + name: "Cohere: Command R", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "cohere/command-r-03-2024": { + id: "cohere/command-r-03-2024", + name: "Cohere: Command R (03-2024)", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model, + "mistralai/mistral-large": { + id: "mistralai/mistral-large", + name: "Mistral Large", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-tiny": { + id: "mistralai/mistral-tiny", + name: "Mistral Tiny", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 0.25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "mistralai/mistral-small": { + id: "mistralai/mistral-small", + name: "Mistral Small", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model, + "mistralai/mixtral-8x7b-instruct": { + id: "mistralai/mixtral-8x7b-instruct", + name: "Mistral: Mixtral 8x7B Instruct", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.08, + output: 0.24, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model, + "mistralai/mistral-7b-instruct-v0.1": { + id: "mistralai/mistral-7b-instruct-v0.1", + name: "Mistral: Mistral 7B Instruct v0.1", + provider: "openrouter", + reasoning: false, + input: ["text"], + cost: { + input: 0.11, + output: 0.19, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 2824, + maxTokens: 4096, + } satisfies Model, + }, + }, + xai: { + models: { + "grok-code-fast-1": { + id: "grok-code-fast-1", + name: "xAI: Grok Code Fast 1", + provider: "xai", + reasoning: true, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 1.5, + cacheRead: 0.02, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 10000, + } satisfies Model, + "grok-4": { + id: "grok-4", + name: "xAI: Grok 4", + provider: "xai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.75, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 4096, + } satisfies Model, + "grok-3-mini": { + id: "grok-3-mini", + name: "xAI: Grok 3 Mini", + provider: "xai", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 0.5, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "grok-3": { + id: "grok-3", + name: "xAI: Grok 3", + provider: "xai", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0.75, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "grok-3-mini-beta": { + id: "grok-3-mini-beta", + name: "xAI: Grok 3 Mini Beta", + provider: "xai", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 0.5, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "grok-3-beta": { + id: "grok-3-beta", + name: "xAI: Grok 3 Beta", + provider: "xai", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 15, + cacheRead: 0.75, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + "grok-2-1212": { + id: "grok-2-1212", + name: "xAI: Grok 2 1212", + provider: "xai", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model, + }, + }, + openai: { + models: { + "gpt-4o-audio-preview": { + id: "gpt-4o-audio-preview", + name: "OpenAI: GPT-4o Audio", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-5": { + id: "gpt-5", + name: "OpenAI: GPT-5", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model, + "gpt-5-mini": { + id: "gpt-5-mini", + name: "OpenAI: GPT-5 Mini", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model, + "gpt-5-nano": { + id: "gpt-5-nano", + name: "OpenAI: GPT-5 Nano", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.39999999999999997, + cacheRead: 0.005, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model, + "gpt-oss-120b": { + id: "gpt-oss-120b", + name: "OpenAI: gpt-oss-120b", + provider: "openai", + reasoning: true, + input: ["text"], + cost: { + input: 0.072, + output: 0.28, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131000, + maxTokens: 131000, + } satisfies Model, + "gpt-oss-20b": { + id: "gpt-oss-20b", + name: "OpenAI: gpt-oss-20b", + provider: "openai", + reasoning: true, + input: ["text"], + cost: { + input: 0.04, + output: 0.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131000, + maxTokens: 131000, + } satisfies Model, + "o3-pro": { + id: "o3-pro", + name: "OpenAI: o3 Pro", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 20, + output: 80, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "codex-mini": { + id: "codex-mini", + name: "OpenAI: Codex Mini", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 6, + cacheRead: 0.375, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "o4-mini-high": { + id: "o4-mini-high", + name: "OpenAI: o4 Mini High", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + o3: { + id: "o3", + name: "OpenAI: o3", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "o4-mini": { + id: "o4-mini", + name: "OpenAI: o4 Mini", + provider: "openai", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "gpt-4.1": { + id: "gpt-4.1", + name: "OpenAI: GPT-4.1", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model, + "gpt-4.1-mini": { + id: "gpt-4.1-mini", + name: "OpenAI: GPT-4.1 Mini", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.39999999999999997, + output: 1.5999999999999999, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model, + "gpt-4.1-nano": { + id: "gpt-4.1-nano", + name: "OpenAI: GPT-4.1 Nano", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model, + "o3-mini-high": { + id: "o3-mini-high", + name: "OpenAI: o3 Mini High", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "o3-mini": { + id: "o3-mini", + name: "OpenAI: o3 Mini", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + o1: { + id: "o1", + name: "OpenAI: o1", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 15, + output: 60, + cacheRead: 7.5, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model, + "gpt-4o-2024-11-20": { + id: "gpt-4o-2024-11-20", + name: "OpenAI: GPT-4o (2024-11-20)", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2.5, + output: 10, + cacheRead: 1.25, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-4o-2024-08-06": { + id: "gpt-4o-2024-08-06", + name: "OpenAI: GPT-4o (2024-08-06)", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2.5, + output: 10, + cacheRead: 1.25, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-4o-mini": { + id: "gpt-4o-mini", + name: "OpenAI: GPT-4o-mini", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-4o-mini-2024-07-18": { + id: "gpt-4o-mini-2024-07-18", + name: "OpenAI: GPT-4o-mini (2024-07-18)", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0.075, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-4o": { + id: "gpt-4o", + name: "OpenAI: GPT-4o", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2.5, + output: 10, + cacheRead: 1.25, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model, + "gpt-4o:extended": { + id: "gpt-4o:extended", + name: "OpenAI: GPT-4o (extended)", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 6, + output: 18, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 64000, + } satisfies Model, + "gpt-4o-2024-05-13": { + id: "gpt-4o-2024-05-13", + name: "OpenAI: GPT-4o (2024-05-13)", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 5, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "gpt-4-turbo": { + id: "gpt-4-turbo", + name: "OpenAI: GPT-4 Turbo", + provider: "openai", + reasoning: false, + input: ["text", "image"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "gpt-3.5-turbo-0613": { + id: "gpt-3.5-turbo-0613", + name: "OpenAI: GPT-3.5 Turbo (older v0613)", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 4095, + maxTokens: 4096, + } satisfies Model, + "gpt-4-turbo-preview": { + id: "gpt-4-turbo-preview", + name: "OpenAI: GPT-4 Turbo Preview", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "gpt-4-1106-preview": { + id: "gpt-4-1106-preview", + name: "OpenAI: GPT-4 Turbo (older v1106)", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model, + "gpt-3.5-turbo-16k": { + id: "gpt-3.5-turbo-16k", + name: "OpenAI: GPT-3.5 Turbo 16k", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16385, + maxTokens: 4096, + } satisfies Model, + "gpt-4": { + id: "gpt-4", + name: "OpenAI: GPT-4", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 30, + output: 60, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8191, + maxTokens: 4096, + } satisfies Model, + "gpt-4-0314": { + id: "gpt-4-0314", + name: "OpenAI: GPT-4 (older v0314)", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 30, + output: 60, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8191, + maxTokens: 4096, + } satisfies Model, + "gpt-3.5-turbo": { + id: "gpt-3.5-turbo", + name: "OpenAI: GPT-3.5 Turbo", + provider: "openai", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16385, + maxTokens: 4096, + } satisfies Model, + }, + }, + anthropic: { + models: { + "claude-opus-4.1": { + id: "claude-opus-4.1", + name: "Anthropic: Claude Opus 4.1", + provider: "anthropic", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model, + "claude-opus-4": { + id: "claude-opus-4", + name: "Anthropic: Claude Opus 4", + provider: "anthropic", + reasoning: true, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model, + "claude-sonnet-4": { + id: "claude-sonnet-4", + name: "Anthropic: Claude Sonnet 4", + provider: "anthropic", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model, + "claude-3.7-sonnet": { + id: "claude-3.7-sonnet", + name: "Anthropic: Claude 3.7 Sonnet", + provider: "anthropic", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model, + "claude-3.7-sonnet:thinking": { + id: "claude-3.7-sonnet:thinking", + name: "Anthropic: Claude 3.7 Sonnet (thinking)", + provider: "anthropic", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model, + "claude-3.5-haiku-20241022": { + id: "claude-3.5-haiku-20241022", + name: "Anthropic: Claude 3.5 Haiku (2024-10-22)", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.7999999999999999, + output: 4, + cacheRead: 0.08, + cacheWrite: 1, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model, + "claude-3.5-haiku": { + id: "claude-3.5-haiku", + name: "Anthropic: Claude 3.5 Haiku", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.7999999999999999, + output: 4, + cacheRead: 0.08, + cacheWrite: 1, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model, + "claude-3.5-sonnet": { + id: "claude-3.5-sonnet", + name: "Anthropic: Claude 3.5 Sonnet", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model, + "claude-3.5-sonnet-20240620": { + id: "claude-3.5-sonnet-20240620", + name: "Anthropic: Claude 3.5 Sonnet (2024-06-20)", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxTokens: 8192, + } satisfies Model, + "claude-3-haiku": { + id: "claude-3-haiku", + name: "Anthropic: Claude 3 Haiku", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.25, + output: 1.25, + cacheRead: 0.03, + cacheWrite: 0.3, + }, + contextWindow: 200000, + maxTokens: 4096, + } satisfies Model, + "claude-3-opus": { + id: "claude-3-opus", + name: "Anthropic: Claude 3 Opus", + provider: "anthropic", + reasoning: false, + input: ["text", "image"], + cost: { + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + }, + contextWindow: 200000, + maxTokens: 4096, + } satisfies Model, + }, + }, + google: { + models: { + "gemini-2.5-flash-lite": { + id: "gemini-2.5-flash-lite", + name: "Google: Gemini 2.5 Flash Lite", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0.18330000000000002, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model, + "gemini-2.5-flash-lite-preview-06-17": { + id: "gemini-2.5-flash-lite-preview-06-17", + name: "Google: Gemini 2.5 Flash Lite Preview 06-17", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0.18330000000000002, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model, + "gemini-2.5-flash": { + id: "gemini-2.5-flash", + name: "Google: Gemini 2.5 Flash", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0.075, + cacheWrite: 0.3833, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model, + "gemini-2.5-pro": { + id: "gemini-2.5-pro", + name: "Google: Gemini 2.5 Pro", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.31, + cacheWrite: 1.625, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model, + "gemini-2.5-pro-preview": { + id: "gemini-2.5-pro-preview", + name: "Google: Gemini 2.5 Pro Preview 06-05", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.31, + cacheWrite: 1.625, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model, + "gemini-2.5-pro-preview-05-06": { + id: "gemini-2.5-pro-preview-05-06", + name: "Google: Gemini 2.5 Pro Preview 05-06", + provider: "google", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0.31, + cacheWrite: 1.625, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model, + "gemini-2.5-pro-exp-03-25": { + id: "gemini-2.5-pro-exp-03-25", + name: "Google: Gemini 2.5 Pro Experimental", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model, + "gemini-2.0-flash-lite-001": { + id: "gemini-2.0-flash-lite-001", + name: "Google: Gemini 2.0 Flash Lite", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 8192, + } satisfies Model, + "gemini-2.0-flash-001": { + id: "gemini-2.0-flash-001", + name: "Google: Gemini 2.0 Flash", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.39999999999999997, + cacheRead: 0.024999999999999998, + cacheWrite: 0.18330000000000002, + }, + contextWindow: 1048576, + maxTokens: 8192, + } satisfies Model, + "gemini-2.0-flash-exp:free": { + id: "gemini-2.0-flash-exp:free", + name: "Google: Gemini 2.0 Flash Experimental (free)", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 8192, + } satisfies Model, + "gemini-flash-1.5-8b": { + id: "gemini-flash-1.5-8b", + name: "Google: Gemini 1.5 Flash 8B", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.0375, + output: 0.15, + cacheRead: 0.01, + cacheWrite: 0.0583, + }, + contextWindow: 1000000, + maxTokens: 8192, + } satisfies Model, + "gemini-flash-1.5": { + id: "gemini-flash-1.5", + name: "Google: Gemini 1.5 Flash ", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0.01875, + cacheWrite: 0.1583, + }, + contextWindow: 1000000, + maxTokens: 8192, + } satisfies Model, + "gemini-pro-1.5": { + id: "gemini-pro-1.5", + name: "Google: Gemini 1.5 Pro", + provider: "google", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1.25, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxTokens: 8192, + } satisfies Model, + }, + }, +} as const; + +// Helper type to extract models for each provider +export type ProviderModels = { + [K in keyof typeof PROVIDERS]: (typeof PROVIDERS)[K]["models"]; +};