diff --git a/packages/pi-ai/src/models.generated.ts b/packages/pi-ai/src/models.generated.ts index fe3112ede..b1fcbd816 100644 --- a/packages/pi-ai/src/models.generated.ts +++ b/packages/pi-ai/src/models.generated.ts @@ -6413,25 +6413,195 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, + "aion-labs/aion-1.0": { + id: "aion-labs/aion-1.0", + name: "AionLabs: Aion-1.0", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 4, + output: 8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 32768, + }, + "aion-labs/aion-1.0-mini": { + id: "aion-labs/aion-1.0-mini", + name: "AionLabs: Aion-1.0-Mini", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.7, + output: 1.4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 32768, + }, + "aion-labs/aion-2.0": { + id: "aion-labs/aion-2.0", + name: "AionLabs: Aion-2.0", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.8, + output: 1.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 32768, + }, + "aion-labs/aion-rp-llama-3.1-8b": { + id: "aion-labs/aion-rp-llama-3.1-8b", + name: "AionLabs: Aion-RP 1.0 (8B)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.8, + output: 1.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 32768, + }, + "alfredpros/codellama-7b-instruct-solidity": { + id: "alfredpros/codellama-7b-instruct-solidity", + name: "AlfredPros: CodeLLaMa 7B Instruct Solidity", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.8, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 4096, + maxOutput: 4096, + }, "alibaba/tongyi-deepresearch-30b-a3b": { id: "alibaba/tongyi-deepresearch-30b-a3b", name: "Tongyi DeepResearch 30B A3B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.09, - output: 0.44999999999999996, - cacheRead: 0.09, + output: 0.45, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, + "allenai/molmo-2-8b": { + id: "allenai/molmo-2-8b", + name: "AllenAI: Molmo2 8B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 36864, + maxOutput: 36864, + }, + "allenai/olmo-2-0325-32b-instruct": { + id: "allenai/olmo-2-0325-32b-instruct", + name: "AllenAI: Olmo 2 32B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.05, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, + "allenai/olmo-3-32b-think": { + id: "allenai/olmo-3-32b-think", + name: "AllenAI: Olmo 3 32B Think", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.15, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 65536, + }, + "allenai/olmo-3-7b-instruct": { + id: "allenai/olmo-3-7b-instruct", + name: "AllenAI: Olmo 3 7B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.1, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 65536, + }, + "allenai/olmo-3-7b-think": { + id: "allenai/olmo-3-7b-think", + name: "AllenAI: Olmo 3 7B Think", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.12, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 65536, + }, "allenai/olmo-3.1-32b-instruct": { id: "allenai/olmo-3.1-32b-instruct", name: "AllenAI: Olmo 3.1 32B Instruct", @@ -6441,21 +6611,55 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0, }, contextWindow: 65536, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "allenai/olmo-3.1-32b-think": { + id: "allenai/olmo-3.1-32b-think", + name: "AllenAI: Olmo 3.1 32B Think", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.15, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 65536, + }, + "alpindale/goliath-120b": { + id: "alpindale/goliath-120b", + name: "Goliath 120B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 3.75, + output: 7.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 6144, + maxOutput: 1024, + }, "amazon/nova-2-lite-v1": { id: "amazon/nova-2-lite-v1", name: "Amazon: Nova 2 Lite", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.3, @@ -6464,8 +6668,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 65535, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, "amazon/nova-lite-v1": { id: "amazon/nova-lite-v1", name: "Amazon: Nova Lite 1.0", @@ -6481,8 +6685,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 300000, - maxTokens: 5120, - } satisfies Model<"openai-completions">, + maxOutput: 5120, + }, "amazon/nova-micro-v1": { id: "amazon/nova-micro-v1", name: "Amazon: Nova Micro 1.0", @@ -6492,14 +6696,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.035, + input: 0.04, output: 0.14, cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 5120, - } satisfies Model<"openai-completions">, + maxOutput: 5120, + }, "amazon/nova-premier-v1": { id: "amazon/nova-premier-v1", name: "Amazon: Nova Premier 1.0", @@ -6511,12 +6715,12 @@ export const MODELS = { cost: { input: 2.5, output: 12.5, - cacheRead: 0.625, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 32000, - } satisfies Model<"openai-completions">, + maxOutput: 32000, + }, "amazon/nova-pro-v1": { id: "amazon/nova-pro-v1", name: "Amazon: Nova Pro 1.0", @@ -6526,14 +6730,31 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.7999999999999999, - output: 3.1999999999999997, + input: 0.8, + output: 3.2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 300000, - maxTokens: 5120, - } satisfies Model<"openai-completions">, + maxOutput: 5120, + }, + "anthracite-org/magnum-v4-72b": { + id: "anthracite-org/magnum-v4-72b", + name: "Magnum v4 72B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 3, + output: 5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16384, + maxOutput: 2048, + }, "anthropic/claude-3-haiku": { id: "anthropic/claude-3-haiku", name: "Anthropic: Claude 3 Haiku", @@ -6545,12 +6766,12 @@ export const MODELS = { cost: { input: 0.25, output: 1.25, - cacheRead: 0.03, - cacheWrite: 0.3, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "anthropic/claude-3.5-haiku": { id: "anthropic/claude-3.5-haiku", name: "Anthropic: Claude 3.5 Haiku", @@ -6560,14 +6781,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.7999999999999999, + input: 0.8, output: 4, - cacheRead: 0.08, - cacheWrite: 1, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "anthropic/claude-3.5-sonnet": { id: "anthropic/claude-3.5-sonnet", name: "Anthropic: Claude 3.5 Sonnet", @@ -6579,29 +6800,29 @@ export const MODELS = { cost: { input: 6, output: 30, - cacheRead: 0.6, - cacheWrite: 7.5, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "anthropic/claude-3.7-sonnet": { id: "anthropic/claude-3.7-sonnet", name: "Anthropic: Claude 3.7 Sonnet", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 3, output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-3.7-sonnet:thinking": { id: "anthropic/claude-3.7-sonnet:thinking", name: "Anthropic: Claude 3.7 Sonnet (thinking)", @@ -6613,148 +6834,199 @@ export const MODELS = { cost: { input: 3, output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Anthropic: Claude Haiku 4.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1, output: 5, - cacheRead: 0.09999999999999999, - cacheWrite: 1.25, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-opus-4": { id: "anthropic/claude-opus-4", name: "Anthropic: Claude Opus 4", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 15, output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"openai-completions">, + maxOutput: 32000, + }, "anthropic/claude-opus-4.1": { id: "anthropic/claude-opus-4.1", name: "Anthropic: Claude Opus 4.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 15, output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"openai-completions">, + maxOutput: 32000, + }, "anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Anthropic: Claude Opus 4.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 5, output: 25, - cacheRead: 0.5, - cacheWrite: 6.25, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-opus-4.6": { id: "anthropic/claude-opus-4.6", name: "Anthropic: Claude Opus 4.6", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 5, output: 25, - cacheRead: 0.5, - cacheWrite: 6.25, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "anthropic/claude-sonnet-4": { id: "anthropic/claude-sonnet-4", name: "Anthropic: Claude Sonnet 4", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 3, output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-sonnet-4.5": { id: "anthropic/claude-sonnet-4.5", name: "Anthropic: Claude Sonnet 4.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 3, output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "anthropic/claude-sonnet-4.6": { id: "anthropic/claude-sonnet-4.6", name: "Anthropic: Claude Sonnet 4.6", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 3, output: 15, - cacheRead: 0.3, - cacheWrite: 3.75, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, + "arcee-ai/coder-large": { + id: "arcee-ai/coder-large", + name: "Arcee AI: Coder Large", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.5, + output: 0.8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "arcee-ai/maestro-reasoning": { + id: "arcee-ai/maestro-reasoning", + name: "Arcee AI: Maestro Reasoning", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.9, + output: 3.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 32000, + }, + "arcee-ai/spotlight": { + id: "arcee-ai/spotlight", + name: "Arcee AI: Spotlight", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.18, + output: 0.18, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 65537, + }, "arcee-ai/trinity-large-preview:free": { id: "arcee-ai/trinity-large-preview:free", name: "Arcee AI: Trinity Large Preview (free)", @@ -6770,32 +7042,32 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "arcee-ai/trinity-mini": { id: "arcee-ai/trinity-mini", name: "Arcee AI: Trinity Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.045, + input: 0.05, output: 0.15, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, "arcee-ai/trinity-mini:free": { id: "arcee-ai/trinity-mini:free", name: "Arcee AI: Trinity Mini (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -6804,8 +7076,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "arcee-ai/virtuoso-large": { id: "arcee-ai/virtuoso-large", name: "Arcee AI: Virtuoso Large", @@ -6821,25 +7093,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 64000, - } satisfies Model<"openai-completions">, - "auto": { - id: "auto", - name: "Auto", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text", "image"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 2000000, - maxTokens: 30000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "baidu/ernie-4.5-21b-a3b": { id: "baidu/ernie-4.5-21b-a3b", name: "Baidu: ERNIE 4.5 21B A3B", @@ -6855,15 +7110,49 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 120000, - maxTokens: 8000, - } satisfies Model<"openai-completions">, + maxOutput: 8000, + }, + "baidu/ernie-4.5-21b-a3b-thinking": { + id: "baidu/ernie-4.5-21b-a3b-thinking", + name: "Baidu: ERNIE 4.5 21B A3B Thinking", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.07, + output: 0.28, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 65536, + }, + "baidu/ernie-4.5-300b-a47b": { + id: "baidu/ernie-4.5-300b-a47b", + name: "Baidu: ERNIE 4.5 300B A47B ", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.28, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 123000, + maxOutput: 12000, + }, "baidu/ernie-4.5-vl-28b-a3b": { id: "baidu/ernie-4.5-vl-28b-a3b", name: "Baidu: ERNIE 4.5 VL 28B A3B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.14, @@ -6872,15 +7161,32 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 30000, - maxTokens: 8000, - } satisfies Model<"openai-completions">, + maxOutput: 8000, + }, + "baidu/ernie-4.5-vl-424b-a47b": { + id: "baidu/ernie-4.5-vl-424b-a47b", + name: "Baidu: ERNIE 4.5 VL 424B A47B ", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.42, + output: 1.25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 123000, + maxOutput: 16000, + }, "bytedance-seed/seed-1.6": { id: "bytedance-seed/seed-1.6", name: "ByteDance Seed: Seed 1.6", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.25, @@ -6889,42 +7195,110 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "bytedance-seed/seed-1.6-flash": { id: "bytedance-seed/seed-1.6-flash", name: "ByteDance Seed: Seed 1.6 Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.075, + input: 0.08, output: 0.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, + "bytedance-seed/seed-2.0-lite": { + id: "bytedance-seed/seed-2.0-lite", + name: "ByteDance Seed: Seed-2.0-Lite", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.25, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 131072, + }, "bytedance-seed/seed-2.0-mini": { id: "bytedance-seed/seed-2.0-mini", name: "ByteDance Seed: Seed-2.0-Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, + input: 0.1, + output: 0.4, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, + "bytedance/ui-tars-1.5-7b": { + id: "bytedance/ui-tars-1.5-7b", + name: "ByteDance: UI-TARS 7B ", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.1, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 2048, + }, + "cognitivecomputations/dolphin-mistral-24b-venice-edition:free": { + id: "cognitivecomputations/dolphin-mistral-24b-venice-edition:free", + name: "Venice: Uncensored (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "cohere/command-a": { + id: "cohere/command-a", + name: "Cohere: Command A", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxOutput: 8192, + }, "cohere/command-r-08-2024": { id: "cohere/command-r-08-2024", name: "Cohere: Command R (08-2024)", @@ -6940,8 +7314,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"openai-completions">, + maxOutput: 4000, + }, "cohere/command-r-plus-08-2024": { id: "cohere/command-r-plus-08-2024", name: "Cohere: Command R+ (08-2024)", @@ -6957,8 +7331,42 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"openai-completions">, + maxOutput: 4000, + }, + "cohere/command-r7b-12-2024": { + id: "cohere/command-r7b-12-2024", + name: "Cohere: Command R7B (12-2024)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.04, + output: 0.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 4000, + }, + "deepcogito/cogito-v2.1-671b": { + id: "deepcogito/cogito-v2.1-671b", + name: "Deep Cogito: Cogito v2.1 671B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1.25, + output: 1.25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "deepseek/deepseek-chat": { id: "deepseek/deepseek-chat", name: "DeepSeek: DeepSeek V3", @@ -6969,37 +7377,37 @@ export const MODELS = { input: ["text"], cost: { input: 0.32, - output: 0.8899999999999999, + output: 0.89, cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 163840, - } satisfies Model<"openai-completions">, + maxOutput: 163840, + }, "deepseek/deepseek-chat-v3-0324": { id: "deepseek/deepseek-chat-v3-0324", name: "DeepSeek: DeepSeek V3 0324", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.77, - cacheRead: 0.13, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 163840, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "deepseek/deepseek-chat-v3.1": { id: "deepseek/deepseek-chat-v3.1", name: "DeepSeek: DeepSeek V3.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.15, @@ -7008,15 +7416,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 7168, - } satisfies Model<"openai-completions">, + maxOutput: 7168, + }, "deepseek/deepseek-r1": { id: "deepseek/deepseek-r1", name: "DeepSeek: R1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.7, @@ -7025,83 +7433,100 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 64000, - maxTokens: 16000, - } satisfies Model<"openai-completions">, + maxOutput: 16000, + }, "deepseek/deepseek-r1-0528": { id: "deepseek/deepseek-r1-0528", name: "DeepSeek: R1 0528", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.44999999999999996, - output: 2.1500000000000004, - cacheRead: 0.22499999999999998, + input: 0.45, + output: 2.15, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "deepseek/deepseek-r1-distill-llama-70b": { + id: "deepseek/deepseek-r1-distill-llama-70b", + name: "DeepSeek: R1 Distill Llama 70B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.7, + output: 0.8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "deepseek/deepseek-r1-distill-qwen-32b": { + id: "deepseek/deepseek-r1-distill-qwen-32b", + name: "DeepSeek: R1 Distill Qwen 32B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.29, + output: 0.29, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 32768, + }, "deepseek/deepseek-v3.1-terminus": { id: "deepseek/deepseek-v3.1-terminus", name: "DeepSeek: DeepSeek V3.1 Terminus", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.21, - output: 0.7899999999999999, - cacheRead: 0.1300000002, + output: 0.78, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 4096, - } satisfies Model<"openai-completions">, - "deepseek/deepseek-v3.1-terminus:exacto": { - id: "deepseek/deepseek-v3.1-terminus:exacto", - name: "DeepSeek: DeepSeek V3.1 Terminus (exacto)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0.21, - output: 0.7899999999999999, - cacheRead: 0.16799999999999998, - cacheWrite: 0, - }, - contextWindow: 163840, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "deepseek/deepseek-v3.2": { id: "deepseek/deepseek-v3.2", name: "DeepSeek: DeepSeek V3.2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.25, - output: 0.39999999999999997, + input: 0.26, + output: 0.38, cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "deepseek/deepseek-v3.2-exp": { id: "deepseek/deepseek-v3.2-exp", name: "DeepSeek: DeepSeek V3.2 Exp", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.27, @@ -7110,8 +7535,42 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "deepseek/deepseek-v3.2-speciale": { + id: "deepseek/deepseek-v3.2-speciale", + name: "DeepSeek: DeepSeek V3.2 Speciale", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.4, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxOutput: 163840, + }, + "eleutherai/llemma_7b": { + id: "eleutherai/llemma_7b", + name: "EleutherAI: Llemma 7b", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.8, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 4096, + maxOutput: 4096, + }, "essentialai/rnj-1-instruct": { id: "essentialai/rnj-1-instruct", name: "EssentialAI: Rnj 1 Instruct", @@ -7127,8 +7586,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "google/gemini-2.0-flash-001": { id: "google/gemini-2.0-flash-001", name: "Google: Gemini 2.0 Flash", @@ -7138,14 +7597,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.024999999999999998, - cacheWrite: 0.08333333333333334, + input: 0.1, + output: 0.4, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "google/gemini-2.0-flash-lite-001": { id: "google/gemini-2.0-flash-lite-001", name: "Google: Gemini 2.0 Flash Lite", @@ -7155,201 +7614,320 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.075, + input: 0.08, output: 0.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "google/gemini-2.5-flash": { id: "google/gemini-2.5-flash", name: "Google: Gemini 2.5 Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.3, output: 2.5, - cacheRead: 0.03, - cacheWrite: 0.08333333333333334, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65535, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, + "google/gemini-2.5-flash-image": { + id: "google/gemini-2.5-flash-image", + name: "Google: Nano Banana (Gemini 2.5 Flash Image)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.3, + output: 2.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 32768, + }, "google/gemini-2.5-flash-lite": { id: "google/gemini-2.5-flash-lite", name: "Google: Gemini 2.5 Flash Lite", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.01, - cacheWrite: 0.08333333333333334, + input: 0.1, + output: 0.4, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65535, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, "google/gemini-2.5-flash-lite-preview-09-2025": { id: "google/gemini-2.5-flash-lite-preview-09-2025", name: "Google: Gemini 2.5 Flash Lite Preview 09-2025", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.01, - cacheWrite: 0.08333333333333334, + input: 0.1, + output: 0.4, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "google/gemini-2.5-pro": { id: "google/gemini-2.5-pro", name: "Google: Gemini 2.5 Pro", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "google/gemini-2.5-pro-preview": { id: "google/gemini-2.5-pro-preview", name: "Google: Gemini 2.5 Pro Preview 06-05", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "google/gemini-2.5-pro-preview-05-06": { id: "google/gemini-2.5-pro-preview-05-06", name: "Google: Gemini 2.5 Pro Preview 05-06", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65535, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, "google/gemini-3-flash-preview": { id: "google/gemini-3-flash-preview", name: "Google: Gemini 3 Flash Preview", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 3, - cacheRead: 0.049999999999999996, - cacheWrite: 0.08333333333333334, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "google/gemini-3-pro-image-preview": { + id: "google/gemini-3-pro-image-preview", + name: "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 12, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 32768, + }, "google/gemini-3-pro-preview": { id: "google/gemini-3-pro-preview", name: "Google: Gemini 3 Pro Preview", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 2, output: 12, - cacheRead: 0.19999999999999998, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "google/gemini-3.1-flash-image-preview": { + id: "google/gemini-3.1-flash-image-preview", + name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.5, + output: 3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 65536, + }, "google/gemini-3.1-flash-lite-preview": { id: "google/gemini-3.1-flash-lite-preview", name: "Google: Gemini 3.1 Flash Lite Preview", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.25, output: 1.5, - cacheRead: 0.024999999999999998, - cacheWrite: 0.08333333333333334, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "google/gemini-3.1-pro-preview": { id: "google/gemini-3.1-pro-preview", name: "Google: Gemini 3.1 Pro Preview", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 2, output: 12, - cacheRead: 0.19999999999999998, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "google/gemini-3.1-pro-preview-customtools": { id: "google/gemini-3.1-pro-preview-customtools", name: "Google: Gemini 3.1 Pro Preview Custom Tools", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 2, output: 12, - cacheRead: 0.19999999999999998, - cacheWrite: 0.375, + cacheRead: 0, + cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "google/gemma-2-27b-it": { + id: "google/gemma-2-27b-it", + name: "Google: Gemma 2 27B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.65, + output: 0.65, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 2048, + }, + "google/gemma-2-9b-it": { + id: "google/gemma-2-9b-it", + name: "Google: Gemma 2 9B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.09, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 8192, + }, + "google/gemma-3-12b-it": { + id: "google/gemma-3-12b-it", + name: "Google: Gemma 3 12B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.04, + output: 0.13, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "google/gemma-3-12b-it:free": { + id: "google/gemma-3-12b-it:free", + name: "Google: Gemma 3 12B (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 8192, + }, "google/gemma-3-27b-it": { id: "google/gemma-3-27b-it", name: "Google: Gemma 3 27B", @@ -7359,14 +7937,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.04, - output: 0.15, - cacheRead: 0.02, + input: 0.08, + output: 0.16, + cacheRead: 0, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 16384, + }, "google/gemma-3-27b-it:free": { id: "google/gemma-3-27b-it:free", name: "Google: Gemma 3 27B (free)", @@ -7382,8 +7960,127 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, + "google/gemma-3-4b-it": { + id: "google/gemma-3-4b-it", + name: "Google: Gemma 3 4B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.04, + output: 0.08, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "google/gemma-3-4b-it:free": { + id: "google/gemma-3-4b-it:free", + name: "Google: Gemma 3 4B (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 8192, + }, + "google/gemma-3n-e2b-it:free": { + id: "google/gemma-3n-e2b-it:free", + name: "Google: Gemma 3n 2B (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 2048, + }, + "google/gemma-3n-e4b-it": { + id: "google/gemma-3n-e4b-it", + name: "Google: Gemma 3n 4B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.02, + output: 0.04, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "google/gemma-3n-e4b-it:free": { + id: "google/gemma-3n-e4b-it:free", + name: "Google: Gemma 3n 4B (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 2048, + }, + "gryphe/mythomax-l2-13b": { + id: "gryphe/mythomax-l2-13b", + name: "MythoMax 13B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.06, + output: 0.06, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 4096, + maxOutput: 4096, + }, + "ibm-granite/granite-4.0-h-micro": { + id: "ibm-granite/granite-4.0-h-micro", + name: "IBM: Granite 4.0 Micro", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.02, + output: 0.11, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131000, + maxOutput: 16384, + }, "inception/mercury": { id: "inception/mercury", name: "Inception: Mercury", @@ -7395,29 +8092,29 @@ export const MODELS = { cost: { input: 0.25, output: 0.75, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 32000, - } satisfies Model<"openai-completions">, + maxOutput: 32000, + }, "inception/mercury-2": { id: "inception/mercury-2", name: "Inception: Mercury 2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.25, output: 0.75, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 50000, - } satisfies Model<"openai-completions">, + maxOutput: 50000, + }, "inception/mercury-coder": { id: "inception/mercury-coder", name: "Inception: Mercury Coder", @@ -7429,12 +8126,46 @@ export const MODELS = { cost: { input: 0.25, output: 0.75, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 32000, - } satisfies Model<"openai-completions">, + maxOutput: 32000, + }, + "inflection/inflection-3-pi": { + id: "inflection/inflection-3-pi", + name: "Inflection: Inflection 3 Pi", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8000, + maxOutput: 1024, + }, + "inflection/inflection-3-productivity": { + id: "inflection/inflection-3-productivity", + name: "Inflection: Inflection 3 Productivity", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8000, + maxOutput: 1024, + }, "kwaipilot/kat-coder-pro": { id: "kwaipilot/kat-coder-pro", name: "Kwaipilot: KAT-Coder-Pro V1", @@ -7444,14 +8175,116 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.207, - output: 0.828, - cacheRead: 0.0414, + input: 0.21, + output: 0.83, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, + "liquid/lfm-2-24b-a2b": { + id: "liquid/lfm-2-24b-a2b", + name: "LiquidAI: LFM2-24B-A2B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.12, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "liquid/lfm-2.2-6b": { + id: "liquid/lfm-2.2-6b", + name: "LiquidAI: LFM2-2.6B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.01, + output: 0.02, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "liquid/lfm-2.5-1.2b-instruct:free": { + id: "liquid/lfm-2.5-1.2b-instruct:free", + name: "LiquidAI: LFM2.5-1.2B-Instruct (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "liquid/lfm-2.5-1.2b-thinking:free": { + id: "liquid/lfm-2.5-1.2b-thinking:free", + name: "LiquidAI: LFM2.5-1.2B-Thinking (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "liquid/lfm2-8b-a1b": { + id: "liquid/lfm2-8b-a1b", + name: "LiquidAI: LFM2-8B-A1B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.01, + output: 0.02, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "mancer/weaver": { + id: "mancer/weaver", + name: "Mancer: Weaver (alpha)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.75, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8000, + maxOutput: 2000, + }, "meituan/longcat-flash-chat": { id: "meituan/longcat-flash-chat", name: "Meituan: LongCat Flash Chat", @@ -7461,14 +8294,31 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, - output: 0.7999999999999999, - cacheRead: 0.19999999999999998, + input: 0.2, + output: 0.8, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, + "meta-llama/llama-3-70b-instruct": { + id: "meta-llama/llama-3-70b-instruct", + name: "Meta: Llama 3 70B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.51, + output: 0.74, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 8000, + }, "meta-llama/llama-3-8b-instruct": { id: "meta-llama/llama-3-8b-instruct", name: "Meta: Llama 3 8B Instruct", @@ -7484,11 +8334,11 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 8192, - maxTokens: 16384, - } satisfies Model<"openai-completions">, - "meta-llama/llama-3.1-405b-instruct": { - id: "meta-llama/llama-3.1-405b-instruct", - name: "Meta: Llama 3.1 405B Instruct", + maxOutput: 16384, + }, + "meta-llama/llama-3.1-405b": { + id: "meta-llama/llama-3.1-405b", + name: "Meta: Llama 3.1 405B (base)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -7500,9 +8350,9 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 131000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + contextWindow: 32768, + maxOutput: 32768, + }, "meta-llama/llama-3.1-70b-instruct": { id: "meta-llama/llama-3.1-70b-instruct", name: "Meta: Llama 3.1 70B Instruct", @@ -7512,14 +8362,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, - output: 0.39999999999999997, + input: 0.4, + output: 0.4, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "meta-llama/llama-3.1-8b-instruct": { id: "meta-llama/llama-3.1-8b-instruct", name: "Meta: Llama 3.1 8B Instruct", @@ -7530,13 +8380,81 @@ export const MODELS = { input: ["text"], cost: { input: 0.02, - output: 0.049999999999999996, + output: 0.05, cacheRead: 0, cacheWrite: 0, }, contextWindow: 16384, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "meta-llama/llama-3.2-11b-vision-instruct": { + id: "meta-llama/llama-3.2-11b-vision-instruct", + name: "Meta: Llama 3.2 11B Vision Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.05, + output: 0.05, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "meta-llama/llama-3.2-1b-instruct": { + id: "meta-llama/llama-3.2-1b-instruct", + name: "Meta: Llama 3.2 1B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 60000, + maxOutput: 16384, + }, + "meta-llama/llama-3.2-3b-instruct": { + id: "meta-llama/llama-3.2-3b-instruct", + name: "Meta: Llama 3.2 3B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.05, + output: 0.34, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 80000, + maxOutput: 16384, + }, + "meta-llama/llama-3.2-3b-instruct:free": { + id: "meta-llama/llama-3.2-3b-instruct:free", + name: "Meta: Llama 3.2 3B Instruct (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, "meta-llama/llama-3.3-70b-instruct": { id: "meta-llama/llama-3.3-70b-instruct", name: "Meta: Llama 3.3 70B Instruct", @@ -7546,14 +8464,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.1, output: 0.32, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "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)", @@ -7568,9 +8486,9 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + contextWindow: 65536, + maxOutput: 16384, + }, "meta-llama/llama-4-maverick": { id: "meta-llama/llama-4-maverick", name: "Meta: Llama 4 Maverick", @@ -7586,8 +8504,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "meta-llama/llama-4-scout": { id: "meta-llama/llama-4-scout", name: "Meta: Llama 4 Scout", @@ -7603,76 +8521,212 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 327680, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "meta-llama/llama-guard-3-8b": { + id: "meta-llama/llama-guard-3-8b", + name: "Llama Guard 3 8B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.02, + output: 0.06, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "meta-llama/llama-guard-4-12b": { + id: "meta-llama/llama-guard-4-12b", + name: "Meta: Llama Guard 4 12B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.18, + output: 0.18, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 163840, + maxOutput: 16384, + }, + "microsoft/phi-4": { + id: "microsoft/phi-4", + name: "Microsoft: Phi 4", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.07, + output: 0.14, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16384, + maxOutput: 16384, + }, + "microsoft/wizardlm-2-8x22b": { + id: "microsoft/wizardlm-2-8x22b", + name: "WizardLM-2 8x22B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.62, + output: 0.62, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65535, + maxOutput: 8000, + }, + "minimax/minimax-01": { + id: "minimax/minimax-01", + name: "MiniMax: MiniMax-01", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 1.1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1000192, + maxOutput: 1000192, + }, "minimax/minimax-m1": { id: "minimax/minimax-m1", name: "MiniMax: MiniMax M1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2.2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 40000, - } satisfies Model<"openai-completions">, + maxOutput: 40000, + }, "minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax: MiniMax M2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.255, + input: 0.26, output: 1, - cacheRead: 0.03, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 196608, - maxTokens: 196608, - } satisfies Model<"openai-completions">, + maxOutput: 196608, + }, + "minimax/minimax-m2-her": { + id: "minimax/minimax-m2-her", + name: "MiniMax: MiniMax M2-her", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 65536, + maxOutput: 2048, + }, "minimax/minimax-m2.1": { id: "minimax/minimax-m2.1", name: "MiniMax: MiniMax M2.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.27, output: 0.95, - cacheRead: 0.0290000007, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 196608, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "minimax/minimax-m2.5": { id: "minimax/minimax-m2.5", name: "MiniMax: MiniMax M2.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.295, + input: 0.2, output: 1.2, - cacheRead: 0.03, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 196608, - maxTokens: 196608, - } satisfies Model<"openai-completions">, + maxOutput: 196608, + }, + "minimax/minimax-m2.5:free": { + id: "minimax/minimax-m2.5:free", + name: "MiniMax: MiniMax M2.5 (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 196608, + maxOutput: 196608, + }, + "minimax/minimax-m2.7": { + id: "minimax/minimax-m2.7", + name: "MiniMax: MiniMax M2.7", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 204800, + maxOutput: 131072, + }, "mistralai/codestral-2508": { id: "mistralai/codestral-2508", name: "Mistral: Codestral 2508", @@ -7683,13 +8737,13 @@ export const MODELS = { input: ["text"], cost: { input: 0.3, - output: 0.8999999999999999, + output: 0.9, cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/devstral-2512": { id: "mistralai/devstral-2512", name: "Mistral: Devstral 2 2512", @@ -7699,14 +8753,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/devstral-medium": { id: "mistralai/devstral-medium", name: "Mistral: Devstral Medium", @@ -7716,14 +8770,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/devstral-small": { id: "mistralai/devstral-small", name: "Mistral: Devstral Small 1.1", @@ -7733,14 +8787,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/ministral-14b-2512": { id: "mistralai/ministral-14b-2512", name: "Mistral: Ministral 3 14B 2512", @@ -7750,14 +8804,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.19999999999999998, - output: 0.19999999999999998, + input: 0.2, + output: 0.2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/ministral-3b-2512": { id: "mistralai/ministral-3b-2512", name: "Mistral: Ministral 3 3B 2512", @@ -7767,14 +8821,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.09999999999999999, + input: 0.1, + output: 0.1, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/ministral-8b-2512": { id: "mistralai/ministral-8b-2512", name: "Mistral: Ministral 3 8B 2512", @@ -7790,8 +8844,25 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "mistralai/mistral-7b-instruct-v0.1": { + id: "mistralai/mistral-7b-instruct-v0.1", + name: "Mistral: Mistral 7B Instruct v0.1", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.11, + output: 0.19, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 2824, + maxOutput: 2824, + }, "mistralai/mistral-large": { id: "mistralai/mistral-large", name: "Mistral Large", @@ -7807,8 +8878,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-large-2407": { id: "mistralai/mistral-large-2407", name: "Mistral Large 2407", @@ -7824,8 +8895,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-large-2411": { id: "mistralai/mistral-large-2411", name: "Mistral Large 2411", @@ -7841,8 +8912,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-large-2512": { id: "mistralai/mistral-large-2512", name: "Mistral: Mistral Large 3 2512", @@ -7858,8 +8929,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-medium-3": { id: "mistralai/mistral-medium-3", name: "Mistral: Mistral Medium 3", @@ -7869,14 +8940,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-medium-3.1": { id: "mistralai/mistral-medium-3.1", name: "Mistral: Mistral Medium 3.1", @@ -7886,14 +8957,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-nemo": { id: "mistralai/mistral-nemo", name: "Mistral: Mistral Nemo", @@ -7909,8 +8980,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-saba": { id: "mistralai/mistral-saba", name: "Mistral: Saba", @@ -7920,14 +8991,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-small-24b-instruct-2501": { id: "mistralai/mistral-small-24b-instruct-2501", name: "Mistral: Mistral Small 3", @@ -7937,14 +9008,48 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.049999999999999996, + input: 0.05, output: 0.08, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "mistralai/mistral-small-2603": { + id: "mistralai/mistral-small-2603", + name: "Mistral: Mistral Small 4", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 16384, + }, + "mistralai/mistral-small-3.1-24b-instruct": { + id: "mistralai/mistral-small-3.1-24b-instruct", + name: "Mistral: Mistral Small 3.1 24B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.35, + output: 0.56, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "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)", @@ -7960,8 +9065,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mistral-small-3.2-24b-instruct": { id: "mistralai/mistral-small-3.2-24b-instruct", name: "Mistral: Mistral Small 3.2 24B", @@ -7971,14 +9076,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.06, - output: 0.18, - cacheRead: 0.03, + input: 0.08, + output: 0.2, + cacheRead: 0, cacheWrite: 0, }, - contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + contextWindow: 128000, + maxOutput: 16384, + }, "mistralai/mistral-small-creative": { id: "mistralai/mistral-small-creative", name: "Mistral: Mistral Small Creative", @@ -7988,14 +9093,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mixtral-8x22b-instruct": { id: "mistralai/mixtral-8x22b-instruct", name: "Mistral: Mixtral 8x22B Instruct", @@ -8011,8 +9116,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 65536, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/mixtral-8x7b-instruct": { id: "mistralai/mixtral-8x7b-instruct", name: "Mistral: Mixtral 8x7B Instruct", @@ -8028,8 +9133,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/pixtral-large-2411": { id: "mistralai/pixtral-large-2411", name: "Mistral: Pixtral Large 2411", @@ -8045,8 +9150,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "mistralai/voxtral-small-24b-2507": { id: "mistralai/voxtral-small-24b-2507", name: "Mistral: Voxtral Small 24B 2507", @@ -8056,14 +9161,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "moonshotai/kimi-k2": { id: "moonshotai/kimi-k2", name: "MoonshotAI: Kimi K2 0711", @@ -8079,8 +9184,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "moonshotai/kimi-k2-0905": { id: "moonshotai/kimi-k2-0905", name: "MoonshotAI: Kimi K2 0905", @@ -8090,31 +9195,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, + input: 0.4, output: 2, - cacheRead: 0.15, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, - "moonshotai/kimi-k2-0905:exacto": { - id: "moonshotai/kimi-k2-0905:exacto", - name: "MoonshotAI: Kimi K2 0905 (exacto)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.6, - output: 2.5, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 16384, + }, "moonshotai/kimi-k2-thinking": { id: "moonshotai/kimi-k2-thinking", name: "MoonshotAI: Kimi K2 Thinking", @@ -8126,29 +9214,63 @@ export const MODELS = { cost: { input: 0.47, output: 2, - cacheRead: 0.14100000000000001, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "moonshotai/kimi-k2.5": { id: "moonshotai/kimi-k2.5", name: "MoonshotAI: Kimi K2.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.41, - output: 2.06, - cacheRead: 0.07, + input: 0.45, + output: 2.2, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, + "morph/morph-v3-fast": { + id: "morph/morph-v3-fast", + name: "Morph: Morph V3 Fast", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.8, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 81920, + maxOutput: 38000, + }, + "morph/morph-v3-large": { + id: "morph/morph-v3-large", + name: "Morph: Morph V3 Large", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.9, + output: 1.9, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 131072, + }, "nex-agi/deepseek-v3.1-nex-n1": { id: "nex-agi/deepseek-v3.1-nex-n1", name: "Nex AGI: DeepSeek V3.1 Nex N1", @@ -8164,8 +9286,110 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 163840, - } satisfies Model<"openai-completions">, + maxOutput: 163840, + }, + "nousresearch/hermes-2-pro-llama-3-8b": { + id: "nousresearch/hermes-2-pro-llama-3-8b", + name: "NousResearch: Hermes 2 Pro - Llama-3 8B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.14, + output: 0.14, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 8192, + }, + "nousresearch/hermes-3-llama-3.1-405b": { + id: "nousresearch/hermes-3-llama-3.1-405b", + name: "Nous: Hermes 3 405B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "nousresearch/hermes-3-llama-3.1-405b:free": { + id: "nousresearch/hermes-3-llama-3.1-405b:free", + name: "Nous: Hermes 3 405B Instruct (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "nousresearch/hermes-3-llama-3.1-70b": { + id: "nousresearch/hermes-3-llama-3.1-70b", + name: "Nous: Hermes 3 70B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "nousresearch/hermes-4-405b": { + id: "nousresearch/hermes-4-405b", + name: "Nous: Hermes 4 405B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "nousresearch/hermes-4-70b": { + id: "nousresearch/hermes-4-70b", + name: "Nous: Hermes 4 70B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.13, + output: 0.4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, "nvidia/llama-3.1-nemotron-70b-instruct": { id: "nvidia/llama-3.1-nemotron-70b-instruct", name: "NVIDIA: Llama 3.1 Nemotron 70B Instruct", @@ -8181,49 +9405,49 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "nvidia/llama-3.3-nemotron-super-49b-v1.5": { id: "nvidia/llama-3.3-nemotron-super-49b-v1.5", name: "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, + input: 0.1, + output: 0.4, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "nvidia/nemotron-3-nano-30b-a3b": { id: "nvidia/nemotron-3-nano-30b-a3b", name: "NVIDIA: Nemotron 3 Nano 30B A3B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.049999999999999996, - output: 0.19999999999999998, + input: 0.05, + output: 0.2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "nvidia/nemotron-3-nano-30b-a3b:free": { id: "nvidia/nemotron-3-nano-30b-a3b:free", name: "NVIDIA: Nemotron 3 Nano 30B A3B (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -8232,15 +9456,66 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "nvidia/nemotron-3-super-120b-a12b": { + id: "nvidia/nemotron-3-super-120b-a12b", + name: "NVIDIA: Nemotron 3 Super", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.1, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 16384, + }, + "nvidia/nemotron-3-super-120b-a12b:free": { + id: "nvidia/nemotron-3-super-120b-a12b:free", + name: "NVIDIA: Nemotron 3 Super (free)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 262144, + }, + "nvidia/nemotron-nano-12b-v2-vl": { + id: "nvidia/nemotron-nano-12b-v2-vl", + name: "NVIDIA: Nemotron Nano 12B 2 VL", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, "nvidia/nemotron-nano-12b-v2-vl:free": { id: "nvidia/nemotron-nano-12b-v2-vl:free", name: "NVIDIA: Nemotron Nano 12B 2 VL (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0, @@ -8249,15 +9524,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "nvidia/nemotron-nano-9b-v2": { id: "nvidia/nemotron-nano-9b-v2", name: "NVIDIA: Nemotron Nano 9B V2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.04, @@ -8266,15 +9541,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "nvidia/nemotron-nano-9b-v2:free": { id: "nvidia/nemotron-nano-9b-v2:free", name: "NVIDIA: Nemotron Nano 9B V2 (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -8283,8 +9558,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-3.5-turbo": { id: "openai/gpt-3.5-turbo", name: "OpenAI: GPT-3.5 Turbo", @@ -8300,8 +9575,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 16385, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-3.5-turbo-0613": { id: "openai/gpt-3.5-turbo-0613", name: "OpenAI: GPT-3.5 Turbo (older v0613)", @@ -8317,8 +9592,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 4095, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-3.5-turbo-16k": { id: "openai/gpt-3.5-turbo-16k", name: "OpenAI: GPT-3.5 Turbo 16k", @@ -8334,8 +9609,25 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 16385, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, + "openai/gpt-3.5-turbo-instruct": { + id: "openai/gpt-3.5-turbo-instruct", + name: "OpenAI: GPT-3.5 Turbo Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1.5, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 4095, + maxOutput: 4096, + }, "openai/gpt-4": { id: "openai/gpt-4", name: "OpenAI: GPT-4", @@ -8351,8 +9643,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 8191, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4-0314": { id: "openai/gpt-4-0314", name: "OpenAI: GPT-4 (older v0314)", @@ -8368,8 +9660,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 8191, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4-1106-preview": { id: "openai/gpt-4-1106-preview", name: "OpenAI: GPT-4 Turbo (older v1106)", @@ -8385,8 +9677,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4-turbo": { id: "openai/gpt-4-turbo", name: "OpenAI: GPT-4 Turbo", @@ -8402,8 +9694,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4-turbo-preview": { id: "openai/gpt-4-turbo-preview", name: "OpenAI: GPT-4 Turbo Preview", @@ -8419,8 +9711,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4.1": { id: "openai/gpt-4.1", name: "OpenAI: GPT-4.1", @@ -8432,12 +9724,12 @@ export const MODELS = { cost: { input: 2, output: 8, - cacheRead: 0.5, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "openai/gpt-4.1-mini": { id: "openai/gpt-4.1-mini", name: "OpenAI: GPT-4.1 Mini", @@ -8447,14 +9739,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.39999999999999997, - output: 1.5999999999999999, - cacheRead: 0.09999999999999999, + input: 0.4, + output: 1.6, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "openai/gpt-4.1-nano": { id: "openai/gpt-4.1-nano", name: "OpenAI: GPT-4.1 Nano", @@ -8464,14 +9756,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, - cacheRead: 0.024999999999999998, + input: 0.1, + output: 0.4, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1047576, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "openai/gpt-4o": { id: "openai/gpt-4o", name: "OpenAI: GPT-4o", @@ -8483,12 +9775,12 @@ export const MODELS = { cost: { input: 2.5, output: 10, - cacheRead: 1.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-4o-2024-05-13": { id: "openai/gpt-4o-2024-05-13", name: "OpenAI: GPT-4o (2024-05-13)", @@ -8504,8 +9796,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 4096, + }, "openai/gpt-4o-2024-08-06": { id: "openai/gpt-4o-2024-08-06", name: "OpenAI: GPT-4o (2024-08-06)", @@ -8517,12 +9809,12 @@ export const MODELS = { cost: { input: 2.5, output: 10, - cacheRead: 1.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-4o-2024-11-20": { id: "openai/gpt-4o-2024-11-20", name: "OpenAI: GPT-4o (2024-11-20)", @@ -8534,12 +9826,12 @@ export const MODELS = { cost: { input: 2.5, output: 10, - cacheRead: 1.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-4o-audio-preview": { id: "openai/gpt-4o-audio-preview", name: "OpenAI: GPT-4o Audio", @@ -8555,8 +9847,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-4o-mini": { id: "openai/gpt-4o-mini", name: "OpenAI: GPT-4o-mini", @@ -8568,12 +9860,12 @@ export const MODELS = { cost: { input: 0.15, output: 0.6, - cacheRead: 0.075, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-4o-mini-2024-07-18": { id: "openai/gpt-4o-mini-2024-07-18", name: "OpenAI: GPT-4o-mini (2024-07-18)", @@ -8585,12 +9877,46 @@ export const MODELS = { cost: { input: 0.15, output: 0.6, - cacheRead: 0.075, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "openai/gpt-4o-mini-search-preview": { + id: "openai/gpt-4o-mini-search-preview", + name: "OpenAI: GPT-4o-mini Search Preview", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.15, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, + "openai/gpt-4o-search-preview": { + id: "openai/gpt-4o-search-preview", + name: "OpenAI: GPT-4o Search Preview", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "openai/gpt-4o:extended": { id: "openai/gpt-4o:extended", name: "OpenAI: GPT-4o (extended)", @@ -8606,117 +9932,134 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, + maxOutput: 64000, + }, "openai/gpt-5": { id: "openai/gpt-5", name: "OpenAI: GPT-5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, + "openai/gpt-5-chat": { + id: "openai/gpt-5-chat", + name: "OpenAI: GPT-5 Chat", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1.25, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "openai/gpt-5-codex": { id: "openai/gpt-5-codex", name: "OpenAI: GPT-5 Codex", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5-image": { id: "openai/gpt-5-image", name: "OpenAI: GPT-5 Image", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 10, output: 10, - cacheRead: 1.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5-image-mini": { id: "openai/gpt-5-image-mini", name: "OpenAI: GPT-5 Image Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 2, - cacheRead: 0.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5-mini": { id: "openai/gpt-5-mini", name: "OpenAI: GPT-5 Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.25, output: 2, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5-nano": { id: "openai/gpt-5-nano", name: "OpenAI: GPT-5 Nano", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.049999999999999996, - output: 0.39999999999999997, - cacheRead: 0.005, + input: 0.05, + output: 0.4, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5-pro": { id: "openai/gpt-5-pro", name: "OpenAI: GPT-5 Pro", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 15, @@ -8725,25 +10068,25 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.1": { id: "openai/gpt-5.1", name: "OpenAI: GPT-5.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.1-chat": { id: "openai/gpt-5.1-chat", name: "OpenAI: GPT-5.1 Chat", @@ -8755,80 +10098,80 @@ export const MODELS = { cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-5.1-codex": { id: "openai/gpt-5.1-codex", name: "OpenAI: GPT-5.1-Codex", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.1-codex-max": { id: "openai/gpt-5.1-codex-max", name: "OpenAI: GPT-5.1-Codex-Max", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.1-codex-mini": { id: "openai/gpt-5.1-codex-mini", name: "OpenAI: GPT-5.1-Codex-Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.25, output: 2, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/gpt-5.2": { id: "openai/gpt-5.2", name: "OpenAI: GPT-5.2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.75, output: 14, - cacheRead: 0.175, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.2-chat": { id: "openai/gpt-5.2-chat", name: "OpenAI: GPT-5.2 Chat", @@ -8840,36 +10183,36 @@ export const MODELS = { cost: { input: 1.75, output: 14, - cacheRead: 0.175, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-5.2-codex": { id: "openai/gpt-5.2-codex", name: "OpenAI: GPT-5.2-Codex", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.75, output: 14, - cacheRead: 0.175, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.2-pro": { id: "openai/gpt-5.2-pro", name: "OpenAI: GPT-5.2 Pro", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 21, @@ -8878,8 +10221,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.3-chat": { id: "openai/gpt-5.3-chat", name: "OpenAI: GPT-5.3 Chat", @@ -8891,53 +10234,87 @@ export const MODELS = { cost: { input: 1.75, output: 14, - cacheRead: 0.175, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-5.3-codex": { id: "openai/gpt-5.3-codex", name: "OpenAI: GPT-5.3-Codex", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 1.75, output: 14, - cacheRead: 0.175, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "openai/gpt-5.4": { id: "openai/gpt-5.4", name: "OpenAI: GPT-5.4", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 15, - cacheRead: 0.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1050000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, + "openai/gpt-5.4-mini": { + id: "openai/gpt-5.4-mini", + name: "OpenAI: GPT-5.4 Mini", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.75, + output: 4.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxOutput: 128000, + }, + "openai/gpt-5.4-nano": { + id: "openai/gpt-5.4-nano", + name: "OpenAI: GPT-5.4 Nano", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 1.25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxOutput: 128000, + }, "openai/gpt-5.4-pro": { id: "openai/gpt-5.4-pro", name: "OpenAI: GPT-5.4 Pro", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 30, @@ -8946,49 +10323,66 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1050000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, + "openai/gpt-audio": { + id: "openai/gpt-audio", + name: "OpenAI: GPT Audio", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, + "openai/gpt-audio-mini": { + id: "openai/gpt-audio-mini", + name: "OpenAI: GPT Audio Mini", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.6, + output: 2.4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "OpenAI: gpt-oss-120b", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.039, + input: 0.04, output: 0.19, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, - "openai/gpt-oss-120b:exacto": { - id: "openai/gpt-oss-120b:exacto", - name: "OpenAI: gpt-oss-120b (exacto)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0.039, - output: 0.19, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-oss-120b:free": { id: "openai/gpt-oss-120b:free", name: "OpenAI: gpt-oss-120b (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -8997,15 +10391,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, "openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "OpenAI: gpt-oss-20b", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.03, @@ -9014,15 +10408,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "openai/gpt-oss-20b:free": { id: "openai/gpt-oss-20b:free", name: "OpenAI: gpt-oss-20b (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -9031,42 +10425,59 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, "openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "OpenAI: gpt-oss-safeguard-20b", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.075, + input: 0.08, output: 0.3, - cacheRead: 0.037, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "openai/o1": { id: "openai/o1", name: "OpenAI: o1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, input: ["text", "image"], cost: { input: 15, output: 60, - cacheRead: 7.5, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, + "openai/o1-pro": { + id: "openai/o1-pro", + name: "OpenAI: o1-pro", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 150, + output: 600, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxOutput: 100000, + }, "openai/o3": { id: "openai/o3", name: "OpenAI: o3", @@ -9078,12 +10489,12 @@ export const MODELS = { cost: { input: 2, output: 8, - cacheRead: 0.5, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o3-deep-research": { id: "openai/o3-deep-research", name: "OpenAI: o3 Deep Research", @@ -9095,46 +10506,46 @@ export const MODELS = { cost: { input: 10, output: 40, - cacheRead: 2.5, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o3-mini": { id: "openai/o3-mini", name: "OpenAI: o3 Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, - cacheRead: 0.55, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o3-mini-high": { id: "openai/o3-mini-high", name: "OpenAI: o3 Mini High", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, - cacheRead: 0.55, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o3-pro": { id: "openai/o3-pro", name: "OpenAI: o3 Pro", @@ -9150,8 +10561,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o4-mini": { id: "openai/o4-mini", name: "OpenAI: o4 Mini", @@ -9163,12 +10574,12 @@ export const MODELS = { cost: { input: 1.1, output: 4.4, - cacheRead: 0.275, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o4-mini-deep-research": { id: "openai/o4-mini-deep-research", name: "OpenAI: o4 Mini Deep Research", @@ -9180,12 +10591,12 @@ export const MODELS = { cost: { input: 2, output: 8, - cacheRead: 0.5, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openai/o4-mini-high": { id: "openai/o4-mini-high", name: "OpenAI: o4 Mini High", @@ -9197,19 +10608,19 @@ export const MODELS = { cost: { input: 1.1, output: 4.4, - cacheRead: 0.275, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 100000, - } satisfies Model<"openai-completions">, + maxOutput: 100000, + }, "openrouter/auto": { id: "openrouter/auto", name: "Auto Router", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: -1000000, @@ -9218,15 +10629,32 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 2000000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "openrouter/bodybuilder": { + id: "openrouter/bodybuilder", + name: "Body Builder (beta)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: -1000000, + output: -1000000, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "openrouter/free": { id: "openrouter/free", name: "Free Models Router", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0, @@ -9235,25 +10663,110 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 200000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "perplexity/sonar": { + id: "perplexity/sonar", + name: "Perplexity: Sonar", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 127072, + maxOutput: 16384, + }, + "perplexity/sonar-deep-research": { + id: "perplexity/sonar-deep-research", + name: "Perplexity: Sonar Deep Research", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2, + output: 8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, + "perplexity/sonar-pro": { + id: "perplexity/sonar-pro", + name: "Perplexity: Sonar Pro", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxOutput: 8000, + }, + "perplexity/sonar-pro-search": { + id: "perplexity/sonar-pro-search", + name: "Perplexity: Sonar Pro Search", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 3, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 200000, + maxOutput: 8000, + }, + "perplexity/sonar-reasoning-pro": { + id: "perplexity/sonar-reasoning-pro", + name: "Perplexity: Sonar Reasoning Pro", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, "prime-intellect/intellect-3": { id: "prime-intellect/intellect-3", name: "Prime Intellect: INTELLECT-3", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 1.1, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, "qwen/qwen-2.5-72b-instruct": { id: "qwen/qwen-2.5-72b-instruct", name: "Qwen2.5 72B Instruct", @@ -9269,8 +10782,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen-2.5-7b-instruct": { id: "qwen/qwen-2.5-7b-instruct", name: "Qwen: Qwen2.5 7B Instruct", @@ -9281,13 +10794,47 @@ export const MODELS = { input: ["text"], cost: { input: 0.04, - output: 0.09999999999999999, + output: 0.1, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "qwen/qwen-2.5-coder-32b-instruct": { + id: "qwen/qwen-2.5-coder-32b-instruct", + name: "Qwen2.5 Coder 32B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.66, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "qwen/qwen-2.5-vl-7b-instruct": { + id: "qwen/qwen-2.5-vl-7b-instruct", + name: "Qwen: Qwen2.5-VL 7B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, "qwen/qwen-max": { id: "qwen/qwen-max", name: "Qwen: Qwen-Max ", @@ -9299,12 +10846,12 @@ export const MODELS = { cost: { input: 1.04, output: 4.16, - cacheRead: 0.20800000000000002, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "qwen/qwen-plus": { id: "qwen/qwen-plus", name: "Qwen: Qwen-Plus", @@ -9314,14 +10861,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, - output: 1.2, - cacheRead: 0.08, + input: 0.26, + output: 0.78, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen-plus-2025-07-28": { id: "qwen/qwen-plus-2025-07-28", name: "Qwen: Qwen Plus 0728", @@ -9337,8 +10884,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen-plus-2025-07-28:thinking": { id: "qwen/qwen-plus-2025-07-28:thinking", name: "Qwen: Qwen Plus 0728 (thinking)", @@ -9354,8 +10901,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen-turbo": { id: "qwen/qwen-turbo", name: "Qwen: Qwen-Turbo", @@ -9365,14 +10912,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.0325, + input: 0.03, output: 0.13, - cacheRead: 0.006500000000000001, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "qwen/qwen-vl-max": { id: "qwen/qwen-vl-max", name: "Qwen: Qwen VL Max", @@ -9382,21 +10929,89 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.7999999999999999, - output: 3.1999999999999997, + input: 0.52, + output: 2.08, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, + "qwen/qwen-vl-plus": { + id: "qwen/qwen-vl-plus", + name: "Qwen: Qwen VL Plus", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.14, + output: 0.41, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 8192, + }, + "qwen/qwen2.5-coder-7b-instruct": { + id: "qwen/qwen2.5-coder-7b-instruct", + name: "Qwen: Qwen2.5 Coder 7B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.09, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 16384, + }, + "qwen/qwen2.5-vl-32b-instruct": { + id: "qwen/qwen2.5-vl-32b-instruct", + name: "Qwen: Qwen2.5 VL 32B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.2, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutput: 16384, + }, + "qwen/qwen2.5-vl-72b-instruct": { + id: "qwen/qwen2.5-vl-72b-instruct", + name: "Qwen: Qwen2.5 VL 72B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.8, + output: 0.8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 32768, + }, "qwen/qwen3-14b": { id: "qwen/qwen3-14b", name: "Qwen: Qwen3 14B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.06, @@ -9405,42 +11020,42 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 40960, - maxTokens: 40960, - } satisfies Model<"openai-completions">, + maxOutput: 40960, + }, "qwen/qwen3-235b-a22b": { id: "qwen/qwen3-235b-a22b", name: "Qwen: Qwen3 235B A22B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.45499999999999996, - output: 1.8199999999999998, + input: 0.45, + output: 1.82, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "qwen/qwen3-235b-a22b-2507": { id: "qwen/qwen3-235b-a22b-2507", name: "Qwen: Qwen3 235B A22B Instruct 2507", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.071, - output: 0.09999999999999999, + input: 0.07, + output: 0.1, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-235b-a22b-thinking-2507": { id: "qwen/qwen3-235b-a22b-thinking-2507", name: "Qwen: Qwen3 235B A22B Thinking 2507", @@ -9450,21 +11065,21 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.11, - output: 0.6, - cacheRead: 0.055, + input: 0.15, + output: 1.5, + cacheRead: 0, cacheWrite: 0, }, - contextWindow: 262144, - maxTokens: 262144, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 16384, + }, "qwen/qwen3-30b-a3b": { id: "qwen/qwen3-30b-a3b", name: "Qwen: Qwen3 30B A3B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.08, @@ -9473,8 +11088,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 40960, - maxTokens: 40960, - } satisfies Model<"openai-completions">, + maxOutput: 40960, + }, "qwen/qwen3-30b-a3b-instruct-2507": { id: "qwen/qwen3-30b-a3b-instruct-2507", name: "Qwen: Qwen3 30B A3B Instruct 2507", @@ -9490,8 +11105,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 262144, - } satisfies Model<"openai-completions">, + maxOutput: 262144, + }, "qwen/qwen3-30b-a3b-thinking-2507": { id: "qwen/qwen3-30b-a3b-thinking-2507", name: "Qwen: Qwen3 30B A3B Thinking 2507", @@ -9501,38 +11116,38 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.051, - output: 0.33999999999999997, + input: 0.08, + output: 0.4, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 131072, + }, "qwen/qwen3-32b": { id: "qwen/qwen3-32b", name: "Qwen: Qwen3 32B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.08, output: 0.24, - cacheRead: 0.04, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 40960, - maxTokens: 40960, - } satisfies Model<"openai-completions">, + maxOutput: 40960, + }, "qwen/qwen3-4b:free": { id: "qwen/qwen3-4b:free", name: "Qwen: Qwen3 4B (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -9541,25 +11156,25 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 40960, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-8b": { id: "qwen/qwen3-8b", name: "Qwen: Qwen3 8B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.049999999999999996, - output: 0.39999999999999997, - cacheRead: 0.049999999999999996, + input: 0.05, + output: 0.4, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 40960, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, "qwen/qwen3-coder": { id: "qwen/qwen3-coder", name: "Qwen: Qwen3 Coder 480B A35B", @@ -9571,12 +11186,12 @@ export const MODELS = { cost: { input: 0.22, output: 1, - cacheRead: 0.022, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-coder-30b-a3b-instruct": { id: "qwen/qwen3-coder-30b-a3b-instruct", name: "Qwen: Qwen3 Coder 30B A3B Instruct", @@ -9592,8 +11207,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 160000, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-coder-flash": { id: "qwen/qwen3-coder-flash", name: "Qwen: Qwen3 Coder Flash", @@ -9603,14 +11218,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.195, - output: 0.975, - cacheRead: 0.039, + input: 0.2, + output: 0.98, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3-coder-next": { id: "qwen/qwen3-coder-next", name: "Qwen: Qwen3 Coder Next", @@ -9622,12 +11237,12 @@ export const MODELS = { cost: { input: 0.12, output: 0.75, - cacheRead: 0.06, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3-coder-plus": { id: "qwen/qwen3-coder-plus", name: "Qwen: Qwen3 Coder Plus", @@ -9639,29 +11254,12 @@ export const MODELS = { cost: { input: 0.65, output: 3.25, - cacheRead: 0.13, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"openai-completions">, - "qwen/qwen3-coder:exacto": { - id: "qwen/qwen3-coder:exacto", - name: "Qwen: Qwen3 Coder 480B A35B (exacto)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.22, - output: 1.7999999999999998, - cacheRead: 0.022, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3-coder:free": { id: "qwen/qwen3-coder:free", name: "Qwen: Qwen3 Coder 480B A35B (free)", @@ -9677,8 +11275,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262000, - maxTokens: 262000, - } satisfies Model<"openai-completions">, + maxOutput: 262000, + }, "qwen/qwen3-max": { id: "qwen/qwen3-max", name: "Qwen: Qwen3 Max", @@ -9688,14 +11286,14 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 1.2, - output: 6, - cacheRead: 0.24, + input: 0.78, + output: 3.9, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-max-thinking": { id: "qwen/qwen3-max-thinking", name: "Qwen: Qwen3 Max Thinking", @@ -9711,8 +11309,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-next-80b-a3b-instruct": { id: "qwen/qwen3-next-80b-a3b-instruct", name: "Qwen: Qwen3 Next 80B A3B Instruct", @@ -9728,8 +11326,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-next-80b-a3b-instruct:free": { id: "qwen/qwen3-next-80b-a3b-instruct:free", name: "Qwen: Qwen3 Next 80B A3B Instruct (free)", @@ -9745,8 +11343,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-next-80b-a3b-thinking": { id: "qwen/qwen3-next-80b-a3b-thinking", name: "Qwen: Qwen3 Next 80B A3B Thinking", @@ -9756,14 +11354,14 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.15, - output: 1.2, + input: 0.1, + output: 0.78, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 32768, + }, "qwen/qwen3-vl-235b-a22b-instruct": { id: "qwen/qwen3-vl-235b-a22b-instruct", name: "Qwen: Qwen3 VL 235B A22B Instruct", @@ -9773,14 +11371,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.88, - cacheRead: 0.11, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "qwen/qwen3-vl-235b-a22b-thinking": { id: "qwen/qwen3-vl-235b-a22b-thinking", name: "Qwen: Qwen3 VL 235B A22B Thinking", @@ -9790,14 +11388,14 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0, - output: 0, + input: 0.26, + output: 2.6, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-vl-30b-a3b-instruct": { id: "qwen/qwen3-vl-30b-a3b-instruct", name: "Qwen: Qwen3 VL 30B A3B Instruct", @@ -9813,8 +11411,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-vl-30b-a3b-thinking": { id: "qwen/qwen3-vl-30b-a3b-thinking", name: "Qwen: Qwen3 VL 30B A3B Thinking", @@ -9824,14 +11422,14 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0, - output: 0, + input: 0.13, + output: 1.56, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-vl-32b-instruct": { id: "qwen/qwen3-vl-32b-instruct", name: "Qwen: Qwen3 VL 32B Instruct", @@ -9841,14 +11439,14 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.10400000000000001, - output: 0.41600000000000004, + input: 0.1, + output: 0.42, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-vl-8b-instruct": { id: "qwen/qwen3-vl-8b-instruct", name: "Qwen: Qwen3 VL 8B Instruct", @@ -9864,8 +11462,8 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3-vl-8b-thinking": { id: "qwen/qwen3-vl-8b-thinking", name: "Qwen: Qwen3 VL 8B Thinking", @@ -9875,21 +11473,21 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.117, - output: 1.365, + input: 0.12, + output: 1.37, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "qwen/qwen3.5-122b-a10b": { id: "qwen/qwen3.5-122b-a10b", name: "Qwen: Qwen3.5-122B-A10B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.26, @@ -9898,49 +11496,49 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3.5-27b": { id: "qwen/qwen3.5-27b", name: "Qwen: Qwen3.5-27B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.195, + input: 0.2, output: 1.56, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3.5-35b-a3b": { id: "qwen/qwen3.5-35b-a3b", name: "Qwen: Qwen3.5-35B-A3B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.1625, + input: 0.16, output: 1.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3.5-397b-a17b": { id: "qwen/qwen3.5-397b-a17b", name: "Qwen: Qwen3.5 397B A17B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.39, @@ -9949,32 +11547,49 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "qwen/qwen3.5-9b": { + id: "qwen/qwen3.5-9b", + name: "Qwen: Qwen3.5-9B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.05, + output: 0.15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxOutput: 16384, + }, "qwen/qwen3.5-flash-02-23": { id: "qwen/qwen3.5-flash-02-23", name: "Qwen: Qwen3.5-Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.39999999999999997, + input: 0.07, + output: 0.26, cacheRead: 0, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwen3.5-plus-02-15": { id: "qwen/qwen3.5-plus-02-15", name: "Qwen: Qwen3.5 Plus 2026-02-15", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.26, @@ -9983,25 +11598,42 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, "qwen/qwq-32b": { id: "qwen/qwq-32b", name: "Qwen: QwQ 32B", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.15, - output: 0.39999999999999997, + output: 0.58, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 32768, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 131072, + }, + "relace/relace-apply-3": { + id: "relace/relace-apply-3", + name: "Relace: Relace Apply 3", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.85, + output: 1.25, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 256000, + maxOutput: 128000, + }, "relace/relace-search": { id: "relace/relace-search", name: "Relace: Relace Search", @@ -10017,15 +11649,15 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 128000, - } satisfies Model<"openai-completions">, + maxOutput: 128000, + }, "sao10k/l3-euryale-70b": { id: "sao10k/l3-euryale-70b", name: "Sao10k: Llama 3 Euryale 70B v2.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, input: ["text"], cost: { input: 1.48, @@ -10034,15 +11666,66 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 8192, - maxTokens: 8192, - } satisfies Model<"openai-completions">, + maxOutput: 8192, + }, + "sao10k/l3-lunaris-8b": { + id: "sao10k/l3-lunaris-8b", + name: "Sao10K: Llama 3 8B Lunaris", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.04, + output: 0.05, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxOutput: 8192, + }, + "sao10k/l3.1-70b-hanami-x1": { + id: "sao10k/l3.1-70b-hanami-x1", + name: "Sao10K: Llama 3.1 70B Hanami x1", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 3, + output: 3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16000, + maxOutput: 16000, + }, "sao10k/l3.1-euryale-70b": { id: "sao10k/l3.1-euryale-70b", name: "Sao10K: Llama 3.1 Euryale 70B v2.2", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, + input: ["text"], + cost: { + input: 0.85, + output: 0.85, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "sao10k/l3.3-euryale-70b": { + id: "sao10k/l3.3-euryale-70b", + name: "Sao10K: Llama 3.3 Euryale 70B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, input: ["text"], cost: { input: 0.65, @@ -10050,33 +11733,33 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 32768, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + contextWindow: 131072, + maxOutput: 16384, + }, "stepfun/step-3.5-flash": { id: "stepfun/step-3.5-flash", name: "StepFun: Step 3.5 Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.1, output: 0.3, - cacheRead: 0.02, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"openai-completions">, + maxOutput: 256000, + }, "stepfun/step-3.5-flash:free": { id: "stepfun/step-3.5-flash:free", name: "StepFun: Step 3.5 Flash (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -10085,8 +11768,59 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 256000, - } satisfies Model<"openai-completions">, + maxOutput: 256000, + }, + "switchpoint/router": { + id: "switchpoint/router", + name: "Switchpoint Router", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.85, + output: 3.4, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 16384, + }, + "tencent/hunyuan-a13b-instruct": { + id: "tencent/hunyuan-a13b-instruct", + name: "Tencent: Hunyuan A13B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.14, + output: 0.57, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 131072, + }, + "thedrummer/cydonia-24b-v4.1": { + id: "thedrummer/cydonia-24b-v4.1", + name: "TheDrummer: Cydonia 24B V4.1", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.3, + output: 0.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxOutput: 131072, + }, "thedrummer/rocinante-12b": { id: "thedrummer/rocinante-12b", name: "TheDrummer: Rocinante 12B", @@ -10096,14 +11830,31 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.16999999999999998, + input: 0.17, output: 0.43, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, + "thedrummer/skyfall-36b-v2": { + id: "thedrummer/skyfall-36b-v2", + name: "TheDrummer: Skyfall 36B V2", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.55, + output: 0.8, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxOutput: 32768, + }, "thedrummer/unslopnemo-12b": { id: "thedrummer/unslopnemo-12b", name: "TheDrummer: UnslopNemo 12B", @@ -10113,48 +11864,82 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, - output: 0.39999999999999997, + input: 0.4, + output: 0.4, cacheRead: 0, cacheWrite: 0, }, contextWindow: 32768, - maxTokens: 32768, - } satisfies Model<"openai-completions">, + maxOutput: 32768, + }, "tngtech/deepseek-r1t2-chimera": { id: "tngtech/deepseek-r1t2-chimera", name: "TNG: DeepSeek R1T2 Chimera", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.25, output: 0.85, - cacheRead: 0.125, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 163840, - maxTokens: 163840, - } satisfies Model<"openai-completions">, + maxOutput: 163840, + }, + "undi95/remm-slerp-l2-13b": { + id: "undi95/remm-slerp-l2-13b", + name: "ReMM SLERP 13B", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.45, + output: 0.65, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 6144, + maxOutput: 4096, + }, "upstage/solar-pro-3": { id: "upstage/solar-pro-3", name: "Upstage: Solar Pro 3", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.6, - cacheRead: 0.015, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, + "writer/palmyra-x5": { + id: "writer/palmyra-x5", + name: "Writer: Palmyra X5", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.6, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1040000, + maxOutput: 8192, + }, "x-ai/grok-3": { id: "x-ai/grok-3", name: "xAI: Grok 3", @@ -10166,12 +11951,12 @@ export const MODELS = { cost: { input: 3, output: 15, - cacheRead: 0.75, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "x-ai/grok-3-beta": { id: "x-ai/grok-3-beta", name: "xAI: Grok 3 Beta", @@ -10183,131 +11968,199 @@ export const MODELS = { cost: { input: 3, output: 15, - cacheRead: 0.75, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "x-ai/grok-3-mini": { id: "x-ai/grok-3-mini", name: "xAI: Grok 3 Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.5, - cacheRead: 0.075, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "x-ai/grok-3-mini-beta": { id: "x-ai/grok-3-mini-beta", name: "xAI: Grok 3 Mini Beta", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.5, - cacheRead: 0.075, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "x-ai/grok-4": { id: "x-ai/grok-4", name: "xAI: Grok 4", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 3, output: 15, - cacheRead: 0.75, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "x-ai/grok-4-fast": { id: "x-ai/grok-4-fast", name: "xAI: Grok 4 Fast", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.5, - cacheRead: 0.049999999999999996, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 2000000, - maxTokens: 30000, - } satisfies Model<"openai-completions">, + maxOutput: 30000, + }, "x-ai/grok-4.1-fast": { id: "x-ai/grok-4.1-fast", name: "xAI: Grok 4.1 Fast", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 0.5, - cacheRead: 0.049999999999999996, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 2000000, - maxTokens: 30000, - } satisfies Model<"openai-completions">, + maxOutput: 30000, + }, + "x-ai/grok-4.20-beta": { + id: "x-ai/grok-4.20-beta", + name: "xAI: Grok 4.20 Beta", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxOutput: 16384, + }, + "x-ai/grok-4.20-multi-agent-beta": { + id: "x-ai/grok-4.20-multi-agent-beta", + name: "xAI: Grok 4.20 Multi-Agent Beta", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 2000000, + maxOutput: 16384, + }, "x-ai/grok-code-fast-1": { id: "x-ai/grok-code-fast-1", name: "xAI: Grok Code Fast 1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.19999999999999998, + input: 0.2, output: 1.5, - cacheRead: 0.02, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 10000, - } satisfies Model<"openai-completions">, + maxOutput: 10000, + }, "xiaomi/mimo-v2-flash": { id: "xiaomi/mimo-v2-flash", name: "Xiaomi: MiMo-V2-Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.09, output: 0.29, - cacheRead: 0.045, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, - } satisfies Model<"openai-completions">, + maxOutput: 65536, + }, + "xiaomi/mimo-v2-omni": { + id: "xiaomi/mimo-v2-omni", + name: "Xiaomi: MiMo-V2-Omni", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.4, + output: 2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxOutput: 65536, + }, + "xiaomi/mimo-v2-pro": { + id: "xiaomi/mimo-v2-pro", + name: "Xiaomi: MiMo-V2-Pro", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 1, + output: 3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxOutput: 131072, + }, "z-ai/glm-4-32b": { id: "z-ai/glm-4-32b", name: "Z.ai: GLM 4 32B ", @@ -10317,55 +12170,55 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, - output: 0.09999999999999999, + input: 0.1, + output: 0.1, cacheRead: 0, cacheWrite: 0, }, contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "z-ai/glm-4.5": { id: "z-ai/glm-4.5", name: "Z.ai: GLM 4.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.6, output: 2.2, - cacheRead: 0.11, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 98304, - } satisfies Model<"openai-completions">, + maxOutput: 98304, + }, "z-ai/glm-4.5-air": { id: "z-ai/glm-4.5-air", name: "Z.ai: GLM 4.5 Air", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.13, output: 0.85, - cacheRead: 0.024999999999999998, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 98304, - } satisfies Model<"openai-completions">, + maxOutput: 98304, + }, "z-ai/glm-4.5-air:free": { id: "z-ai/glm-4.5-air:free", name: "Z.ai: GLM 4.5 Air (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0, @@ -10374,32 +12227,32 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 96000, - } satisfies Model<"openai-completions">, + maxOutput: 96000, + }, "z-ai/glm-4.5v": { id: "z-ai/glm-4.5v", name: "Z.ai: GLM 4.5V", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.6, - output: 1.7999999999999998, - cacheRead: 0.11, + output: 1.8, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 65536, - maxTokens: 16384, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "z-ai/glm-4.6": { id: "z-ai/glm-4.6", name: "Z.ai: GLM 4.6", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.39, @@ -10408,93 +12261,93 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 204800, - } satisfies Model<"openai-completions">, - "z-ai/glm-4.6:exacto": { - id: "z-ai/glm-4.6:exacto", - name: "Z.ai: GLM 4.6 (exacto)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0.44, - output: 1.76, - cacheRead: 0.11, - cacheWrite: 0, - }, - contextWindow: 204800, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 204800, + }, "z-ai/glm-4.6v": { id: "z-ai/glm-4.6v", name: "Z.ai: GLM 4.6V", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text", "image"], cost: { input: 0.3, - output: 0.8999999999999999, + output: 0.9, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 131072, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, "z-ai/glm-4.7": { id: "z-ai/glm-4.7", name: "Z.ai: GLM 4.7", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.38, - output: 1.9800000000000002, - cacheRead: 0.19, + input: 0.39, + output: 1.75, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 202752, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 65535, + }, "z-ai/glm-4.7-flash": { id: "z-ai/glm-4.7-flash", name: "Z.ai: GLM 4.7 Flash", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.06, - output: 0.39999999999999997, - cacheRead: 0.0100000002, + output: 0.4, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 202752, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 16384, + }, "z-ai/glm-5": { id: "z-ai/glm-5", name: "Z.ai: GLM 5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, + reasoning: false, input: ["text"], cost: { - input: 0.6, - output: 1.9, - cacheRead: 0.119, + input: 0.72, + output: 2.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 80000, + maxOutput: 131072, + }, + "z-ai/glm-5-turbo": { + id: "z-ai/glm-5-turbo", + name: "Z.ai: GLM 5 Turbo", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.96, + output: 3.2, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 202752, - maxTokens: 4096, - } satisfies Model<"openai-completions">, + maxOutput: 131072, + }, }, "vercel-ai-gateway": { "alibaba/qwen-3-14b": { diff --git a/scripts/generate-openrouter-models.mjs b/scripts/generate-openrouter-models.mjs new file mode 100644 index 000000000..34c9f23f9 --- /dev/null +++ b/scripts/generate-openrouter-models.mjs @@ -0,0 +1,93 @@ +#!/usr/bin/env node +/** + * Generate OpenRouter model entries for models.generated.ts + * + * Fetches the full model list from OpenRouter's API and generates + * TypeScript model entries matching the existing registry format. + * + * Usage: node scripts/generate-openrouter-models.mjs > /tmp/openrouter-models.ts + * + * The output is a partial TypeScript object that can be merged into + * packages/pi-ai/src/models.generated.ts under the "openrouter" key. + */ + +const API_URL = "https://openrouter.ai/api/v1/models"; + +async function fetchModels() { + const resp = await fetch(API_URL); + if (!resp.ok) throw new Error(`API returned ${resp.status}`); + const data = await resp.json(); + return data.data || []; +} + +function inferApi(model) { + // Models that support the responses API + if (model.id.startsWith("openai/") || model.id.startsWith("anthropic/")) { + return "openai-completions"; + } + return "openai-completions"; +} + +function inferReasoning(model) { + const id = model.id.toLowerCase(); + return id.includes("o1") || id.includes("o3") || id.includes("o4") || + id.includes("reasoning") || id.includes("think"); +} + +function inferInput(model) { + const arch = model.architecture || {}; + const modality = (arch.input_modalities || []).join(",").toLowerCase(); + if (modality.includes("image")) return '["text", "image"]'; + return '["text"]'; +} + +function formatCost(pricing) { + if (!pricing) return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }; + // OpenRouter pricing is per-token in dollars; our format is per-million-tokens + const toPerMillion = (v) => Math.round(parseFloat(v || "0") * 1_000_000 * 100) / 100; + return { + input: toPerMillion(pricing.prompt), + output: toPerMillion(pricing.completion), + cacheRead: 0, + cacheWrite: 0, + }; +} + +async function main() { + const models = await fetchModels(); + + console.log('\t"openrouter": {'); + + for (const m of models.sort((a, b) => a.id.localeCompare(b.id))) { + const cost = formatCost(m.pricing); + const contextWindow = m.context_length || 128000; + const maxOutput = m.top_provider?.max_completion_tokens || Math.min(contextWindow, 16384); + const reasoning = inferReasoning(m); + const input = inferInput(m); + + console.log(`\t\t"${m.id}": {`); + console.log(`\t\t\tid: "${m.id}",`); + console.log(`\t\t\tname: ${JSON.stringify(m.name || m.id)},`); + console.log(`\t\t\tapi: "${inferApi(m)}",`); + console.log(`\t\t\tprovider: "openrouter",`); + console.log(`\t\t\tbaseUrl: "https://openrouter.ai/api/v1",`); + console.log(`\t\t\treasoning: ${reasoning},`); + console.log(`\t\t\tinput: ${input},`); + console.log(`\t\t\tcost: {`); + console.log(`\t\t\t\tinput: ${cost.input},`); + console.log(`\t\t\t\toutput: ${cost.output},`); + console.log(`\t\t\t\tcacheRead: ${cost.cacheRead},`); + console.log(`\t\t\t\tcacheWrite: ${cost.cacheWrite},`); + console.log(`\t\t\t},`); + console.log(`\t\t\tcontextWindow: ${contextWindow},`); + console.log(`\t\t\tmaxOutput: ${maxOutput},`); + console.log(`\t\t},`); + } + + console.log("\t},"); +} + +main().catch(err => { + console.error(err); + process.exit(1); +});