use crate::{Api, InputModality};
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ModelEntry {
pub id: &'static str,
pub name: &'static str,
pub api: Api,
pub provider: &'static str,
pub reasoning: bool,
pub input: &'static [InputModality],
pub cost_input: f64,
pub cost_output: f64,
pub cost_cache_read: f64,
pub cost_cache_write: f64,
pub context_window: u32,
pub max_tokens: u32,
}
impl ModelEntry {
pub fn supports_vision(&self) -> bool {
self.input.contains(&InputModality::Image)
}
pub fn supports_reasoning(&self) -> bool {
self.reasoning
}
pub fn calculate_cost(
&self,
input_tokens: u64,
output_tokens: u64,
cache_read: u64,
cache_write: u64,
) -> f64 {
let in_cost = (input_tokens as f64 / 1_000_000.0) * self.cost_input;
let out_cost = (output_tokens as f64 / 1_000_000.0) * self.cost_output;
let cr_cost = (cache_read as f64 / 1_000_000.0) * self.cost_cache_read;
let cw_cost = (cache_write as f64 / 1_000_000.0) * self.cost_cache_write;
in_cost + out_cost + cr_cost + cw_cost
}
}
static AMAZON_BEDROCK_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "amazon.nova-2-lite-v1:0",
name: "Nova 2 Lite",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "amazon.nova-lite-v1:0",
name: "Nova Lite",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.015,
cost_cache_write: 0.0,
context_window: 300000,
max_tokens: 8192,
},
ModelEntry {
id: "amazon.nova-premier-v1:0",
name: "Nova Premier",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 16384,
},
ModelEntry {
id: "anthropic.claude-3-5-haiku-20241022-v1:0",
name: "Claude Haiku 3.5",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 1.0,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "anthropic.claude-3-5-sonnet-20241022-v2:0",
name: "Claude Sonnet 3.5 v2",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "anthropic.claude-3-haiku-20240307-v1:0",
name: "Claude Haiku 3",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "anthropic.claude-opus-4-1-20250805-v1:0",
name: "Claude Opus 4.1",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "anthropic.claude-opus-4-5-20251101-v1:0",
name: "Claude Opus 4.5",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "anthropic.claude-opus-4-6-v1",
name: "Claude Opus 4.6",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "anthropic.claude-sonnet-4-20250514-v1:0",
name: "Claude Sonnet 4",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "anthropic.claude-sonnet-4-6",
name: "Claude Sonnet 4.6",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "au.anthropic.claude-sonnet-4-6",
name: "AU Anthropic Claude Sonnet 4.6",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.33,
cost_cache_write: 4.125,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "deepseek.v3-v1:0",
name: "DeepSeek-V3.1",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 81920,
},
ModelEntry {
id: "eu.anthropic.claude-haiku-4-5-20251001-v1:0",
name: "Claude Haiku 4.5 (EU)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "eu.anthropic.claude-opus-4-6-v1",
name: "Claude Opus 4.6 (EU)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "eu.anthropic.claude-opus-4-7",
name: "Claude Opus 4.7 (EU)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "eu.anthropic.claude-sonnet-4-5-20250929-v1:0",
name: "Claude Sonnet 4.5 (EU)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "global.anthropic.claude-haiku-4-5-20251001-v1:0",
name: "Claude Haiku 4.5 (Global)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "global.anthropic.claude-opus-4-6-v1",
name: "Claude Opus 4.6 (Global)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "global.anthropic.claude-sonnet-4-20250514-v1:0",
name: "Claude Sonnet 4 (Global)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "global.anthropic.claude-sonnet-4-6",
name: "Claude Sonnet 4.6 (Global)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "google.gemma-3-4b-it",
name: "Gemma 3 4B IT",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "meta.llama3-1-405b-instruct-v1:0",
name: "Llama 3.1 405B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "meta.llama3-1-8b-instruct-v1:0",
name: "Llama 3.1 8B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "meta.llama3-2-1b-instruct-v1:0",
name: "Llama 3.2 1B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131000,
max_tokens: 4096,
},
ModelEntry {
id: "meta.llama3-2-90b-instruct-v1:0",
name: "Llama 3.2 90B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "meta.llama4-maverick-17b-instruct-v1:0",
name: "Llama 4 Maverick 17B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 16384,
},
ModelEntry {
id: "minimax.minimax-m2",
name: "MiniMax M2",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 204608,
max_tokens: 128000,
},
ModelEntry {
id: "minimax.minimax-m2.5",
name: "MiniMax M2.5",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 196608,
max_tokens: 98304,
},
ModelEntry {
id: "mistral.devstral-2-123b",
name: "Devstral 2 123B",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 8192,
},
ModelEntry {
id: "mistral.ministral-3-14b-instruct",
name: "Ministral 14B 3.0",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "mistral.ministral-3-8b-instruct",
name: "Ministral 3 8B",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "mistral.pixtral-large-2502-v1:0",
name: "Pixtral Large (25.02)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 8192,
},
ModelEntry {
id: "mistral.voxtral-small-24b-2507",
name: "Voxtral Small 24B 2507",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32000,
max_tokens: 8192,
},
ModelEntry {
id: "moonshotai.kimi-k2.5",
name: "Kimi K2.5",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "nvidia.nemotron-nano-3-30b",
name: "NVIDIA Nemotron Nano 3 30B",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "nvidia.nemotron-nano-9b-v2",
name: "NVIDIA Nemotron Nano 9B v2",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "openai.gpt-oss-120b-1:0",
name: "gpt-oss-120b",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "openai.gpt-oss-safeguard-120b",
name: "GPT OSS Safeguard 120B",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "qwen.qwen3-235b-a22b-2507-v1:0",
name: "Qwen3 235B A22B 2507",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 131072,
},
ModelEntry {
id: "qwen.qwen3-coder-30b-a3b-v1:0",
name: "Qwen3 Coder 30B A3B Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 131072,
},
ModelEntry {
id: "qwen.qwen3-coder-next",
name: "Qwen3 Coder Next",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 65536,
},
ModelEntry {
id: "qwen.qwen3-vl-235b-a22b",
name: "Qwen/Qwen3-VL-235B-A22B-Instruct",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262000,
max_tokens: 262000,
},
ModelEntry {
id: "us.anthropic.claude-haiku-4-5-20251001-v1:0",
name: "Claude Haiku 4.5 (US)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "us.anthropic.claude-opus-4-20250514-v1:0",
name: "Claude Opus 4 (US)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "us.anthropic.claude-opus-4-6-v1",
name: "Claude Opus 4.6 (US)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "us.anthropic.claude-sonnet-4-20250514-v1:0",
name: "Claude Sonnet 4 (US)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "us.anthropic.claude-sonnet-4-6",
name: "Claude Sonnet 4.6 (US)",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "writer.palmyra-x5-v1:0",
name: "Palmyra X5",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1040000,
max_tokens: 8192,
},
ModelEntry {
id: "zai.glm-4.7-flash",
name: "GLM-4.7-Flash",
api: Api::BedrockConverseStream,
provider: "amazon-bedrock",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 131072,
},
];
static ANTHROPIC_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "claude-3-5-haiku-20241022",
name: "Claude Haiku 3.5",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 1.0,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-3-5-haiku-latest",
name: "Claude Haiku 3.5 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 1.0,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-3-5-sonnet-20240620",
name: "Claude Sonnet 3.5",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-3-5-sonnet-20241022",
name: "Claude Sonnet 3.5 v2",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-3-7-sonnet-20250219",
name: "Claude Sonnet 3.7",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-3-haiku-20240307",
name: "Claude Haiku 3",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.3,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "claude-3-opus-20240229",
name: "Claude Opus 3",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "claude-3-sonnet-20240229",
name: "Claude Sonnet 3",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 0.3,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "claude-haiku-4-5",
name: "Claude Haiku 4.5 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-haiku-4-5-20251001",
name: "Claude Haiku 4.5",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4-0",
name: "Claude Opus 4 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-1",
name: "Claude Opus 4.1 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-1-20250805",
name: "Claude Opus 4.1",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-20250514",
name: "Claude Opus 4",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-5",
name: "Claude Opus 4.5 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4-5-20251101",
name: "Claude Opus 4.5",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4-6",
name: "Claude Opus 4.6",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "claude-sonnet-4-0",
name: "Claude Sonnet 4 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-20250514",
name: "Claude Sonnet 4",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-5",
name: "Claude Sonnet 4.5 (latest)",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-5-20250929",
name: "Claude Sonnet 4.5",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-6",
name: "Claude Sonnet 4.6",
api: Api::AnthropicMessages,
provider: "anthropic",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
];
static AZURE_OPENAI_RESPONSES_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gpt-4",
name: "GPT-4",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "gpt-4-turbo",
name: "GPT-4 Turbo",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "gpt-4.1",
name: "GPT-4.1",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4.1-mini",
name: "GPT-4.1 mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4.1-nano",
name: "GPT-4.1 nano",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4o",
name: "GPT-4o",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-2024-05-13",
name: "GPT-4o (2024-05-13)",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "gpt-4o-2024-08-06",
name: "GPT-4o (2024-08-06)",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-2024-11-20",
name: "GPT-4o (2024-11-20)",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-mini",
name: "GPT-4o mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5",
name: "GPT-5",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-chat-latest",
name: "GPT-5 Chat Latest",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5-codex",
name: "GPT-5-Codex",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-mini",
name: "GPT-5 Mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-nano",
name: "GPT-5 Nano",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.005,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-pro",
name: "GPT-5 Pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 272000,
},
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.13,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-chat-latest",
name: "GPT-5.1 Chat",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.1-codex",
name: "GPT-5.1 Codex",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-max",
name: "GPT-5.1 Codex Max",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-mini",
name: "GPT-5.1 Codex mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-chat-latest",
name: "GPT-5.2 Chat",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2 Codex",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-pro",
name: "GPT-5.2 Pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-chat-latest",
name: "GPT-5.3 Chat (latest)",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex-spark",
name: "GPT-5.3 Codex Spark",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 32000,
},
ModelEntry {
id: "gpt-5.4",
name: "GPT-5.4",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.25,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-mini",
name: "GPT-5.4 mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-nano",
name: "GPT-5.4 nano",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-pro",
name: "GPT-5.4 Pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5",
name: "GPT-5.5",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5-pro",
name: "GPT-5.5 Pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "o1",
name: "o1",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 7.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o1-pro",
name: "o1-pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3",
name: "o3",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-deep-research",
name: "o3-deep-research",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-mini",
name: "o3-mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.55,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-pro",
name: "o3-pro",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o4-mini",
name: "o4-mini",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.28,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o4-mini-deep-research",
name: "o4-mini-deep-research",
api: Api::AzureOpenAiResponses,
provider: "azure-openai-responses",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
];
static CEREBRAS_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gpt-oss-120b",
name: "GPT OSS 120B",
api: Api::OpenAiCompletions,
provider: "cerebras",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "llama3.1-8b",
name: "Llama 3.1 8B",
api: Api::OpenAiCompletions,
provider: "cerebras",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32000,
max_tokens: 8000,
},
ModelEntry {
id: "qwen-3-235b-a22b-instruct-2507",
name: "Qwen 3 235B Instruct",
api: Api::OpenAiCompletions,
provider: "cerebras",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131000,
max_tokens: 32000,
},
ModelEntry {
id: "zai-glm-4.7",
name: "Z.AI GLM-4.7",
api: Api::OpenAiCompletions,
provider: "cerebras",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 40000,
},
];
static CLOUDFLARE_AI_GATEWAY_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "claude-3-5-haiku",
name: "Claude Haiku 3.5 (latest)",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 1.0,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-3-haiku",
name: "Claude Haiku 3",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.3,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "claude-3-sonnet",
name: "Claude Sonnet 3",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 0.3,
context_window: 200000,
max_tokens: 4096,
},
ModelEntry {
id: "claude-3.5-sonnet",
name: "Claude Sonnet 3.5 v2",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "claude-opus-4",
name: "Claude Opus 4 (latest)",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-1",
name: "Claude Opus 4.1 (latest)",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-6",
name: "Claude Opus 4.6 (latest)",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "claude-sonnet-4",
name: "Claude Sonnet 4 (latest)",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-6",
name: "Claude Sonnet 4.6",
api: Api::AnthropicMessages,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "gpt-4",
name: "GPT-4",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "gpt-4o",
name: "GPT-4o",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.13,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2 Codex",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4",
name: "GPT-5.4",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.25,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "o1",
name: "o1",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 7.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-mini",
name: "o3-mini",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.55,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-pro",
name: "o3-pro",
api: Api::OpenAiResponses,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "workers-ai/@cf/moonshotai/kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "workers-ai/@cf/nvidia/nemotron-3-120b-a12b",
name: "Nemotron 3 Super 120B",
api: Api::OpenAiCompletions,
provider: "cloudflare-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
];
static CLOUDFLARE_WORKERS_AI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "@cf/google/gemma-4-26b-a4b-it",
name: "Gemma 4 26B A4B IT",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 16384,
},
ModelEntry {
id: "@cf/meta/llama-4-scout-17b-16e-instruct",
name: "Llama 4 Scout 17B 16E Instruct",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "@cf/moonshotai/kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "@cf/moonshotai/kimi-k2.6",
name: "Kimi K2.6",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "@cf/nvidia/nemotron-3-120b-a12b",
name: "Nemotron 3 Super 120B",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "@cf/openai/gpt-oss-120b",
name: "GPT OSS 120B",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "@cf/openai/gpt-oss-20b",
name: "GPT OSS 20B",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "@cf/zai-org/glm-4.7-flash",
name: "GLM-4.7-Flash",
api: Api::OpenAiCompletions,
provider: "cloudflare-workers-ai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
];
static DEEPSEEK_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash",
api: Api::OpenAiCompletions,
provider: "deepseek",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0028,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 384000,
},
ModelEntry {
id: "deepseek-v4-pro",
name: "DeepSeek V4 Pro",
api: Api::OpenAiCompletions,
provider: "deepseek",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.003625,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 384000,
},
];
static FIREWORKS_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "accounts/fireworks/models/deepseek-v3p1",
name: "DeepSeek V3.1",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 163840,
},
ModelEntry {
id: "accounts/fireworks/models/deepseek-v3p2",
name: "DeepSeek V3.2",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.28,
cost_cache_write: 0.0,
context_window: 160000,
max_tokens: 160000,
},
ModelEntry {
id: "accounts/fireworks/models/deepseek-v4-pro",
name: "DeepSeek V4 Pro",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 384000,
},
ModelEntry {
id: "accounts/fireworks/models/glm-4p5",
name: "GLM 4.5",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "accounts/fireworks/models/glm-4p5-air",
name: "GLM 4.5 Air",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "accounts/fireworks/models/glm-4p7",
name: "GLM 4.7",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 0.0,
context_window: 198000,
max_tokens: 198000,
},
ModelEntry {
id: "accounts/fireworks/models/glm-5",
name: "GLM 5",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 131072,
},
ModelEntry {
id: "accounts/fireworks/models/glm-5p1",
name: "GLM 5.1",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.26,
cost_cache_write: 0.0,
context_window: 202800,
max_tokens: 131072,
},
ModelEntry {
id: "accounts/fireworks/models/gpt-oss-120b",
name: "GPT OSS 120B",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "accounts/fireworks/models/gpt-oss-20b",
name: "GPT OSS 20B",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "accounts/fireworks/models/kimi-k2-instruct",
name: "Kimi K2 Instruct",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "accounts/fireworks/models/kimi-k2-thinking",
name: "Kimi K2 Thinking",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "accounts/fireworks/models/kimi-k2p5",
name: "Kimi K2.5",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "accounts/fireworks/models/kimi-k2p6",
name: "Kimi K2.6",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 262000,
max_tokens: 262000,
},
ModelEntry {
id: "accounts/fireworks/models/minimax-m2p1",
name: "MiniMax-M2.1",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 200000,
},
ModelEntry {
id: "accounts/fireworks/models/minimax-m2p5",
name: "MiniMax-M2.5",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 196608,
max_tokens: 196608,
},
ModelEntry {
id: "accounts/fireworks/models/minimax-m2p7",
name: "MiniMax-M2.7",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 196608,
max_tokens: 196608,
},
ModelEntry {
id: "accounts/fireworks/models/qwen3p6-plus",
name: "Qwen 3.6 Plus",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 8192,
},
ModelEntry {
id: "accounts/fireworks/routers/kimi-k2p5-turbo",
name: "Kimi K2.5 Turbo",
api: Api::AnthropicMessages,
provider: "fireworks",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
];
static GITHUB_COPILOT_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "claude-haiku-4.5",
name: "Claude Haiku 4.5",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 144000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4.5",
name: "Claude Opus 4.5",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 160000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4.6",
name: "Claude Opus 4.6",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4.7",
name: "Claude Opus 4.7",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 144000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4",
name: "Claude Sonnet 4",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 216000,
max_tokens: 16000,
},
ModelEntry {
id: "claude-sonnet-4.5",
name: "Claude Sonnet 4.5",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 144000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-sonnet-4.6",
name: "Claude Sonnet 4.6",
api: Api::AnthropicMessages,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 32000,
},
ModelEntry {
id: "gemini-2.5-pro",
name: "Gemini 2.5 Pro",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3-flash-preview",
name: "Gemini 3 Flash",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3-pro-preview",
name: "Gemini 3 Pro Preview",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3.1-pro-preview",
name: "Gemini 3.1 Pro Preview",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 64000,
},
ModelEntry {
id: "gpt-4.1",
name: "GPT-4.1",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o",
name: "GPT-4o",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "gpt-5",
name: "GPT-5",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-mini",
name: "GPT-5-mini",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 264000,
max_tokens: 64000,
},
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 264000,
max_tokens: 64000,
},
ModelEntry {
id: "gpt-5.1-codex",
name: "GPT-5.1-Codex",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-max",
name: "GPT-5.1-Codex-max",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-mini",
name: "GPT-5.1-Codex-mini",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 264000,
max_tokens: 64000,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2-Codex",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex",
name: "GPT-5.3-Codex",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4",
name: "GPT-5.4",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-mini",
name: "GPT-5.4 Mini",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5",
name: "GPT-5.5",
api: Api::OpenAiResponses,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "grok-code-fast-1",
name: "Grok Code Fast 1",
api: Api::OpenAiCompletions,
provider: "github-copilot",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 64000,
},
];
static GOOGLE_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gemini-1.5-flash",
name: "Gemini 1.5 Flash",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01875,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-1.5-flash-8b",
name: "Gemini 1.5 Flash-8B",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-1.5-pro",
name: "Gemini 1.5 Pro",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3125,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-2.0-flash",
name: "Gemini 2.0 Flash",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-2.0-flash-lite",
name: "Gemini 2.0 Flash Lite",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-2.5-flash",
name: "Gemini 2.5 Flash",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-lite",
name: "Gemini 2.5 Flash Lite",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-lite-preview-06-17",
name: "Gemini 2.5 Flash Lite Preview 06-17",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-lite-preview-09-2025",
name: "Gemini 2.5 Flash Lite Preview 09-25",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-preview-04-17",
name: "Gemini 2.5 Flash Preview 04-17",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0375,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-preview-05-20",
name: "Gemini 2.5 Flash Preview 05-20",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0375,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-preview-09-2025",
name: "Gemini 2.5 Flash Preview 09-25",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-pro",
name: "Gemini 2.5 Pro",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-pro-preview-05-06",
name: "Gemini 2.5 Pro Preview 05-06",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.31,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-pro-preview-06-05",
name: "Gemini 2.5 Pro Preview 06-05",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.31,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3-flash-preview",
name: "Gemini 3 Flash Preview",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3-pro-preview",
name: "Gemini 3 Pro Preview",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3.1-flash-lite-preview",
name: "Gemini 3.1 Flash Lite Preview",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 1.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3.1-pro-preview",
name: "Gemini 3.1 Pro Preview",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3.1-pro-preview-customtools",
name: "Gemini 3.1 Pro Preview Custom Tools",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-flash-latest",
name: "Gemini Flash Latest",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-flash-lite-latest",
name: "Gemini Flash-Lite Latest",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-live-2.5-flash",
name: "Gemini Live 2.5 Flash",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 8000,
},
ModelEntry {
id: "gemini-live-2.5-flash-preview-native-audio",
name: "Gemini Live 2.5 Flash Preview Native Audio",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 65536,
},
ModelEntry {
id: "gemma-3-27b-it",
name: "Gemma 3 27B",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "gemma-4-26b-a4b-it",
name: "Gemma 4 26B",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 8192,
},
ModelEntry {
id: "gemma-4-31b-it",
name: "Gemma 4 31B",
api: Api::GoogleGenerativeAi,
provider: "google",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 8192,
},
];
static GOOGLE_VERTEX_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gemini-1.5-flash",
name: "Gemini 1.5 Flash (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01875,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-1.5-flash-8b",
name: "Gemini 1.5 Flash-8B (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-1.5-pro",
name: "Gemini 1.5 Pro (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3125,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-2.0-flash",
name: "Gemini 2.0 Flash (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0375,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 8192,
},
ModelEntry {
id: "gemini-2.0-flash-lite",
name: "Gemini 2.0 Flash Lite (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01875,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash",
name: "Gemini 2.5 Flash (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-lite",
name: "Gemini 2.5 Flash Lite (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-flash-lite-preview-09-2025",
name: "Gemini 2.5 Flash Lite Preview 09-25 (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-2.5-pro",
name: "Gemini 2.5 Pro (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3-flash-preview",
name: "Gemini 3 Flash Preview (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3-pro-preview",
name: "Gemini 3 Pro Preview (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3.1-pro-preview",
name: "Gemini 3.1 Pro Preview (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "gemini-3.1-pro-preview-customtools",
name: "Gemini 3.1 Pro Preview Custom Tools (Vertex)",
api: Api::GoogleVertex,
provider: "google-vertex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
];
static GROQ_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "deepseek-r1-distill-llama-70b",
name: "DeepSeek R1 Distill Llama 70B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "gemma2-9b-it",
name: "Gemma 2 9B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "groq/compound",
name: "Compound",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "groq/compound-mini",
name: "Compound Mini",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "llama-3.1-8b-instant",
name: "Llama 3.1 8B Instant",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "llama-3.3-70b-versatile",
name: "Llama 3.3 70B Versatile",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "llama3-70b-8192",
name: "Llama 3 70B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "llama3-8b-8192",
name: "Llama 3 8B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "meta-llama/llama-4-maverick-17b-128e-instruct",
name: "Llama 4 Maverick 17B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "meta-llama/llama-4-scout-17b-16e-instruct",
name: "Llama 4 Scout 17B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "mistral-saba-24b",
name: "Mistral Saba 24B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32768,
max_tokens: 32768,
},
ModelEntry {
id: "moonshotai/kimi-k2-instruct",
name: "Kimi K2 Instruct",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "moonshotai/kimi-k2-instruct-0905",
name: "Kimi K2 Instruct 0905",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-oss-120b",
name: "GPT OSS 120B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 65536,
},
ModelEntry {
id: "openai/gpt-oss-20b",
name: "GPT OSS 20B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 65536,
},
ModelEntry {
id: "openai/gpt-oss-safeguard-20b",
name: "Safety GPT OSS 20B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.037,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 65536,
},
ModelEntry {
id: "qwen-qwq-32b",
name: "Qwen QwQ 32B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "qwen/qwen3-32b",
name: "Qwen3 32B",
api: Api::OpenAiCompletions,
provider: "groq",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 40960,
},
];
static HUGGINGFACE_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "MiniMaxAI/MiniMax-M2.1",
name: "MiniMax-M2.1",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "MiniMaxAI/MiniMax-M2.5",
name: "MiniMax-M2.5",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "MiniMaxAI/MiniMax-M2.7",
name: "MiniMax-M2.7",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "Qwen/Qwen3-235B-A22B-Thinking-2507",
name: "Qwen3-235B-A22B-Thinking-2507",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 131072,
},
ModelEntry {
id: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
name: "Qwen3-Coder-480B-A35B-Instruct",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 66536,
},
ModelEntry {
id: "Qwen/Qwen3-Coder-Next",
name: "Qwen3-Coder-Next",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "Qwen/Qwen3-Next-80B-A3B-Instruct",
name: "Qwen3-Next-80B-A3B-Instruct",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 66536,
},
ModelEntry {
id: "Qwen/Qwen3-Next-80B-A3B-Thinking",
name: "Qwen3-Next-80B-A3B-Thinking",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 131072,
},
ModelEntry {
id: "Qwen/Qwen3.5-397B-A17B",
name: "Qwen3.5-397B-A17B",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "XiaomiMiMo/MiMo-V2-Flash",
name: "MiMo-V2-Flash",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 4096,
},
ModelEntry {
id: "deepseek-ai/DeepSeek-R1-0528",
name: "DeepSeek-R1-0528",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 163840,
},
ModelEntry {
id: "deepseek-ai/DeepSeek-V3.2",
name: "DeepSeek-V3.2",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 65536,
},
ModelEntry {
id: "deepseek-ai/DeepSeek-V4-Pro",
name: "DeepSeek V4 Pro",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.145,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 393216,
},
ModelEntry {
id: "moonshotai/Kimi-K2-Instruct",
name: "Kimi-K2-Instruct",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "moonshotai/Kimi-K2-Instruct-0905",
name: "Kimi-K2-Instruct-0905",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 16384,
},
ModelEntry {
id: "moonshotai/Kimi-K2-Thinking",
name: "Kimi-K2-Thinking",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "moonshotai/Kimi-K2.5",
name: "Kimi-K2.5",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "moonshotai/Kimi-K2.6",
name: "Kimi-K2.6",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "zai-org/GLM-4.7",
name: "GLM-4.7",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.11,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "zai-org/GLM-4.7-Flash",
name: "GLM-4.7-Flash",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 128000,
},
ModelEntry {
id: "zai-org/GLM-5",
name: "GLM-5",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 131072,
},
ModelEntry {
id: "zai-org/GLM-5.1",
name: "GLM-5.1",
api: Api::OpenAiCompletions,
provider: "huggingface",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 131072,
},
];
static KIMI_CODING_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "k2p6",
name: "Kimi K2.6",
api: Api::AnthropicMessages,
provider: "kimi-coding",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "kimi-for-coding",
name: "Kimi For Coding",
api: Api::AnthropicMessages,
provider: "kimi-coding",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "kimi-k2-thinking",
name: "Kimi K2 Thinking",
api: Api::AnthropicMessages,
provider: "kimi-coding",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
];
static MINIMAX_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "MiniMax-M2.7",
name: "MiniMax-M2.7",
api: Api::AnthropicMessages,
provider: "minimax",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "MiniMax-M2.7-highspeed",
name: "MiniMax-M2.7-highspeed",
api: Api::AnthropicMessages,
provider: "minimax",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131072,
},
];
static MINIMAX_CN_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "MiniMax-M2.7",
name: "MiniMax-M2.7",
api: Api::AnthropicMessages,
provider: "minimax-cn",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "MiniMax-M2.7-highspeed",
name: "MiniMax-M2.7-highspeed",
api: Api::AnthropicMessages,
provider: "minimax-cn",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131072,
},
];
static MISTRAL_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "codestral-latest",
name: "Codestral (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 4096,
},
ModelEntry {
id: "devstral-2512",
name: "Devstral 2",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "devstral-medium-2507",
name: "Devstral Medium",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "devstral-medium-latest",
name: "Devstral 2 (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "devstral-small-2505",
name: "Devstral Small 2505",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "devstral-small-2507",
name: "Devstral Small",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "labs-devstral-small-2512",
name: "Devstral Small 2",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "magistral-medium-latest",
name: "Magistral Medium (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "magistral-small",
name: "Magistral Small",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "ministral-3b-latest",
name: "Ministral 3B (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "ministral-8b-latest",
name: "Ministral 8B (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "mistral-large-2411",
name: "Mistral Large 2.1",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "mistral-large-2512",
name: "Mistral Large 3",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-large-latest",
name: "Mistral Large (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-medium-2505",
name: "Mistral Medium 3",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "mistral-medium-2508",
name: "Mistral Medium 3.1",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-medium-2604",
name: "Mistral Medium 3.5",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-medium-3.5",
name: "Mistral Medium 3.5",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-medium-latest",
name: "Mistral Medium (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "mistral-nemo",
name: "Mistral Nemo",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "mistral-small-2506",
name: "Mistral Small 3.2",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "mistral-small-2603",
name: "Mistral Small 4",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "mistral-small-latest",
name: "Mistral Small (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "open-mistral-7b",
name: "Mistral 7B",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8000,
max_tokens: 8000,
},
ModelEntry {
id: "open-mixtral-8x22b",
name: "Mixtral 8x22B",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 64000,
max_tokens: 64000,
},
ModelEntry {
id: "open-mixtral-8x7b",
name: "Mixtral 8x7B",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32000,
max_tokens: 32000,
},
ModelEntry {
id: "pixtral-12b",
name: "Pixtral 12B",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "pixtral-large-latest",
name: "Pixtral Large (latest)",
api: Api::MistralConversations,
provider: "mistral",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
];
static MOONSHOTAI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "kimi-k2-0711-preview",
name: "Kimi K2 0711",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "kimi-k2-0905-preview",
name: "Kimi K2 0905",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-thinking",
name: "Kimi K2 Thinking",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-thinking-turbo",
name: "Kimi K2 Thinking Turbo",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-turbo-preview",
name: "Kimi K2 Turbo",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.6,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2.6",
name: "Kimi K2.6",
api: Api::OpenAiCompletions,
provider: "moonshotai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
];
static MOONSHOTAI_CN_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "kimi-k2-0711-preview",
name: "Kimi K2 0711",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "kimi-k2-0905-preview",
name: "Kimi K2 0905",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-thinking",
name: "Kimi K2 Thinking",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-thinking-turbo",
name: "Kimi K2 Thinking Turbo",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2-turbo-preview",
name: "Kimi K2 Turbo",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.6,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "kimi-k2.6",
name: "Kimi K2.6",
api: Api::OpenAiCompletions,
provider: "moonshotai-cn",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
];
static OPENAI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gpt-4",
name: "GPT-4",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 8192,
},
ModelEntry {
id: "gpt-4-turbo",
name: "GPT-4 Turbo",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "gpt-4.1",
name: "GPT-4.1",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4.1-mini",
name: "GPT-4.1 mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4.1-nano",
name: "GPT-4.1 nano",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "gpt-4o",
name: "GPT-4o",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-2024-05-13",
name: "GPT-4o (2024-05-13)",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "gpt-4o-2024-08-06",
name: "GPT-4o (2024-08-06)",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-2024-11-20",
name: "GPT-4o (2024-11-20)",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-4o-mini",
name: "GPT-4o mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5",
name: "GPT-5",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-chat-latest",
name: "GPT-5 Chat Latest",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5-codex",
name: "GPT-5-Codex",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-mini",
name: "GPT-5 Mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-nano",
name: "GPT-5 Nano",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.005,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-pro",
name: "GPT-5 Pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 272000,
},
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.13,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-chat-latest",
name: "GPT-5.1 Chat",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.1-codex",
name: "GPT-5.1 Codex",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-max",
name: "GPT-5.1 Codex Max",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-mini",
name: "GPT-5.1 Codex mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-chat-latest",
name: "GPT-5.2 Chat",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2 Codex",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-pro",
name: "GPT-5.2 Pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-chat-latest",
name: "GPT-5.3 Chat (latest)",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex-spark",
name: "GPT-5.3 Codex Spark",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 32000,
},
ModelEntry {
id: "gpt-5.4",
name: "GPT-5.4",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.25,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-mini",
name: "GPT-5.4 mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-nano",
name: "GPT-5.4 nano",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-pro",
name: "GPT-5.4 Pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5",
name: "GPT-5.5",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5-pro",
name: "GPT-5.5 Pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "o1",
name: "o1",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 7.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o1-pro",
name: "o1-pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3",
name: "o3",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-deep-research",
name: "o3-deep-research",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-mini",
name: "o3-mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.55,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o3-pro",
name: "o3-pro",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o4-mini",
name: "o4-mini",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.28,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "o4-mini-deep-research",
name: "o4-mini-deep-research",
api: Api::OpenAiResponses,
provider: "openai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
];
static OPENAI_CODEX_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-max",
name: "GPT-5.1 Codex Max",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-mini",
name: "GPT-5.1 Codex Mini",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2 Codex",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex-spark",
name: "GPT-5.3 Codex Spark",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4",
name: "GPT-5.4",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.25,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-mini",
name: "GPT-5.4 Mini",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5",
name: "GPT-5.5",
api: Api::OpenAiCompletions,
provider: "openai-codex",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 272000,
max_tokens: 128000,
},
];
static OPENCODE_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "big-pickle",
name: "Big Pickle",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 128000,
},
ModelEntry {
id: "claude-haiku-4-5",
name: "Claude Haiku 4.5",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4-1",
name: "Claude Opus 4.1",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "claude-opus-4-5",
name: "Claude Opus 4.5",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "claude-sonnet-4",
name: "Claude Sonnet 4",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-5",
name: "Claude Sonnet 4.5",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "claude-sonnet-4-6",
name: "Claude Sonnet 4.6",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "gemini-3.1-pro",
name: "Gemini 3.1 Pro Preview",
api: Api::GoogleGenerativeAi,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "glm-5",
name: "GLM-5",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "glm-5.1",
name: "GLM-5.1",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.26,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "gpt-5",
name: "GPT-5",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.107,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5-nano",
name: "GPT-5 Nano",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1",
name: "GPT-5.1",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.107,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex",
name: "GPT-5.1 Codex",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.107,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.1-codex-mini",
name: "GPT-5.1 Codex Mini",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.025,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2",
name: "GPT-5.2",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.2-codex",
name: "GPT-5.2 Codex",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-mini",
name: "GPT-5.4 Mini",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-nano",
name: "GPT-5.4 Nano",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.4-pro",
name: "GPT-5.4 Pro",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 30.0,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "gpt-5.5",
name: "GPT-5.5",
api: Api::OpenAiResponses,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 1050000,
max_tokens: 128000,
},
ModelEntry {
id: "hy3-preview-free",
name: "Hy3 preview Free",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 64000,
},
ModelEntry {
id: "kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "kimi-k2.6",
name: "Kimi K2.6",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.16,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "minimax-m2.5",
name: "MiniMax M2.5",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "minimax-m2.7",
name: "MiniMax M2.7",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "nemotron-3-super-free",
name: "Nemotron 3 Super Free",
api: Api::OpenAiCompletions,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 128000,
},
ModelEntry {
id: "qwen3.5-plus",
name: "Qwen3.5 Plus",
api: Api::AnthropicMessages,
provider: "opencode",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.25,
context_window: 262144,
max_tokens: 65536,
},
];
static OPENCODE_GO_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0028,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 384000,
},
ModelEntry {
id: "deepseek-v4-pro",
name: "DeepSeek V4 Pro",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0145,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 384000,
},
ModelEntry {
id: "glm-5",
name: "GLM-5",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 32768,
},
ModelEntry {
id: "glm-5.1",
name: "GLM-5.1",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.26,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 32768,
},
ModelEntry {
id: "kimi-k2.5",
name: "Kimi K2.5",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.1,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "kimi-k2.6",
name: "Kimi K2.6 (3x limits)",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.054,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "mimo-v2-omni",
name: "MiMo V2 Omni",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 128000,
},
ModelEntry {
id: "mimo-v2-pro",
name: "MiMo V2 Pro",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 128000,
},
ModelEntry {
id: "mimo-v2.5",
name: "MiMo V2.5",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "mimo-v2.5-pro",
name: "MiMo V2.5 Pro",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 128000,
},
ModelEntry {
id: "minimax-m2.5",
name: "MiniMax M2.5",
api: Api::OpenAiCompletions,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 65536,
},
ModelEntry {
id: "minimax-m2.7",
name: "MiniMax M2.7",
api: Api::AnthropicMessages,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "qwen3.5-plus",
name: "Qwen3.5 Plus",
api: Api::AnthropicMessages,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.25,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "qwen3.6-plus",
name: "Qwen3.6 Plus",
api: Api::AnthropicMessages,
provider: "opencode-go",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.625,
context_window: 262144,
max_tokens: 65536,
},
];
static OPENROUTER_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "ai21/jamba-large-1.7",
name: "AI21: Jamba Large 1.7",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 4096,
},
ModelEntry {
id: "amazon/nova-lite-v1",
name: "Amazon: Nova Lite 1.0",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 300000,
max_tokens: 5120,
},
ModelEntry {
id: "anthropic/claude-3.5-haiku",
name: "Anthropic: Claude 3.5 Haiku",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 1.0,
context_window: 200000,
max_tokens: 8192,
},
ModelEntry {
id: "anthropic/claude-opus-4",
name: "Anthropic: Claude Opus 4",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.5,
cost_cache_write: 18.75,
context_window: 200000,
max_tokens: 32000,
},
ModelEntry {
id: "anthropic/claude-opus-4.7",
name: "Anthropic: Claude Opus 4.7",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 6.25,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "arcee-ai/trinity-large-preview",
name: "Arcee AI: Trinity Large Preview",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131000,
max_tokens: 4096,
},
ModelEntry {
id: "baidu/ernie-4.5-21b-a3b",
name: "Baidu: ERNIE 4.5 21B A3B",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 120000,
max_tokens: 8000,
},
ModelEntry {
id: "bytedance-seed/seed-2.0-lite",
name: "ByteDance Seed: Seed-2.0-Lite",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 131072,
},
ModelEntry {
id: "deepseek/deepseek-chat-v3-0324",
name: "DeepSeek: DeepSeek V3 0324",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.135,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 16384,
},
ModelEntry {
id: "deepseek/deepseek-v3.1-terminus",
name: "DeepSeek: DeepSeek V3.1 Terminus",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.13,
cost_cache_write: 0.0,
context_window: 163840,
max_tokens: 32768,
},
ModelEntry {
id: "essentialai/rnj-1-instruct",
name: "EssentialAI: Rnj 1 Instruct",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32768,
max_tokens: 4096,
},
ModelEntry {
id: "google/gemini-2.5-flash-lite-preview-09-2025",
name: "Google: Gemini 2.5 Flash Lite Preview 09-2025",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.08333333333333334,
context_window: 1048576,
max_tokens: 65535,
},
ModelEntry {
id: "google/gemini-3-flash-preview",
name: "Google: Gemini 3 Flash Preview",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.049999999999999996,
cost_cache_write: 0.08333333333333334,
context_window: 1048576,
max_tokens: 65536,
},
ModelEntry {
id: "google/gemma-3-27b-it",
name: "Google: Gemma 3 27B",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "google/gemma-4-31b-it:free",
name: "Google: Gemma 4 31B (free)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "kwaipilot/kat-coder-pro-v2",
name: "Kwaipilot: KAT-Coder-Pro V2",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 80000,
},
ModelEntry {
id: "meta-llama/llama-3.3-70b-instruct",
name: "Meta: Llama 3.3 70B Instruct",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "minimax/minimax-m2.1",
name: "MiniMax: MiniMax M2.1",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 196608,
max_tokens: 196608,
},
ModelEntry {
id: "mistralai/codestral-2508",
name: "Mistral: Codestral 2508",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 4096,
},
ModelEntry {
id: "mistralai/ministral-3b-2512",
name: "Mistral: Ministral 3 3B 2512",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 4096,
},
ModelEntry {
id: "mistralai/mistral-large-2512",
name: "Mistral: Mistral Large 3 2512",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.049999999999999996,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 4096,
},
ModelEntry {
id: "mistralai/mistral-saba",
name: "Mistral: Saba",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 32768,
max_tokens: 4096,
},
ModelEntry {
id: "mistralai/pixtral-large-2411",
name: "Mistral: Pixtral Large 2411",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.19999999999999998,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 4096,
},
ModelEntry {
id: "moonshotai/kimi-k2-thinking",
name: "MoonshotAI: Kimi K2 Thinking",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "nvidia/llama-3.3-nemotron-super-49b-v1.5",
name: "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 16384,
},
ModelEntry {
id: "nvidia/nemotron-3-super-120b-a12b",
name: "NVIDIA: Nemotron 3 Super",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 4096,
},
ModelEntry {
id: "openai/gpt-3.5-turbo",
name: "OpenAI: GPT-3.5 Turbo",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 16385,
max_tokens: 4096,
},
ModelEntry {
id: "openai/gpt-4-0314",
name: "OpenAI: GPT-4 (older v0314)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 8191,
max_tokens: 4096,
},
ModelEntry {
id: "openai/gpt-4.1-mini",
name: "OpenAI: GPT-4.1 Mini",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.09999999999999999,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "openai/gpt-4o-2024-08-06",
name: "OpenAI: GPT-4o (2024-08-06)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-5",
name: "OpenAI: GPT-5",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-5.1",
name: "OpenAI: GPT-5.1",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.13,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-5.1-codex-mini",
name: "OpenAI: GPT-5.1-Codex-Mini",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-5.3-chat",
name: "OpenAI: GPT-5.3 Chat",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-5.4-nano",
name: "OpenAI: GPT-5.4 Nano",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-audio-mini",
name: "OpenAI: GPT Audio Mini",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-oss-20b:free",
name: "OpenAI: gpt-oss-20b (free)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "openai/o3-mini",
name: "OpenAI: o3 Mini",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.55,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "openai/o4-mini-deep-research",
name: "OpenAI: o4 Mini Deep Research",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "poolside/laguna-m.1:free",
name: "Poolside: Laguna M.1 (free)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "qwen/qwen-max",
name: "Qwen: Qwen-Max ",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.20800000000000002,
cost_cache_write: 0.0,
context_window: 32768,
max_tokens: 8192,
},
ModelEntry {
id: "qwen/qwen-turbo",
name: "Qwen: Qwen-Turbo",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.006500000000000001,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "qwen/qwen3-235b-a22b-thinking-2507",
name: "Qwen: Qwen3 235B A22B Thinking 2507",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 4096,
},
ModelEntry {
id: "qwen/qwen3-32b",
name: "Qwen: Qwen3 32B",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.04,
cost_cache_write: 0.0,
context_window: 40960,
max_tokens: 40960,
},
ModelEntry {
id: "qwen/qwen3-coder-next",
name: "Qwen: Qwen3 Coder Next",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.07,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "qwen/qwen3-max-thinking",
name: "Qwen: Qwen3 Max Thinking",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "qwen/qwen3-vl-235b-a22b-thinking",
name: "Qwen: Qwen3 VL 235B A22B Thinking",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "qwen/qwen3-vl-8b-instruct",
name: "Qwen: Qwen3 VL 8B Instruct",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "qwen/qwen3.5-397b-a17b",
name: "Qwen: Qwen3.5 397B A17B",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.195,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 65536,
},
ModelEntry {
id: "qwen/qwen3.5-plus-20260420",
name: "Qwen: Qwen3.5 Plus 2026-04-20",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 65536,
},
ModelEntry {
id: "rekaai/reka-edge",
name: "Reka Edge",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 16384,
max_tokens: 16384,
},
ModelEntry {
id: "tencent/hy3-preview:free",
name: "Tencent: Hy3 preview (free)",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 262144,
},
ModelEntry {
id: "upstage/solar-pro-3",
name: "Upstage: Solar Pro 3",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.015,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4096,
},
ModelEntry {
id: "x-ai/grok-4",
name: "xAI: Grok 4",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.75,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 4096,
},
ModelEntry {
id: "x-ai/grok-4.3",
name: "xAI: Grok 4.3",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.19999999999999998,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 4096,
},
ModelEntry {
id: "xiaomi/mimo-v2.5",
name: "Xiaomi: MiMo-V2.5",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 131072,
},
ModelEntry {
id: "z-ai/glm-4.5-air",
name: "Z.ai: GLM 4.5 Air",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.024999999999999998,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 98304,
},
ModelEntry {
id: "z-ai/glm-4.7",
name: "Z.ai: GLM 4.7",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 4096,
},
ModelEntry {
id: "z-ai/glm-5.1",
name: "Z.ai: GLM 5.1",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.5249999999999999,
cost_cache_write: 0.0,
context_window: 202752,
max_tokens: 65535,
},
ModelEntry {
id: "~google/gemini-flash-latest",
name: "Google Gemini Flash Latest",
api: Api::OpenAiCompletions,
provider: "openrouter",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.049999999999999996,
cost_cache_write: 0.08333333333333334,
context_window: 1048576,
max_tokens: 65536,
},
];
static VERCEL_AI_GATEWAY_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "alibaba/qwen-3-14b",
name: "Qwen3-14B",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 40960,
max_tokens: 16384,
},
ModelEntry {
id: "alibaba/qwen3-235b-a22b-thinking",
name: "Qwen3 VL 235B A22B Thinking",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 32768,
},
ModelEntry {
id: "alibaba/qwen3-max",
name: "Qwen3 Max",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.24,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32768,
},
ModelEntry {
id: "alibaba/qwen3.6-27b",
name: "Qwen 3.6 27B",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 256000,
},
ModelEntry {
id: "anthropic/claude-haiku-4.5",
name: "Claude Haiku 4.5",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.09999999999999999,
cost_cache_write: 1.25,
context_window: 200000,
max_tokens: 64000,
},
ModelEntry {
id: "anthropic/claude-sonnet-4",
name: "Claude Sonnet 4",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.3,
cost_cache_write: 3.75,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "bytedance/seed-1.6",
name: "Seed 1.6",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.049999999999999996,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 32000,
},
ModelEntry {
id: "deepseek/deepseek-v3.2",
name: "DeepSeek V3.2",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.028,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 8000,
},
ModelEntry {
id: "google/gemini-2.0-flash-lite",
name: "Gemini 2.0 Flash Lite",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 8192,
},
ModelEntry {
id: "google/gemini-3-pro-preview",
name: "Gemini 3 Pro Preview",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.19999999999999998,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 64000,
},
ModelEntry {
id: "inception/mercury-coder-small",
name: "Mercury Coder Small Beta",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 32000,
max_tokens: 16384,
},
ModelEntry {
id: "meta/llama-3.2-11b",
name: "Llama 3.2 11B Vision Instruct",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 8192,
},
ModelEntry {
id: "minimax/minimax-m2.1",
name: "MiniMax M2.1",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.03,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "minimax/minimax-m2.7-highspeed",
name: "MiniMax M2.7 High Speed",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.06,
cost_cache_write: 0.375,
context_window: 204800,
max_tokens: 131100,
},
ModelEntry {
id: "mistral/ministral-8b",
name: "Ministral 8B",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 4000,
},
ModelEntry {
id: "moonshotai/kimi-k2",
name: "Kimi K2 Instruct",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "moonshotai/kimi-k2.5",
name: "Kimi K2.5",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.09999999999999999,
cost_cache_write: 0.0,
context_window: 262114,
max_tokens: 262114,
},
ModelEntry {
id: "openai/gpt-4.1-mini",
name: "GPT-4.1 mini",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.09999999999999999,
cost_cache_write: 0.0,
context_window: 1047576,
max_tokens: 32768,
},
ModelEntry {
id: "openai/gpt-5-chat",
name: "GPT 5 Chat",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-5.1-codex-max",
name: "GPT 5.1 Codex Max",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.125,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-5.2-chat",
name: "GPT 5.2 Chat",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.175,
cost_cache_write: 0.0,
context_window: 128000,
max_tokens: 16384,
},
ModelEntry {
id: "openai/gpt-5.4-mini",
name: "GPT 5.4 Mini",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 400000,
max_tokens: 128000,
},
ModelEntry {
id: "openai/gpt-oss-20b",
name: "GPT OSS 120B",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "openai/o3-mini",
name: "o3-mini",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.55,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 100000,
},
ModelEntry {
id: "xai/grok-3-fast",
name: "Grok 3 Fast Beta",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 131072,
},
ModelEntry {
id: "xai/grok-4-fast-reasoning",
name: "Grok 4 Fast Reasoning",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.049999999999999996,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 256000,
},
ModelEntry {
id: "xai/grok-4.20-non-reasoning-beta",
name: "Grok 4.20 Beta Non-Reasoning",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.19999999999999998,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 2000000,
},
ModelEntry {
id: "xiaomi/mimo-v2-flash",
name: "MiMo V2 Flash",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 262144,
max_tokens: 32000,
},
ModelEntry {
id: "zai/glm-4.5v",
name: "GLM 4.5V",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.11,
cost_cache_write: 0.0,
context_window: 66000,
max_tokens: 16000,
},
ModelEntry {
id: "zai/glm-4.7-flash",
name: "GLM 4.7 Flash",
api: Api::AnthropicMessages,
provider: "vercel-ai-gateway",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 131000,
},
];
static XAI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "grok-2",
name: "Grok 2",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-2-1212",
name: "Grok 2 (1212)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-2-latest",
name: "Grok 2 Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-2-vision",
name: "Grok 2 Vision",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 4096,
},
ModelEntry {
id: "grok-2-vision-1212",
name: "Grok 2 Vision (1212)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 4096,
},
ModelEntry {
id: "grok-2-vision-latest",
name: "Grok 2 Vision Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 2.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 4096,
},
ModelEntry {
id: "grok-3",
name: "Grok 3",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.75,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-fast",
name: "Grok 3 Fast",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-fast-latest",
name: "Grok 3 Fast Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 1.25,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-latest",
name: "Grok 3 Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.75,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-mini",
name: "Grok 3 Mini",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-mini-fast",
name: "Grok 3 Mini Fast",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-mini-fast-latest",
name: "Grok 3 Mini Fast Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.15,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-3-mini-latest",
name: "Grok 3 Mini Latest",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.075,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 8192,
},
ModelEntry {
id: "grok-4",
name: "Grok 4",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.75,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 64000,
},
ModelEntry {
id: "grok-4-1-fast",
name: "Grok 4.1 Fast",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4-1-fast-non-reasoning",
name: "Grok 4.1 Fast (Non-Reasoning)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4-fast",
name: "Grok 4 Fast",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4-fast-non-reasoning",
name: "Grok 4 Fast (Non-Reasoning)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.05,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4.20-0309-non-reasoning",
name: "Grok 4.20 (Non-Reasoning)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4.20-0309-reasoning",
name: "Grok 4.20 (Reasoning)",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 2000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-4.3",
name: "Grok 4.3",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 30000,
},
ModelEntry {
id: "grok-beta",
name: "Grok Beta",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 5.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 4096,
},
ModelEntry {
id: "grok-code-fast-1",
name: "Grok Code Fast 1",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.02,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 10000,
},
ModelEntry {
id: "grok-vision-beta",
name: "Grok Vision Beta",
api: Api::OpenAiCompletions,
provider: "xai",
reasoning: false,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 5.0,
cost_cache_write: 0.0,
context_window: 8192,
max_tokens: 4096,
},
];
static XIAOMI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "mimo-v2-flash",
name: "MiMo-V2-Flash",
api: Api::AnthropicMessages,
provider: "xiaomi",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.01,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 64000,
},
ModelEntry {
id: "mimo-v2-omni",
name: "MiMo-V2-Omni",
api: Api::AnthropicMessages,
provider: "xiaomi",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 256000,
max_tokens: 128000,
},
ModelEntry {
id: "mimo-v2-pro",
name: "MiMo-V2-Pro",
api: Api::AnthropicMessages,
provider: "xiaomi",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1000000,
max_tokens: 128000,
},
ModelEntry {
id: "mimo-v2.5",
name: "MiMo-V2.5",
api: Api::AnthropicMessages,
provider: "xiaomi",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.08,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 131072,
},
ModelEntry {
id: "mimo-v2.5-pro",
name: "MiMo-V2.5-Pro",
api: Api::AnthropicMessages,
provider: "xiaomi",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.2,
cost_cache_write: 0.0,
context_window: 1048576,
max_tokens: 131072,
},
];
static ZAI_MODELS: &[ModelEntry] = &[
ModelEntry {
id: "glm-4.5-air",
name: "GLM-4.5-Air",
api: Api::OpenAiCompletions,
provider: "zai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 131072,
max_tokens: 98304,
},
ModelEntry {
id: "glm-4.7",
name: "GLM-4.7",
api: Api::OpenAiCompletions,
provider: "zai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 204800,
max_tokens: 131072,
},
ModelEntry {
id: "glm-5-turbo",
name: "GLM-5-Turbo",
api: Api::OpenAiCompletions,
provider: "zai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 131072,
},
ModelEntry {
id: "glm-5.1",
name: "GLM-5.1",
api: Api::OpenAiCompletions,
provider: "zai",
reasoning: true,
input: &[InputModality::Text],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 131072,
},
ModelEntry {
id: "glm-5v-turbo",
name: "glm-5v-turbo",
api: Api::OpenAiCompletions,
provider: "zai",
reasoning: true,
input: &[InputModality::Text, InputModality::Image],
cost_input: 0.0,
cost_output: 0.0,
cost_cache_read: 0.0,
cost_cache_write: 0.0,
context_window: 200000,
max_tokens: 131072,
},
];
static ALL_PROVIDER_MODELS: &[(&str, &[ModelEntry])] = &[
("amazon-bedrock", AMAZON_BEDROCK_MODELS),
("anthropic", ANTHROPIC_MODELS),
("azure-openai-responses", AZURE_OPENAI_RESPONSES_MODELS),
("cerebras", CEREBRAS_MODELS),
("cloudflare-ai-gateway", CLOUDFLARE_AI_GATEWAY_MODELS),
("cloudflare-workers-ai", CLOUDFLARE_WORKERS_AI_MODELS),
("deepseek", DEEPSEEK_MODELS),
("fireworks", FIREWORKS_MODELS),
("github-copilot", GITHUB_COPILOT_MODELS),
("google", GOOGLE_MODELS),
("google-vertex", GOOGLE_VERTEX_MODELS),
("groq", GROQ_MODELS),
("huggingface", HUGGINGFACE_MODELS),
("kimi-coding", KIMI_CODING_MODELS),
("minimax", MINIMAX_MODELS),
("minimax-cn", MINIMAX_CN_MODELS),
("mistral", MISTRAL_MODELS),
("moonshotai", MOONSHOTAI_MODELS),
("moonshotai-cn", MOONSHOTAI_CN_MODELS),
("openai", OPENAI_MODELS),
("openai-codex", OPENAI_CODEX_MODELS),
("opencode", OPENCODE_MODELS),
("opencode-go", OPENCODE_GO_MODELS),
("openrouter", OPENROUTER_MODELS),
("vercel-ai-gateway", VERCEL_AI_GATEWAY_MODELS),
("xai", XAI_MODELS),
("xiaomi", XIAOMI_MODELS),
("zai", ZAI_MODELS),
];
pub fn get_model_entry(provider: &str, id: &str) -> Option<&'static ModelEntry> {
for (prov, models) in ALL_PROVIDER_MODELS.iter() {
if *prov == provider {
return models.iter().find(|m| m.id == id);
}
}
None
}
pub fn get_provider_models(provider: &str) -> &'static [ModelEntry] {
for (prov, models) in ALL_PROVIDER_MODELS.iter() {
if *prov == provider {
return models;
}
}
&[]
}
pub fn get_all_models() -> impl Iterator<Item = &'static ModelEntry> {
ALL_PROVIDER_MODELS
.iter()
.flat_map(|(_, models)| models.iter())
}
pub fn model_count() -> usize {
ALL_PROVIDER_MODELS.iter().map(|(_, m)| m.len()).sum()
}
pub fn get_providers() -> Vec<&'static str> {
ALL_PROVIDER_MODELS.iter().map(|(name, _)| *name).collect()
}
pub fn search_models(pattern: &str) -> Vec<&'static ModelEntry> {
let lower = pattern.to_lowercase();
get_all_models()
.filter(|m| m.id.to_lowercase().contains(&lower) || m.name.to_lowercase().contains(&lower))
.collect()
}
pub fn get_reasoning_models() -> Vec<&'static ModelEntry> {
get_all_models().filter(|m| m.reasoning).collect()
}
pub fn get_vision_models() -> Vec<&'static ModelEntry> {
get_all_models().filter(|m| m.supports_vision()).collect()
}
pub fn get_cheapest_models(limit: usize) -> Vec<&'static ModelEntry> {
let mut all: Vec<_> = get_all_models().collect();
all.sort_by(|a, b| {
a.cost_input
.partial_cmp(&b.cost_input)
.unwrap_or(std::cmp::Ordering::Equal)
});
all.truncate(limit);
all
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_total_model_count() {
let count = model_count();
assert!(count >= 544, "Expected at least 544 models, got {}", count);
}
#[test]
fn test_get_anthropic_model() {
let m = get_model_entry("anthropic", "claude-sonnet-4-20250514");
assert!(m.is_some(), "Claude Sonnet 4 should exist");
let m = m.unwrap();
assert_eq!(m.provider, "anthropic");
assert!(m.reasoning);
assert!(m.supports_vision());
assert!(m.context_window >= 200_000);
}
#[test]
fn test_get_openai_model() {
let m = get_model_entry("openai", "gpt-4o");
assert!(m.is_some(), "GPT-4o should exist");
let m = m.unwrap();
assert_eq!(m.provider, "openai");
assert!(m.supports_vision());
}
#[test]
fn test_provider_models() {
let anthropic = get_provider_models("anthropic");
assert!(!anthropic.is_empty(), "Anthropic should have models");
assert!(anthropic.iter().all(|m| m.provider == "anthropic"));
let unknown = get_provider_models("nonexistent-provider");
assert!(unknown.is_empty());
}
#[test]
fn test_search_models() {
let results = search_models("claude");
assert!(!results.is_empty(), "Should find Claude models");
assert!(results
.iter()
.all(|m| m.name.to_lowercase().contains("claude")
|| m.id.to_lowercase().contains("claude")));
}
#[test]
fn test_cost_calculation() {
let m = get_model_entry("openai", "gpt-4o").unwrap();
let cost = m.calculate_cost(1_000_000, 1_000_000, 0, 0);
let expected = m.cost_input + m.cost_output;
assert!(
(cost - expected).abs() < 0.001,
"Cost calculation mismatch: got {}, expected {}",
cost,
expected
);
}
#[test]
fn test_reasoning_models() {
let reasoning = get_reasoning_models();
assert!(!reasoning.is_empty(), "Should have reasoning models");
assert!(reasoning.iter().all(|m| m.reasoning));
}
#[test]
fn test_vision_models() {
let vision = get_vision_models();
assert!(!vision.is_empty(), "Should have vision models");
assert!(vision.iter().all(|m| m.supports_vision()));
}
#[test]
fn test_all_providers() {
let providers = get_providers();
assert!(providers.contains(&"openai"), "Should have openai");
assert!(providers.contains(&"anthropic"), "Should have anthropic");
assert!(providers.contains(&"google"), "Should have google");
assert!(providers.contains(&"deepseek"), "Should have deepseek");
assert!(providers.len() >= 28, "Should have at least 28 providers");
}
#[test]
fn test_cheapest_models() {
let cheapest = get_cheapest_models(5);
assert_eq!(cheapest.len(), 5);
for i in 1..cheapest.len() {
assert!(cheapest[i].cost_input >= cheapest[i - 1].cost_input);
}
}
}