Skip to main content

oxi_ai/
model_db.rs

1//! Comprehensive model database for oxi-ai
2//!
3//! Contains 934 models across 29 providers.
4//!
5//! # Usage
6//!
7//! ```ignore
8//! use oxi_ai::model_db::{get_model_entry, get_provider_models, get_all_models};
9//!
10//! // Look up a specific model
11//! let entry = get_model_entry("anthropic", "claude-sonnet-4-20250514");
12//! assert!(entry.is_some());
13//!
14//! // Get all models for a provider
15//! let anthropic_models = get_provider_models("anthropic");
16//! assert!(!anthropic_models.is_empty());
17//!
18//! // Iterate all models
19//! let all = get_all_models();
20//! assert!(all.len() > 926);
21//! ```
22
23use std::collections::HashMap;
24use std::sync::OnceLock;
25
26use crate::{Api, InputModality};
27
28/// A static model entry in the database.
29///
30/// Uses `&'static str` references for zero-allocation lookups.
31#[derive(Debug, Clone, Copy, PartialEq)]
32pub struct ModelEntry {
33    /// Model identifier (e.g., "claude-sonnet-4-20250514")
34    pub id: &'static str,
35    /// Human-readable model name (e.g., "Claude Sonnet 4")
36    pub name: &'static str,
37    /// API protocol to use
38    pub api: Api,
39    /// Provider name (e.g., "anthropic", "openai")
40    pub provider: &'static str,
41    /// Whether this model supports reasoning/thinking
42    pub reasoning: bool,
43    /// Supported input modalities
44    pub input: &'static [InputModality],
45    /// Cost per million input tokens (USD)
46    pub cost_input: f64,
47    /// Cost per million output tokens (USD)
48    pub cost_output: f64,
49    /// Cost per million cached read tokens (USD)
50    pub cost_cache_read: f64,
51    /// Cost per million cached write tokens (USD)
52    pub cost_cache_write: f64,
53    /// Maximum context window in tokens
54    pub context_window: u32,
55    /// Maximum output tokens
56    pub max_tokens: u32,
57}
58
59impl ModelEntry {
60    /// Check if this model supports image/vision input
61    pub fn supports_vision(&self) -> bool {
62        self.input.contains(&InputModality::Image)
63    }
64
65    /// Check if this model supports reasoning/thinking
66    pub fn supports_reasoning(&self) -> bool {
67        self.reasoning
68    }
69
70    /// Calculate the cost for a given token usage
71    pub fn calculate_cost(
72        &self,
73        input_tokens: u64,
74        output_tokens: u64,
75        cache_read: u64,
76        cache_write: u64,
77    ) -> f64 {
78        let in_cost = (input_tokens as f64 / 1_000_000.0) * self.cost_input;
79        let out_cost = (output_tokens as f64 / 1_000_000.0) * self.cost_output;
80        let cr_cost = (cache_read as f64 / 1_000_000.0) * self.cost_cache_read;
81        let cw_cost = (cache_write as f64 / 1_000_000.0) * self.cost_cache_write;
82        in_cost + out_cost + cr_cost + cw_cost
83    }
84}
85
86/// amazon-bedrock models (95 entries)
87static AMAZON_BEDROCK_MODELS: &[ModelEntry] = &[
88    ModelEntry {
89        id: "amazon.nova-2-lite-v1:0",
90        name: "Nova 2 Lite",
91        api: Api::BedrockConverseStream,
92        provider: "amazon-bedrock",
93        reasoning: false,
94        input: &[InputModality::Text, InputModality::Image],
95        cost_input: 0.0,
96        cost_output: 0.0,
97        cost_cache_read: 0.0,
98        cost_cache_write: 0.0,
99        context_window: 128000,
100        max_tokens: 4096,
101    },
102    ModelEntry {
103        id: "amazon.nova-lite-v1:0",
104        name: "Nova Lite",
105        api: Api::BedrockConverseStream,
106        provider: "amazon-bedrock",
107        reasoning: false,
108        input: &[InputModality::Text, InputModality::Image],
109        cost_input: 0.0,
110        cost_output: 0.0,
111        cost_cache_read: 0.015,
112        cost_cache_write: 0.0,
113        context_window: 300000,
114        max_tokens: 8192,
115    },
116    ModelEntry {
117        id: "amazon.nova-premier-v1:0",
118        name: "Nova Premier",
119        api: Api::BedrockConverseStream,
120        provider: "amazon-bedrock",
121        reasoning: true,
122        input: &[InputModality::Text, InputModality::Image],
123        cost_input: 0.0,
124        cost_output: 0.0,
125        cost_cache_read: 0.0,
126        cost_cache_write: 0.0,
127        context_window: 1000000,
128        max_tokens: 16384,
129    },
130    ModelEntry {
131        id: "anthropic.claude-3-5-haiku-20241022-v1:0",
132        name: "Claude Haiku 3.5",
133        api: Api::BedrockConverseStream,
134        provider: "amazon-bedrock",
135        reasoning: false,
136        input: &[InputModality::Text, InputModality::Image],
137        cost_input: 0.0,
138        cost_output: 0.0,
139        cost_cache_read: 0.08,
140        cost_cache_write: 1.0,
141        context_window: 200000,
142        max_tokens: 8192,
143    },
144    ModelEntry {
145        id: "anthropic.claude-3-5-sonnet-20241022-v2:0",
146        name: "Claude Sonnet 3.5 v2",
147        api: Api::BedrockConverseStream,
148        provider: "amazon-bedrock",
149        reasoning: false,
150        input: &[InputModality::Text, InputModality::Image],
151        cost_input: 0.0,
152        cost_output: 0.0,
153        cost_cache_read: 0.3,
154        cost_cache_write: 3.75,
155        context_window: 200000,
156        max_tokens: 8192,
157    },
158    ModelEntry {
159        id: "anthropic.claude-3-haiku-20240307-v1:0",
160        name: "Claude Haiku 3",
161        api: Api::BedrockConverseStream,
162        provider: "amazon-bedrock",
163        reasoning: false,
164        input: &[InputModality::Text, InputModality::Image],
165        cost_input: 0.0,
166        cost_output: 0.0,
167        cost_cache_read: 0.0,
168        cost_cache_write: 0.0,
169        context_window: 200000,
170        max_tokens: 4096,
171    },
172    ModelEntry {
173        id: "anthropic.claude-opus-4-1-20250805-v1:0",
174        name: "Claude Opus 4.1",
175        api: Api::BedrockConverseStream,
176        provider: "amazon-bedrock",
177        reasoning: true,
178        input: &[InputModality::Text, InputModality::Image],
179        cost_input: 0.0,
180        cost_output: 0.0,
181        cost_cache_read: 1.5,
182        cost_cache_write: 18.75,
183        context_window: 200000,
184        max_tokens: 32000,
185    },
186    ModelEntry {
187        id: "anthropic.claude-opus-4-5-20251101-v1:0",
188        name: "Claude Opus 4.5",
189        api: Api::BedrockConverseStream,
190        provider: "amazon-bedrock",
191        reasoning: true,
192        input: &[InputModality::Text, InputModality::Image],
193        cost_input: 0.0,
194        cost_output: 0.0,
195        cost_cache_read: 0.5,
196        cost_cache_write: 6.25,
197        context_window: 200000,
198        max_tokens: 64000,
199    },
200    ModelEntry {
201        id: "anthropic.claude-opus-4-6-v1",
202        name: "Claude Opus 4.6",
203        api: Api::BedrockConverseStream,
204        provider: "amazon-bedrock",
205        reasoning: true,
206        input: &[InputModality::Text, InputModality::Image],
207        cost_input: 0.0,
208        cost_output: 0.0,
209        cost_cache_read: 0.5,
210        cost_cache_write: 6.25,
211        context_window: 1000000,
212        max_tokens: 128000,
213    },
214    ModelEntry {
215        id: "anthropic.claude-sonnet-4-20250514-v1:0",
216        name: "Claude Sonnet 4",
217        api: Api::BedrockConverseStream,
218        provider: "amazon-bedrock",
219        reasoning: true,
220        input: &[InputModality::Text, InputModality::Image],
221        cost_input: 0.0,
222        cost_output: 0.0,
223        cost_cache_read: 0.3,
224        cost_cache_write: 3.75,
225        context_window: 200000,
226        max_tokens: 64000,
227    },
228    ModelEntry {
229        id: "anthropic.claude-sonnet-4-6",
230        name: "Claude Sonnet 4.6",
231        api: Api::BedrockConverseStream,
232        provider: "amazon-bedrock",
233        reasoning: true,
234        input: &[InputModality::Text, InputModality::Image],
235        cost_input: 0.0,
236        cost_output: 0.0,
237        cost_cache_read: 0.3,
238        cost_cache_write: 3.75,
239        context_window: 1000000,
240        max_tokens: 64000,
241    },
242    ModelEntry {
243        id: "au.anthropic.claude-sonnet-4-6",
244        name: "AU Anthropic Claude Sonnet 4.6",
245        api: Api::BedrockConverseStream,
246        provider: "amazon-bedrock",
247        reasoning: true,
248        input: &[InputModality::Text, InputModality::Image],
249        cost_input: 0.0,
250        cost_output: 0.0,
251        cost_cache_read: 0.33,
252        cost_cache_write: 4.125,
253        context_window: 1000000,
254        max_tokens: 128000,
255    },
256    ModelEntry {
257        id: "deepseek.v3-v1:0",
258        name: "DeepSeek-V3.1",
259        api: Api::BedrockConverseStream,
260        provider: "amazon-bedrock",
261        reasoning: true,
262        input: &[InputModality::Text],
263        cost_input: 0.0,
264        cost_output: 0.0,
265        cost_cache_read: 0.0,
266        cost_cache_write: 0.0,
267        context_window: 163840,
268        max_tokens: 81920,
269    },
270    ModelEntry {
271        id: "eu.anthropic.claude-haiku-4-5-20251001-v1:0",
272        name: "Claude Haiku 4.5 (EU)",
273        api: Api::BedrockConverseStream,
274        provider: "amazon-bedrock",
275        reasoning: true,
276        input: &[InputModality::Text, InputModality::Image],
277        cost_input: 0.0,
278        cost_output: 0.0,
279        cost_cache_read: 0.1,
280        cost_cache_write: 1.25,
281        context_window: 200000,
282        max_tokens: 64000,
283    },
284    ModelEntry {
285        id: "eu.anthropic.claude-opus-4-6-v1",
286        name: "Claude Opus 4.6 (EU)",
287        api: Api::BedrockConverseStream,
288        provider: "amazon-bedrock",
289        reasoning: true,
290        input: &[InputModality::Text, InputModality::Image],
291        cost_input: 0.0,
292        cost_output: 0.0,
293        cost_cache_read: 0.5,
294        cost_cache_write: 6.25,
295        context_window: 1000000,
296        max_tokens: 128000,
297    },
298    ModelEntry {
299        id: "eu.anthropic.claude-opus-4-7",
300        name: "Claude Opus 4.7 (EU)",
301        api: Api::BedrockConverseStream,
302        provider: "amazon-bedrock",
303        reasoning: true,
304        input: &[InputModality::Text, InputModality::Image],
305        cost_input: 0.0,
306        cost_output: 0.0,
307        cost_cache_read: 0.5,
308        cost_cache_write: 6.25,
309        context_window: 1000000,
310        max_tokens: 128000,
311    },
312    ModelEntry {
313        id: "eu.anthropic.claude-sonnet-4-5-20250929-v1:0",
314        name: "Claude Sonnet 4.5 (EU)",
315        api: Api::BedrockConverseStream,
316        provider: "amazon-bedrock",
317        reasoning: true,
318        input: &[InputModality::Text, InputModality::Image],
319        cost_input: 0.0,
320        cost_output: 0.0,
321        cost_cache_read: 0.3,
322        cost_cache_write: 3.75,
323        context_window: 200000,
324        max_tokens: 64000,
325    },
326    ModelEntry {
327        id: "global.anthropic.claude-haiku-4-5-20251001-v1:0",
328        name: "Claude Haiku 4.5 (Global)",
329        api: Api::BedrockConverseStream,
330        provider: "amazon-bedrock",
331        reasoning: true,
332        input: &[InputModality::Text, InputModality::Image],
333        cost_input: 0.0,
334        cost_output: 0.0,
335        cost_cache_read: 0.1,
336        cost_cache_write: 1.25,
337        context_window: 200000,
338        max_tokens: 64000,
339    },
340    ModelEntry {
341        id: "global.anthropic.claude-opus-4-6-v1",
342        name: "Claude Opus 4.6 (Global)",
343        api: Api::BedrockConverseStream,
344        provider: "amazon-bedrock",
345        reasoning: true,
346        input: &[InputModality::Text, InputModality::Image],
347        cost_input: 0.0,
348        cost_output: 0.0,
349        cost_cache_read: 0.5,
350        cost_cache_write: 6.25,
351        context_window: 1000000,
352        max_tokens: 128000,
353    },
354    ModelEntry {
355        id: "global.anthropic.claude-sonnet-4-20250514-v1:0",
356        name: "Claude Sonnet 4 (Global)",
357        api: Api::BedrockConverseStream,
358        provider: "amazon-bedrock",
359        reasoning: true,
360        input: &[InputModality::Text, InputModality::Image],
361        cost_input: 0.0,
362        cost_output: 0.0,
363        cost_cache_read: 0.3,
364        cost_cache_write: 3.75,
365        context_window: 200000,
366        max_tokens: 64000,
367    },
368    ModelEntry {
369        id: "global.anthropic.claude-sonnet-4-6",
370        name: "Claude Sonnet 4.6 (Global)",
371        api: Api::BedrockConverseStream,
372        provider: "amazon-bedrock",
373        reasoning: true,
374        input: &[InputModality::Text, InputModality::Image],
375        cost_input: 0.0,
376        cost_output: 0.0,
377        cost_cache_read: 0.3,
378        cost_cache_write: 3.75,
379        context_window: 1000000,
380        max_tokens: 64000,
381    },
382    ModelEntry {
383        id: "google.gemma-3-4b-it",
384        name: "Gemma 3 4B IT",
385        api: Api::BedrockConverseStream,
386        provider: "amazon-bedrock",
387        reasoning: false,
388        input: &[InputModality::Text, InputModality::Image],
389        cost_input: 0.0,
390        cost_output: 0.0,
391        cost_cache_read: 0.0,
392        cost_cache_write: 0.0,
393        context_window: 128000,
394        max_tokens: 4096,
395    },
396    ModelEntry {
397        id: "meta.llama3-1-405b-instruct-v1:0",
398        name: "Llama 3.1 405B Instruct",
399        api: Api::BedrockConverseStream,
400        provider: "amazon-bedrock",
401        reasoning: false,
402        input: &[InputModality::Text],
403        cost_input: 0.0,
404        cost_output: 0.0,
405        cost_cache_read: 0.0,
406        cost_cache_write: 0.0,
407        context_window: 128000,
408        max_tokens: 4096,
409    },
410    ModelEntry {
411        id: "meta.llama3-1-8b-instruct-v1:0",
412        name: "Llama 3.1 8B Instruct",
413        api: Api::BedrockConverseStream,
414        provider: "amazon-bedrock",
415        reasoning: false,
416        input: &[InputModality::Text],
417        cost_input: 0.0,
418        cost_output: 0.0,
419        cost_cache_read: 0.0,
420        cost_cache_write: 0.0,
421        context_window: 128000,
422        max_tokens: 4096,
423    },
424    ModelEntry {
425        id: "meta.llama3-2-1b-instruct-v1:0",
426        name: "Llama 3.2 1B Instruct",
427        api: Api::BedrockConverseStream,
428        provider: "amazon-bedrock",
429        reasoning: false,
430        input: &[InputModality::Text],
431        cost_input: 0.0,
432        cost_output: 0.0,
433        cost_cache_read: 0.0,
434        cost_cache_write: 0.0,
435        context_window: 131000,
436        max_tokens: 4096,
437    },
438    ModelEntry {
439        id: "meta.llama3-2-90b-instruct-v1:0",
440        name: "Llama 3.2 90B Instruct",
441        api: Api::BedrockConverseStream,
442        provider: "amazon-bedrock",
443        reasoning: false,
444        input: &[InputModality::Text, InputModality::Image],
445        cost_input: 0.0,
446        cost_output: 0.0,
447        cost_cache_read: 0.0,
448        cost_cache_write: 0.0,
449        context_window: 128000,
450        max_tokens: 4096,
451    },
452    ModelEntry {
453        id: "meta.llama4-maverick-17b-instruct-v1:0",
454        name: "Llama 4 Maverick 17B Instruct",
455        api: Api::BedrockConverseStream,
456        provider: "amazon-bedrock",
457        reasoning: false,
458        input: &[InputModality::Text, InputModality::Image],
459        cost_input: 0.0,
460        cost_output: 0.0,
461        cost_cache_read: 0.0,
462        cost_cache_write: 0.0,
463        context_window: 1000000,
464        max_tokens: 16384,
465    },
466    ModelEntry {
467        id: "minimax.minimax-m2",
468        name: "MiniMax M2",
469        api: Api::BedrockConverseStream,
470        provider: "amazon-bedrock",
471        reasoning: true,
472        input: &[InputModality::Text],
473        cost_input: 0.0,
474        cost_output: 0.0,
475        cost_cache_read: 0.0,
476        cost_cache_write: 0.0,
477        context_window: 204608,
478        max_tokens: 128000,
479    },
480    ModelEntry {
481        id: "minimax.minimax-m2.5",
482        name: "MiniMax M2.5",
483        api: Api::BedrockConverseStream,
484        provider: "amazon-bedrock",
485        reasoning: true,
486        input: &[InputModality::Text],
487        cost_input: 0.0,
488        cost_output: 0.0,
489        cost_cache_read: 0.0,
490        cost_cache_write: 0.0,
491        context_window: 196608,
492        max_tokens: 98304,
493    },
494    ModelEntry {
495        id: "mistral.devstral-2-123b",
496        name: "Devstral 2 123B",
497        api: Api::BedrockConverseStream,
498        provider: "amazon-bedrock",
499        reasoning: false,
500        input: &[InputModality::Text],
501        cost_input: 0.0,
502        cost_output: 0.0,
503        cost_cache_read: 0.0,
504        cost_cache_write: 0.0,
505        context_window: 256000,
506        max_tokens: 8192,
507    },
508    ModelEntry {
509        id: "mistral.ministral-3-14b-instruct",
510        name: "Ministral 14B 3.0",
511        api: Api::BedrockConverseStream,
512        provider: "amazon-bedrock",
513        reasoning: false,
514        input: &[InputModality::Text],
515        cost_input: 0.0,
516        cost_output: 0.0,
517        cost_cache_read: 0.0,
518        cost_cache_write: 0.0,
519        context_window: 128000,
520        max_tokens: 4096,
521    },
522    ModelEntry {
523        id: "mistral.ministral-3-8b-instruct",
524        name: "Ministral 3 8B",
525        api: Api::BedrockConverseStream,
526        provider: "amazon-bedrock",
527        reasoning: false,
528        input: &[InputModality::Text],
529        cost_input: 0.0,
530        cost_output: 0.0,
531        cost_cache_read: 0.0,
532        cost_cache_write: 0.0,
533        context_window: 128000,
534        max_tokens: 4096,
535    },
536    ModelEntry {
537        id: "mistral.pixtral-large-2502-v1:0",
538        name: "Pixtral Large (25.02)",
539        api: Api::BedrockConverseStream,
540        provider: "amazon-bedrock",
541        reasoning: false,
542        input: &[InputModality::Text, InputModality::Image],
543        cost_input: 0.0,
544        cost_output: 0.0,
545        cost_cache_read: 0.0,
546        cost_cache_write: 0.0,
547        context_window: 128000,
548        max_tokens: 8192,
549    },
550    ModelEntry {
551        id: "mistral.voxtral-small-24b-2507",
552        name: "Voxtral Small 24B 2507",
553        api: Api::BedrockConverseStream,
554        provider: "amazon-bedrock",
555        reasoning: false,
556        input: &[InputModality::Text],
557        cost_input: 0.0,
558        cost_output: 0.0,
559        cost_cache_read: 0.0,
560        cost_cache_write: 0.0,
561        context_window: 32000,
562        max_tokens: 8192,
563    },
564    ModelEntry {
565        id: "moonshotai.kimi-k2.5",
566        name: "Kimi K2.5",
567        api: Api::BedrockConverseStream,
568        provider: "amazon-bedrock",
569        reasoning: true,
570        input: &[InputModality::Text, InputModality::Image],
571        cost_input: 0.0,
572        cost_output: 0.0,
573        cost_cache_read: 0.0,
574        cost_cache_write: 0.0,
575        context_window: 256000,
576        max_tokens: 256000,
577    },
578    ModelEntry {
579        id: "nvidia.nemotron-nano-3-30b",
580        name: "NVIDIA Nemotron Nano 3 30B",
581        api: Api::BedrockConverseStream,
582        provider: "amazon-bedrock",
583        reasoning: true,
584        input: &[InputModality::Text],
585        cost_input: 0.0,
586        cost_output: 0.0,
587        cost_cache_read: 0.0,
588        cost_cache_write: 0.0,
589        context_window: 128000,
590        max_tokens: 4096,
591    },
592    ModelEntry {
593        id: "nvidia.nemotron-nano-9b-v2",
594        name: "NVIDIA Nemotron Nano 9B v2",
595        api: Api::BedrockConverseStream,
596        provider: "amazon-bedrock",
597        reasoning: false,
598        input: &[InputModality::Text],
599        cost_input: 0.0,
600        cost_output: 0.0,
601        cost_cache_read: 0.0,
602        cost_cache_write: 0.0,
603        context_window: 128000,
604        max_tokens: 4096,
605    },
606    ModelEntry {
607        id: "openai.gpt-oss-120b-1:0",
608        name: "gpt-oss-120b",
609        api: Api::BedrockConverseStream,
610        provider: "amazon-bedrock",
611        reasoning: false,
612        input: &[InputModality::Text],
613        cost_input: 0.0,
614        cost_output: 0.0,
615        cost_cache_read: 0.0,
616        cost_cache_write: 0.0,
617        context_window: 128000,
618        max_tokens: 4096,
619    },
620    ModelEntry {
621        id: "openai.gpt-oss-safeguard-120b",
622        name: "GPT OSS Safeguard 120B",
623        api: Api::BedrockConverseStream,
624        provider: "amazon-bedrock",
625        reasoning: false,
626        input: &[InputModality::Text],
627        cost_input: 0.0,
628        cost_output: 0.0,
629        cost_cache_read: 0.0,
630        cost_cache_write: 0.0,
631        context_window: 128000,
632        max_tokens: 4096,
633    },
634    ModelEntry {
635        id: "qwen.qwen3-235b-a22b-2507-v1:0",
636        name: "Qwen3 235B A22B 2507",
637        api: Api::BedrockConverseStream,
638        provider: "amazon-bedrock",
639        reasoning: false,
640        input: &[InputModality::Text],
641        cost_input: 0.0,
642        cost_output: 0.0,
643        cost_cache_read: 0.0,
644        cost_cache_write: 0.0,
645        context_window: 262144,
646        max_tokens: 131072,
647    },
648    ModelEntry {
649        id: "qwen.qwen3-coder-30b-a3b-v1:0",
650        name: "Qwen3 Coder 30B A3B Instruct",
651        api: Api::BedrockConverseStream,
652        provider: "amazon-bedrock",
653        reasoning: false,
654        input: &[InputModality::Text],
655        cost_input: 0.0,
656        cost_output: 0.0,
657        cost_cache_read: 0.0,
658        cost_cache_write: 0.0,
659        context_window: 262144,
660        max_tokens: 131072,
661    },
662    ModelEntry {
663        id: "qwen.qwen3-coder-next",
664        name: "Qwen3 Coder Next",
665        api: Api::BedrockConverseStream,
666        provider: "amazon-bedrock",
667        reasoning: true,
668        input: &[InputModality::Text],
669        cost_input: 0.0,
670        cost_output: 0.0,
671        cost_cache_read: 0.0,
672        cost_cache_write: 0.0,
673        context_window: 131072,
674        max_tokens: 65536,
675    },
676    ModelEntry {
677        id: "qwen.qwen3-vl-235b-a22b",
678        name: "Qwen/Qwen3-VL-235B-A22B-Instruct",
679        api: Api::BedrockConverseStream,
680        provider: "amazon-bedrock",
681        reasoning: false,
682        input: &[InputModality::Text, InputModality::Image],
683        cost_input: 0.0,
684        cost_output: 0.0,
685        cost_cache_read: 0.0,
686        cost_cache_write: 0.0,
687        context_window: 262000,
688        max_tokens: 262000,
689    },
690    ModelEntry {
691        id: "us.anthropic.claude-haiku-4-5-20251001-v1:0",
692        name: "Claude Haiku 4.5 (US)",
693        api: Api::BedrockConverseStream,
694        provider: "amazon-bedrock",
695        reasoning: true,
696        input: &[InputModality::Text, InputModality::Image],
697        cost_input: 0.0,
698        cost_output: 0.0,
699        cost_cache_read: 0.1,
700        cost_cache_write: 1.25,
701        context_window: 200000,
702        max_tokens: 64000,
703    },
704    ModelEntry {
705        id: "us.anthropic.claude-opus-4-20250514-v1:0",
706        name: "Claude Opus 4 (US)",
707        api: Api::BedrockConverseStream,
708        provider: "amazon-bedrock",
709        reasoning: true,
710        input: &[InputModality::Text, InputModality::Image],
711        cost_input: 0.0,
712        cost_output: 0.0,
713        cost_cache_read: 1.5,
714        cost_cache_write: 18.75,
715        context_window: 200000,
716        max_tokens: 32000,
717    },
718    ModelEntry {
719        id: "us.anthropic.claude-opus-4-6-v1",
720        name: "Claude Opus 4.6 (US)",
721        api: Api::BedrockConverseStream,
722        provider: "amazon-bedrock",
723        reasoning: true,
724        input: &[InputModality::Text, InputModality::Image],
725        cost_input: 0.0,
726        cost_output: 0.0,
727        cost_cache_read: 0.5,
728        cost_cache_write: 6.25,
729        context_window: 1000000,
730        max_tokens: 128000,
731    },
732    ModelEntry {
733        id: "us.anthropic.claude-sonnet-4-20250514-v1:0",
734        name: "Claude Sonnet 4 (US)",
735        api: Api::BedrockConverseStream,
736        provider: "amazon-bedrock",
737        reasoning: true,
738        input: &[InputModality::Text, InputModality::Image],
739        cost_input: 0.0,
740        cost_output: 0.0,
741        cost_cache_read: 0.3,
742        cost_cache_write: 3.75,
743        context_window: 200000,
744        max_tokens: 64000,
745    },
746    ModelEntry {
747        id: "us.anthropic.claude-sonnet-4-6",
748        name: "Claude Sonnet 4.6 (US)",
749        api: Api::BedrockConverseStream,
750        provider: "amazon-bedrock",
751        reasoning: true,
752        input: &[InputModality::Text, InputModality::Image],
753        cost_input: 0.0,
754        cost_output: 0.0,
755        cost_cache_read: 0.3,
756        cost_cache_write: 3.75,
757        context_window: 1000000,
758        max_tokens: 64000,
759    },
760    ModelEntry {
761        id: "writer.palmyra-x5-v1:0",
762        name: "Palmyra X5",
763        api: Api::BedrockConverseStream,
764        provider: "amazon-bedrock",
765        reasoning: true,
766        input: &[InputModality::Text],
767        cost_input: 0.0,
768        cost_output: 0.0,
769        cost_cache_read: 0.0,
770        cost_cache_write: 0.0,
771        context_window: 1040000,
772        max_tokens: 8192,
773    },
774    ModelEntry {
775        id: "zai.glm-4.7-flash",
776        name: "GLM-4.7-Flash",
777        api: Api::BedrockConverseStream,
778        provider: "amazon-bedrock",
779        reasoning: true,
780        input: &[InputModality::Text],
781        cost_input: 0.0,
782        cost_output: 0.0,
783        cost_cache_read: 0.0,
784        cost_cache_write: 0.0,
785        context_window: 200000,
786        max_tokens: 131072,
787    },
788    ModelEntry {
789        id: "amazon.nova-micro-v1:0",
790        name: "Nova Micro",
791        api: Api::BedrockConverseStream,
792        provider: "amazon-bedrock",
793        reasoning: false,
794        input: &[InputModality::Text],
795        cost_input: 0.035,
796        cost_output: 0.14,
797        cost_cache_read: 0.00875,
798        cost_cache_write: 0.0,
799        context_window: 128000,
800        max_tokens: 8192,
801    },
802    ModelEntry {
803        id: "amazon.nova-pro-v1:0",
804        name: "Nova Pro",
805        api: Api::BedrockConverseStream,
806        provider: "amazon-bedrock",
807        reasoning: false,
808        input: &[InputModality::Text, InputModality::Image],
809        cost_input: 0.8,
810        cost_output: 3.2,
811        cost_cache_read: 0.2,
812        cost_cache_write: 0.0,
813        context_window: 300000,
814        max_tokens: 8192,
815    },
816    ModelEntry {
817        id: "anthropic.claude-haiku-4-5-20251001-v1:0",
818        name: "Claude Haiku 4.5",
819        api: Api::BedrockConverseStream,
820        provider: "amazon-bedrock",
821        reasoning: true,
822        input: &[InputModality::Text, InputModality::Image],
823        cost_input: 1.0,
824        cost_output: 5.0,
825        cost_cache_read: 0.1,
826        cost_cache_write: 1.25,
827        context_window: 200000,
828        max_tokens: 64000,
829    },
830    ModelEntry {
831        id: "anthropic.claude-opus-4-7",
832        name: "Claude Opus 4.7",
833        api: Api::BedrockConverseStream,
834        provider: "amazon-bedrock",
835        reasoning: true,
836        input: &[InputModality::Text, InputModality::Image],
837        cost_input: 5.0,
838        cost_output: 25.0,
839        cost_cache_read: 0.5,
840        cost_cache_write: 6.25,
841        context_window: 1000000,
842        max_tokens: 128000,
843    },
844    ModelEntry {
845        id: "anthropic.claude-sonnet-4-5-20250929-v1:0",
846        name: "Claude Sonnet 4.5",
847        api: Api::BedrockConverseStream,
848        provider: "amazon-bedrock",
849        reasoning: true,
850        input: &[InputModality::Text, InputModality::Image],
851        cost_input: 3.0,
852        cost_output: 15.0,
853        cost_cache_read: 0.3,
854        cost_cache_write: 3.75,
855        context_window: 200000,
856        max_tokens: 64000,
857    },
858    ModelEntry {
859        id: "au.anthropic.claude-haiku-4-5-20251001-v1:0",
860        name: "Claude Haiku 4.5 (AU)",
861        api: Api::BedrockConverseStream,
862        provider: "amazon-bedrock",
863        reasoning: true,
864        input: &[InputModality::Text, InputModality::Image],
865        cost_input: 1.0,
866        cost_output: 5.0,
867        cost_cache_read: 0.1,
868        cost_cache_write: 1.25,
869        context_window: 200000,
870        max_tokens: 64000,
871    },
872    ModelEntry {
873        id: "au.anthropic.claude-opus-4-6-v1",
874        name: "AU Anthropic Claude Opus 4.6",
875        api: Api::BedrockConverseStream,
876        provider: "amazon-bedrock",
877        reasoning: true,
878        input: &[InputModality::Text, InputModality::Image],
879        cost_input: 16.5,
880        cost_output: 82.5,
881        cost_cache_read: 0.5,
882        cost_cache_write: 6.25,
883        context_window: 1000000,
884        max_tokens: 128000,
885    },
886    ModelEntry {
887        id: "au.anthropic.claude-sonnet-4-5-20250929-v1:0",
888        name: "Claude Sonnet 4.5 (AU)",
889        api: Api::BedrockConverseStream,
890        provider: "amazon-bedrock",
891        reasoning: true,
892        input: &[InputModality::Text, InputModality::Image],
893        cost_input: 3.0,
894        cost_output: 15.0,
895        cost_cache_read: 0.3,
896        cost_cache_write: 3.75,
897        context_window: 200000,
898        max_tokens: 64000,
899    },
900    ModelEntry {
901        id: "deepseek.r1-v1:0",
902        name: "DeepSeek-R1",
903        api: Api::BedrockConverseStream,
904        provider: "amazon-bedrock",
905        reasoning: true,
906        input: &[InputModality::Text],
907        cost_input: 1.35,
908        cost_output: 5.4,
909        cost_cache_read: 0.0,
910        cost_cache_write: 0.0,
911        context_window: 128000,
912        max_tokens: 32768,
913    },
914    ModelEntry {
915        id: "deepseek.v3.2",
916        name: "DeepSeek-V3.2",
917        api: Api::BedrockConverseStream,
918        provider: "amazon-bedrock",
919        reasoning: true,
920        input: &[InputModality::Text],
921        cost_input: 0.62,
922        cost_output: 1.85,
923        cost_cache_read: 0.0,
924        cost_cache_write: 0.0,
925        context_window: 163840,
926        max_tokens: 81920,
927    },
928    ModelEntry {
929        id: "eu.anthropic.claude-opus-4-5-20251101-v1:0",
930        name: "Claude Opus 4.5 (EU)",
931        api: Api::BedrockConverseStream,
932        provider: "amazon-bedrock",
933        reasoning: true,
934        input: &[InputModality::Text, InputModality::Image],
935        cost_input: 5.0,
936        cost_output: 25.0,
937        cost_cache_read: 0.5,
938        cost_cache_write: 6.25,
939        context_window: 200000,
940        max_tokens: 64000,
941    },
942    ModelEntry {
943        id: "eu.anthropic.claude-sonnet-4-6",
944        name: "Claude Sonnet 4.6 (EU)",
945        api: Api::BedrockConverseStream,
946        provider: "amazon-bedrock",
947        reasoning: true,
948        input: &[InputModality::Text, InputModality::Image],
949        cost_input: 3.0,
950        cost_output: 15.0,
951        cost_cache_read: 0.3,
952        cost_cache_write: 3.75,
953        context_window: 1000000,
954        max_tokens: 64000,
955    },
956    ModelEntry {
957        id: "global.anthropic.claude-opus-4-5-20251101-v1:0",
958        name: "Claude Opus 4.5 (Global)",
959        api: Api::BedrockConverseStream,
960        provider: "amazon-bedrock",
961        reasoning: true,
962        input: &[InputModality::Text, InputModality::Image],
963        cost_input: 5.0,
964        cost_output: 25.0,
965        cost_cache_read: 0.5,
966        cost_cache_write: 6.25,
967        context_window: 200000,
968        max_tokens: 64000,
969    },
970    ModelEntry {
971        id: "global.anthropic.claude-opus-4-7",
972        name: "Claude Opus 4.7 (Global)",
973        api: Api::BedrockConverseStream,
974        provider: "amazon-bedrock",
975        reasoning: true,
976        input: &[InputModality::Text, InputModality::Image],
977        cost_input: 5.0,
978        cost_output: 25.0,
979        cost_cache_read: 0.5,
980        cost_cache_write: 6.25,
981        context_window: 1000000,
982        max_tokens: 128000,
983    },
984    ModelEntry {
985        id: "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
986        name: "Claude Sonnet 4.5 (Global)",
987        api: Api::BedrockConverseStream,
988        provider: "amazon-bedrock",
989        reasoning: true,
990        input: &[InputModality::Text, InputModality::Image],
991        cost_input: 3.0,
992        cost_output: 15.0,
993        cost_cache_read: 0.3,
994        cost_cache_write: 3.75,
995        context_window: 200000,
996        max_tokens: 64000,
997    },
998    ModelEntry {
999        id: "google.gemma-3-27b-it",
1000        name: "Google Gemma 3 27B Instruct",
1001        api: Api::BedrockConverseStream,
1002        provider: "amazon-bedrock",
1003        reasoning: false,
1004        input: &[InputModality::Text, InputModality::Image],
1005        cost_input: 0.12,
1006        cost_output: 0.2,
1007        cost_cache_read: 0.0,
1008        cost_cache_write: 0.0,
1009        context_window: 202752,
1010        max_tokens: 8192,
1011    },
1012    ModelEntry {
1013        id: "jp.anthropic.claude-opus-4-7",
1014        name: "Claude Opus 4.7 (JP)",
1015        api: Api::BedrockConverseStream,
1016        provider: "amazon-bedrock",
1017        reasoning: true,
1018        input: &[InputModality::Text, InputModality::Image],
1019        cost_input: 5.0,
1020        cost_output: 25.0,
1021        cost_cache_read: 0.5,
1022        cost_cache_write: 6.25,
1023        context_window: 1000000,
1024        max_tokens: 128000,
1025    },
1026    ModelEntry {
1027        id: "jp.anthropic.claude-sonnet-4-5-20250929-v1:0",
1028        name: "Claude Sonnet 4.5 (JP)",
1029        api: Api::BedrockConverseStream,
1030        provider: "amazon-bedrock",
1031        reasoning: true,
1032        input: &[InputModality::Text, InputModality::Image],
1033        cost_input: 3.0,
1034        cost_output: 15.0,
1035        cost_cache_read: 0.3,
1036        cost_cache_write: 3.75,
1037        context_window: 200000,
1038        max_tokens: 64000,
1039    },
1040    ModelEntry {
1041        id: "jp.anthropic.claude-sonnet-4-6",
1042        name: "Claude Sonnet 4.6 (JP)",
1043        api: Api::BedrockConverseStream,
1044        provider: "amazon-bedrock",
1045        reasoning: true,
1046        input: &[InputModality::Text, InputModality::Image],
1047        cost_input: 3.0,
1048        cost_output: 15.0,
1049        cost_cache_read: 0.3,
1050        cost_cache_write: 3.75,
1051        context_window: 1000000,
1052        max_tokens: 64000,
1053    },
1054    ModelEntry {
1055        id: "meta.llama3-1-70b-instruct-v1:0",
1056        name: "Llama 3.1 70B Instruct",
1057        api: Api::BedrockConverseStream,
1058        provider: "amazon-bedrock",
1059        reasoning: false,
1060        input: &[InputModality::Text],
1061        cost_input: 0.72,
1062        cost_output: 0.72,
1063        cost_cache_read: 0.0,
1064        cost_cache_write: 0.0,
1065        context_window: 128000,
1066        max_tokens: 4096,
1067    },
1068    ModelEntry {
1069        id: "meta.llama3-3-70b-instruct-v1:0",
1070        name: "Llama 3.3 70B Instruct",
1071        api: Api::BedrockConverseStream,
1072        provider: "amazon-bedrock",
1073        reasoning: false,
1074        input: &[InputModality::Text],
1075        cost_input: 0.72,
1076        cost_output: 0.72,
1077        cost_cache_read: 0.0,
1078        cost_cache_write: 0.0,
1079        context_window: 128000,
1080        max_tokens: 4096,
1081    },
1082    ModelEntry {
1083        id: "meta.llama4-scout-17b-instruct-v1:0",
1084        name: "Llama 4 Scout 17B Instruct",
1085        api: Api::BedrockConverseStream,
1086        provider: "amazon-bedrock",
1087        reasoning: false,
1088        input: &[InputModality::Text, InputModality::Image],
1089        cost_input: 0.17,
1090        cost_output: 0.66,
1091        cost_cache_read: 0.0,
1092        cost_cache_write: 0.0,
1093        context_window: 3500000,
1094        max_tokens: 16384,
1095    },
1096    ModelEntry {
1097        id: "minimax.minimax-m2.1",
1098        name: "MiniMax M2.1",
1099        api: Api::BedrockConverseStream,
1100        provider: "amazon-bedrock",
1101        reasoning: true,
1102        input: &[InputModality::Text],
1103        cost_input: 0.3,
1104        cost_output: 1.2,
1105        cost_cache_read: 0.0,
1106        cost_cache_write: 0.0,
1107        context_window: 204800,
1108        max_tokens: 131072,
1109    },
1110    ModelEntry {
1111        id: "mistral.magistral-small-2509",
1112        name: "Magistral Small 1.2",
1113        api: Api::BedrockConverseStream,
1114        provider: "amazon-bedrock",
1115        reasoning: true,
1116        input: &[InputModality::Text, InputModality::Image],
1117        cost_input: 0.5,
1118        cost_output: 1.5,
1119        cost_cache_read: 0.0,
1120        cost_cache_write: 0.0,
1121        context_window: 128000,
1122        max_tokens: 40000,
1123    },
1124    ModelEntry {
1125        id: "mistral.ministral-3-3b-instruct",
1126        name: "Ministral 3 3B",
1127        api: Api::BedrockConverseStream,
1128        provider: "amazon-bedrock",
1129        reasoning: false,
1130        input: &[InputModality::Text, InputModality::Image],
1131        cost_input: 0.1,
1132        cost_output: 0.1,
1133        cost_cache_read: 0.0,
1134        cost_cache_write: 0.0,
1135        context_window: 256000,
1136        max_tokens: 8192,
1137    },
1138    ModelEntry {
1139        id: "mistral.mistral-large-3-675b-instruct",
1140        name: "Mistral Large 3",
1141        api: Api::BedrockConverseStream,
1142        provider: "amazon-bedrock",
1143        reasoning: false,
1144        input: &[InputModality::Text, InputModality::Image],
1145        cost_input: 0.5,
1146        cost_output: 1.5,
1147        cost_cache_read: 0.0,
1148        cost_cache_write: 0.0,
1149        context_window: 256000,
1150        max_tokens: 8192,
1151    },
1152    ModelEntry {
1153        id: "mistral.voxtral-mini-3b-2507",
1154        name: "Voxtral Mini 3B 2507",
1155        api: Api::BedrockConverseStream,
1156        provider: "amazon-bedrock",
1157        reasoning: false,
1158        input: &[InputModality::Text],
1159        cost_input: 0.04,
1160        cost_output: 0.04,
1161        cost_cache_read: 0.0,
1162        cost_cache_write: 0.0,
1163        context_window: 128000,
1164        max_tokens: 4096,
1165    },
1166    ModelEntry {
1167        id: "moonshot.kimi-k2-thinking",
1168        name: "Kimi K2 Thinking",
1169        api: Api::BedrockConverseStream,
1170        provider: "amazon-bedrock",
1171        reasoning: true,
1172        input: &[InputModality::Text],
1173        cost_input: 0.6,
1174        cost_output: 2.5,
1175        cost_cache_read: 0.0,
1176        cost_cache_write: 0.0,
1177        context_window: 262143,
1178        max_tokens: 16000,
1179    },
1180    ModelEntry {
1181        id: "nvidia.nemotron-nano-12b-v2",
1182        name: "NVIDIA Nemotron Nano 12B v2 VL BF16",
1183        api: Api::BedrockConverseStream,
1184        provider: "amazon-bedrock",
1185        reasoning: false,
1186        input: &[InputModality::Text, InputModality::Image],
1187        cost_input: 0.2,
1188        cost_output: 0.6,
1189        cost_cache_read: 0.0,
1190        cost_cache_write: 0.0,
1191        context_window: 128000,
1192        max_tokens: 4096,
1193    },
1194    ModelEntry {
1195        id: "nvidia.nemotron-super-3-120b",
1196        name: "NVIDIA Nemotron 3 Super 120B A12B",
1197        api: Api::BedrockConverseStream,
1198        provider: "amazon-bedrock",
1199        reasoning: true,
1200        input: &[InputModality::Text],
1201        cost_input: 0.15,
1202        cost_output: 0.65,
1203        cost_cache_read: 0.0,
1204        cost_cache_write: 0.0,
1205        context_window: 262144,
1206        max_tokens: 131072,
1207    },
1208    ModelEntry {
1209        id: "openai.gpt-oss-20b-1:0",
1210        name: "gpt-oss-20b",
1211        api: Api::BedrockConverseStream,
1212        provider: "amazon-bedrock",
1213        reasoning: false,
1214        input: &[InputModality::Text],
1215        cost_input: 0.07,
1216        cost_output: 0.3,
1217        cost_cache_read: 0.0,
1218        cost_cache_write: 0.0,
1219        context_window: 128000,
1220        max_tokens: 16384,
1221    },
1222    ModelEntry {
1223        id: "openai.gpt-oss-safeguard-20b",
1224        name: "GPT OSS Safeguard 20B",
1225        api: Api::BedrockConverseStream,
1226        provider: "amazon-bedrock",
1227        reasoning: false,
1228        input: &[InputModality::Text],
1229        cost_input: 0.07,
1230        cost_output: 0.2,
1231        cost_cache_read: 0.0,
1232        cost_cache_write: 0.0,
1233        context_window: 128000,
1234        max_tokens: 16384,
1235    },
1236    ModelEntry {
1237        id: "qwen.qwen3-32b-v1:0",
1238        name: "Qwen3 32B (dense)",
1239        api: Api::BedrockConverseStream,
1240        provider: "amazon-bedrock",
1241        reasoning: true,
1242        input: &[InputModality::Text],
1243        cost_input: 0.15,
1244        cost_output: 0.6,
1245        cost_cache_read: 0.0,
1246        cost_cache_write: 0.0,
1247        context_window: 16384,
1248        max_tokens: 16384,
1249    },
1250    ModelEntry {
1251        id: "qwen.qwen3-coder-480b-a35b-v1:0",
1252        name: "Qwen3 Coder 480B A35B Instruct",
1253        api: Api::BedrockConverseStream,
1254        provider: "amazon-bedrock",
1255        reasoning: false,
1256        input: &[InputModality::Text],
1257        cost_input: 0.22,
1258        cost_output: 1.8,
1259        cost_cache_read: 0.0,
1260        cost_cache_write: 0.0,
1261        context_window: 131072,
1262        max_tokens: 65536,
1263    },
1264    ModelEntry {
1265        id: "qwen.qwen3-next-80b-a3b",
1266        name: "Qwen/Qwen3-Next-80B-A3B-Instruct",
1267        api: Api::BedrockConverseStream,
1268        provider: "amazon-bedrock",
1269        reasoning: false,
1270        input: &[InputModality::Text],
1271        cost_input: 0.14,
1272        cost_output: 1.4,
1273        cost_cache_read: 0.0,
1274        cost_cache_write: 0.0,
1275        context_window: 262000,
1276        max_tokens: 262000,
1277    },
1278    ModelEntry {
1279        id: "us.anthropic.claude-opus-4-1-20250805-v1:0",
1280        name: "Claude Opus 4.1 (US)",
1281        api: Api::BedrockConverseStream,
1282        provider: "amazon-bedrock",
1283        reasoning: true,
1284        input: &[InputModality::Text, InputModality::Image],
1285        cost_input: 15.0,
1286        cost_output: 75.0,
1287        cost_cache_read: 1.5,
1288        cost_cache_write: 18.75,
1289        context_window: 200000,
1290        max_tokens: 32000,
1291    },
1292    ModelEntry {
1293        id: "us.anthropic.claude-opus-4-5-20251101-v1:0",
1294        name: "Claude Opus 4.5 (US)",
1295        api: Api::BedrockConverseStream,
1296        provider: "amazon-bedrock",
1297        reasoning: true,
1298        input: &[InputModality::Text, InputModality::Image],
1299        cost_input: 5.0,
1300        cost_output: 25.0,
1301        cost_cache_read: 0.5,
1302        cost_cache_write: 6.25,
1303        context_window: 200000,
1304        max_tokens: 64000,
1305    },
1306    ModelEntry {
1307        id: "us.anthropic.claude-opus-4-7",
1308        name: "Claude Opus 4.7 (US)",
1309        api: Api::BedrockConverseStream,
1310        provider: "amazon-bedrock",
1311        reasoning: true,
1312        input: &[InputModality::Text, InputModality::Image],
1313        cost_input: 5.0,
1314        cost_output: 25.0,
1315        cost_cache_read: 0.5,
1316        cost_cache_write: 6.25,
1317        context_window: 1000000,
1318        max_tokens: 128000,
1319    },
1320    ModelEntry {
1321        id: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
1322        name: "Claude Sonnet 4.5 (US)",
1323        api: Api::BedrockConverseStream,
1324        provider: "amazon-bedrock",
1325        reasoning: true,
1326        input: &[InputModality::Text, InputModality::Image],
1327        cost_input: 3.0,
1328        cost_output: 15.0,
1329        cost_cache_read: 0.3,
1330        cost_cache_write: 3.75,
1331        context_window: 200000,
1332        max_tokens: 64000,
1333    },
1334    ModelEntry {
1335        id: "us.deepseek.r1-v1:0",
1336        name: "DeepSeek-R1 (US)",
1337        api: Api::BedrockConverseStream,
1338        provider: "amazon-bedrock",
1339        reasoning: true,
1340        input: &[InputModality::Text],
1341        cost_input: 1.35,
1342        cost_output: 5.4,
1343        cost_cache_read: 0.0,
1344        cost_cache_write: 0.0,
1345        context_window: 128000,
1346        max_tokens: 32768,
1347    },
1348    ModelEntry {
1349        id: "us.meta.llama4-maverick-17b-instruct-v1:0",
1350        name: "Llama 4 Maverick 17B Instruct (US)",
1351        api: Api::BedrockConverseStream,
1352        provider: "amazon-bedrock",
1353        reasoning: false,
1354        input: &[InputModality::Text, InputModality::Image],
1355        cost_input: 0.24,
1356        cost_output: 0.97,
1357        cost_cache_read: 0.0,
1358        cost_cache_write: 0.0,
1359        context_window: 1000000,
1360        max_tokens: 16384,
1361    },
1362    ModelEntry {
1363        id: "us.meta.llama4-scout-17b-instruct-v1:0",
1364        name: "Llama 4 Scout 17B Instruct (US)",
1365        api: Api::BedrockConverseStream,
1366        provider: "amazon-bedrock",
1367        reasoning: false,
1368        input: &[InputModality::Text, InputModality::Image],
1369        cost_input: 0.17,
1370        cost_output: 0.66,
1371        cost_cache_read: 0.0,
1372        cost_cache_write: 0.0,
1373        context_window: 3500000,
1374        max_tokens: 16384,
1375    },
1376    ModelEntry {
1377        id: "writer.palmyra-x4-v1:0",
1378        name: "Palmyra X4",
1379        api: Api::BedrockConverseStream,
1380        provider: "amazon-bedrock",
1381        reasoning: true,
1382        input: &[InputModality::Text],
1383        cost_input: 2.5,
1384        cost_output: 10.0,
1385        cost_cache_read: 0.0,
1386        cost_cache_write: 0.0,
1387        context_window: 122880,
1388        max_tokens: 8192,
1389    },
1390    ModelEntry {
1391        id: "zai.glm-4.7",
1392        name: "GLM-4.7",
1393        api: Api::BedrockConverseStream,
1394        provider: "amazon-bedrock",
1395        reasoning: true,
1396        input: &[InputModality::Text],
1397        cost_input: 0.6,
1398        cost_output: 2.2,
1399        cost_cache_read: 0.0,
1400        cost_cache_write: 0.0,
1401        context_window: 204800,
1402        max_tokens: 131072,
1403    },
1404    ModelEntry {
1405        id: "zai.glm-5",
1406        name: "GLM-5",
1407        api: Api::BedrockConverseStream,
1408        provider: "amazon-bedrock",
1409        reasoning: true,
1410        input: &[InputModality::Text],
1411        cost_input: 1.0,
1412        cost_output: 3.2,
1413        cost_cache_read: 0.0,
1414        cost_cache_write: 0.0,
1415        context_window: 202752,
1416        max_tokens: 101376,
1417    },
1418];
1419
1420/// anthropic models (23 entries)
1421static ANTHROPIC_MODELS: &[ModelEntry] = &[
1422    ModelEntry {
1423        id: "claude-3-5-haiku-20241022",
1424        name: "Claude Haiku 3.5",
1425        api: Api::AnthropicMessages,
1426        provider: "anthropic",
1427        reasoning: false,
1428        input: &[InputModality::Text, InputModality::Image],
1429        cost_input: 0.0,
1430        cost_output: 0.0,
1431        cost_cache_read: 0.08,
1432        cost_cache_write: 1.0,
1433        context_window: 200000,
1434        max_tokens: 8192,
1435    },
1436    ModelEntry {
1437        id: "claude-3-5-haiku-latest",
1438        name: "Claude Haiku 3.5 (latest)",
1439        api: Api::AnthropicMessages,
1440        provider: "anthropic",
1441        reasoning: false,
1442        input: &[InputModality::Text, InputModality::Image],
1443        cost_input: 0.0,
1444        cost_output: 0.0,
1445        cost_cache_read: 0.08,
1446        cost_cache_write: 1.0,
1447        context_window: 200000,
1448        max_tokens: 8192,
1449    },
1450    ModelEntry {
1451        id: "claude-3-5-sonnet-20240620",
1452        name: "Claude Sonnet 3.5",
1453        api: Api::AnthropicMessages,
1454        provider: "anthropic",
1455        reasoning: false,
1456        input: &[InputModality::Text, InputModality::Image],
1457        cost_input: 0.0,
1458        cost_output: 0.0,
1459        cost_cache_read: 0.3,
1460        cost_cache_write: 3.75,
1461        context_window: 200000,
1462        max_tokens: 8192,
1463    },
1464    ModelEntry {
1465        id: "claude-3-5-sonnet-20241022",
1466        name: "Claude Sonnet 3.5 v2",
1467        api: Api::AnthropicMessages,
1468        provider: "anthropic",
1469        reasoning: false,
1470        input: &[InputModality::Text, InputModality::Image],
1471        cost_input: 0.0,
1472        cost_output: 0.0,
1473        cost_cache_read: 0.3,
1474        cost_cache_write: 3.75,
1475        context_window: 200000,
1476        max_tokens: 8192,
1477    },
1478    ModelEntry {
1479        id: "claude-3-7-sonnet-20250219",
1480        name: "Claude Sonnet 3.7",
1481        api: Api::AnthropicMessages,
1482        provider: "anthropic",
1483        reasoning: true,
1484        input: &[InputModality::Text, InputModality::Image],
1485        cost_input: 0.0,
1486        cost_output: 0.0,
1487        cost_cache_read: 0.3,
1488        cost_cache_write: 3.75,
1489        context_window: 200000,
1490        max_tokens: 64000,
1491    },
1492    ModelEntry {
1493        id: "claude-3-haiku-20240307",
1494        name: "Claude Haiku 3",
1495        api: Api::AnthropicMessages,
1496        provider: "anthropic",
1497        reasoning: false,
1498        input: &[InputModality::Text, InputModality::Image],
1499        cost_input: 0.0,
1500        cost_output: 0.0,
1501        cost_cache_read: 0.03,
1502        cost_cache_write: 0.3,
1503        context_window: 200000,
1504        max_tokens: 4096,
1505    },
1506    ModelEntry {
1507        id: "claude-3-opus-20240229",
1508        name: "Claude Opus 3",
1509        api: Api::AnthropicMessages,
1510        provider: "anthropic",
1511        reasoning: false,
1512        input: &[InputModality::Text, InputModality::Image],
1513        cost_input: 0.0,
1514        cost_output: 0.0,
1515        cost_cache_read: 1.5,
1516        cost_cache_write: 18.75,
1517        context_window: 200000,
1518        max_tokens: 4096,
1519    },
1520    ModelEntry {
1521        id: "claude-3-sonnet-20240229",
1522        name: "Claude Sonnet 3",
1523        api: Api::AnthropicMessages,
1524        provider: "anthropic",
1525        reasoning: false,
1526        input: &[InputModality::Text, InputModality::Image],
1527        cost_input: 0.0,
1528        cost_output: 0.0,
1529        cost_cache_read: 0.3,
1530        cost_cache_write: 0.3,
1531        context_window: 200000,
1532        max_tokens: 4096,
1533    },
1534    ModelEntry {
1535        id: "claude-haiku-4-5",
1536        name: "Claude Haiku 4.5 (latest)",
1537        api: Api::AnthropicMessages,
1538        provider: "anthropic",
1539        reasoning: true,
1540        input: &[InputModality::Text, InputModality::Image],
1541        cost_input: 0.0,
1542        cost_output: 0.0,
1543        cost_cache_read: 0.1,
1544        cost_cache_write: 1.25,
1545        context_window: 200000,
1546        max_tokens: 64000,
1547    },
1548    ModelEntry {
1549        id: "claude-haiku-4-5-20251001",
1550        name: "Claude Haiku 4.5",
1551        api: Api::AnthropicMessages,
1552        provider: "anthropic",
1553        reasoning: true,
1554        input: &[InputModality::Text, InputModality::Image],
1555        cost_input: 0.0,
1556        cost_output: 0.0,
1557        cost_cache_read: 0.1,
1558        cost_cache_write: 1.25,
1559        context_window: 200000,
1560        max_tokens: 64000,
1561    },
1562    ModelEntry {
1563        id: "claude-opus-4-0",
1564        name: "Claude Opus 4 (latest)",
1565        api: Api::AnthropicMessages,
1566        provider: "anthropic",
1567        reasoning: true,
1568        input: &[InputModality::Text, InputModality::Image],
1569        cost_input: 0.0,
1570        cost_output: 0.0,
1571        cost_cache_read: 1.5,
1572        cost_cache_write: 18.75,
1573        context_window: 200000,
1574        max_tokens: 32000,
1575    },
1576    ModelEntry {
1577        id: "claude-opus-4-1",
1578        name: "Claude Opus 4.1 (latest)",
1579        api: Api::AnthropicMessages,
1580        provider: "anthropic",
1581        reasoning: true,
1582        input: &[InputModality::Text, InputModality::Image],
1583        cost_input: 0.0,
1584        cost_output: 0.0,
1585        cost_cache_read: 1.5,
1586        cost_cache_write: 18.75,
1587        context_window: 200000,
1588        max_tokens: 32000,
1589    },
1590    ModelEntry {
1591        id: "claude-opus-4-1-20250805",
1592        name: "Claude Opus 4.1",
1593        api: Api::AnthropicMessages,
1594        provider: "anthropic",
1595        reasoning: true,
1596        input: &[InputModality::Text, InputModality::Image],
1597        cost_input: 0.0,
1598        cost_output: 0.0,
1599        cost_cache_read: 1.5,
1600        cost_cache_write: 18.75,
1601        context_window: 200000,
1602        max_tokens: 32000,
1603    },
1604    ModelEntry {
1605        id: "claude-opus-4-20250514",
1606        name: "Claude Opus 4",
1607        api: Api::AnthropicMessages,
1608        provider: "anthropic",
1609        reasoning: true,
1610        input: &[InputModality::Text, InputModality::Image],
1611        cost_input: 0.0,
1612        cost_output: 0.0,
1613        cost_cache_read: 1.5,
1614        cost_cache_write: 18.75,
1615        context_window: 200000,
1616        max_tokens: 32000,
1617    },
1618    ModelEntry {
1619        id: "claude-opus-4-5",
1620        name: "Claude Opus 4.5 (latest)",
1621        api: Api::AnthropicMessages,
1622        provider: "anthropic",
1623        reasoning: true,
1624        input: &[InputModality::Text, InputModality::Image],
1625        cost_input: 0.0,
1626        cost_output: 0.0,
1627        cost_cache_read: 0.5,
1628        cost_cache_write: 6.25,
1629        context_window: 200000,
1630        max_tokens: 64000,
1631    },
1632    ModelEntry {
1633        id: "claude-opus-4-5-20251101",
1634        name: "Claude Opus 4.5",
1635        api: Api::AnthropicMessages,
1636        provider: "anthropic",
1637        reasoning: true,
1638        input: &[InputModality::Text, InputModality::Image],
1639        cost_input: 0.0,
1640        cost_output: 0.0,
1641        cost_cache_read: 0.5,
1642        cost_cache_write: 6.25,
1643        context_window: 200000,
1644        max_tokens: 64000,
1645    },
1646    ModelEntry {
1647        id: "claude-opus-4-6",
1648        name: "Claude Opus 4.6",
1649        api: Api::AnthropicMessages,
1650        provider: "anthropic",
1651        reasoning: true,
1652        input: &[InputModality::Text, InputModality::Image],
1653        cost_input: 0.0,
1654        cost_output: 0.0,
1655        cost_cache_read: 0.5,
1656        cost_cache_write: 6.25,
1657        context_window: 1000000,
1658        max_tokens: 128000,
1659    },
1660    ModelEntry {
1661        id: "claude-opus-4-7",
1662        name: "Claude Opus 4.7",
1663        api: Api::AnthropicMessages,
1664        provider: "anthropic",
1665        reasoning: true,
1666        input: &[InputModality::Text, InputModality::Image],
1667        cost_input: 0.0,
1668        cost_output: 0.0,
1669        cost_cache_read: 0.5,
1670        cost_cache_write: 6.25,
1671        context_window: 1000000,
1672        max_tokens: 128000,
1673    },
1674    ModelEntry {
1675        id: "claude-sonnet-4-0",
1676        name: "Claude Sonnet 4 (latest)",
1677        api: Api::AnthropicMessages,
1678        provider: "anthropic",
1679        reasoning: true,
1680        input: &[InputModality::Text, InputModality::Image],
1681        cost_input: 0.0,
1682        cost_output: 0.0,
1683        cost_cache_read: 0.3,
1684        cost_cache_write: 3.75,
1685        context_window: 200000,
1686        max_tokens: 64000,
1687    },
1688    ModelEntry {
1689        id: "claude-sonnet-4-20250514",
1690        name: "Claude Sonnet 4",
1691        api: Api::AnthropicMessages,
1692        provider: "anthropic",
1693        reasoning: true,
1694        input: &[InputModality::Text, InputModality::Image],
1695        cost_input: 0.0,
1696        cost_output: 0.0,
1697        cost_cache_read: 0.3,
1698        cost_cache_write: 3.75,
1699        context_window: 200000,
1700        max_tokens: 64000,
1701    },
1702    ModelEntry {
1703        id: "claude-sonnet-4-5",
1704        name: "Claude Sonnet 4.5 (latest)",
1705        api: Api::AnthropicMessages,
1706        provider: "anthropic",
1707        reasoning: true,
1708        input: &[InputModality::Text, InputModality::Image],
1709        cost_input: 0.0,
1710        cost_output: 0.0,
1711        cost_cache_read: 0.3,
1712        cost_cache_write: 3.75,
1713        context_window: 200000,
1714        max_tokens: 64000,
1715    },
1716    ModelEntry {
1717        id: "claude-sonnet-4-5-20250929",
1718        name: "Claude Sonnet 4.5",
1719        api: Api::AnthropicMessages,
1720        provider: "anthropic",
1721        reasoning: true,
1722        input: &[InputModality::Text, InputModality::Image],
1723        cost_input: 0.0,
1724        cost_output: 0.0,
1725        cost_cache_read: 0.3,
1726        cost_cache_write: 3.75,
1727        context_window: 200000,
1728        max_tokens: 64000,
1729    },
1730    ModelEntry {
1731        id: "claude-sonnet-4-6",
1732        name: "Claude Sonnet 4.6",
1733        api: Api::AnthropicMessages,
1734        provider: "anthropic",
1735        reasoning: true,
1736        input: &[InputModality::Text, InputModality::Image],
1737        cost_input: 0.0,
1738        cost_output: 0.0,
1739        cost_cache_read: 0.3,
1740        cost_cache_write: 3.75,
1741        context_window: 1000000,
1742        max_tokens: 64000,
1743    },
1744];
1745
1746/// azure-openai-responses models (42 entries)
1747static AZURE_OPENAI_RESPONSES_MODELS: &[ModelEntry] = &[
1748    ModelEntry {
1749        id: "gpt-4",
1750        name: "GPT-4",
1751        api: Api::AzureOpenAiResponses,
1752        provider: "azure-openai-responses",
1753        reasoning: false,
1754        input: &[InputModality::Text],
1755        cost_input: 0.0,
1756        cost_output: 0.0,
1757        cost_cache_read: 0.0,
1758        cost_cache_write: 0.0,
1759        context_window: 8192,
1760        max_tokens: 8192,
1761    },
1762    ModelEntry {
1763        id: "gpt-4-turbo",
1764        name: "GPT-4 Turbo",
1765        api: Api::AzureOpenAiResponses,
1766        provider: "azure-openai-responses",
1767        reasoning: false,
1768        input: &[InputModality::Text, InputModality::Image],
1769        cost_input: 0.0,
1770        cost_output: 0.0,
1771        cost_cache_read: 0.0,
1772        cost_cache_write: 0.0,
1773        context_window: 128000,
1774        max_tokens: 4096,
1775    },
1776    ModelEntry {
1777        id: "gpt-4.1",
1778        name: "GPT-4.1",
1779        api: Api::AzureOpenAiResponses,
1780        provider: "azure-openai-responses",
1781        reasoning: false,
1782        input: &[InputModality::Text, InputModality::Image],
1783        cost_input: 0.0,
1784        cost_output: 0.0,
1785        cost_cache_read: 0.5,
1786        cost_cache_write: 0.0,
1787        context_window: 1047576,
1788        max_tokens: 32768,
1789    },
1790    ModelEntry {
1791        id: "gpt-4.1-mini",
1792        name: "GPT-4.1 mini",
1793        api: Api::AzureOpenAiResponses,
1794        provider: "azure-openai-responses",
1795        reasoning: false,
1796        input: &[InputModality::Text, InputModality::Image],
1797        cost_input: 0.0,
1798        cost_output: 0.0,
1799        cost_cache_read: 0.1,
1800        cost_cache_write: 0.0,
1801        context_window: 1047576,
1802        max_tokens: 32768,
1803    },
1804    ModelEntry {
1805        id: "gpt-4.1-nano",
1806        name: "GPT-4.1 nano",
1807        api: Api::AzureOpenAiResponses,
1808        provider: "azure-openai-responses",
1809        reasoning: false,
1810        input: &[InputModality::Text, InputModality::Image],
1811        cost_input: 0.0,
1812        cost_output: 0.0,
1813        cost_cache_read: 0.03,
1814        cost_cache_write: 0.0,
1815        context_window: 1047576,
1816        max_tokens: 32768,
1817    },
1818    ModelEntry {
1819        id: "gpt-4o",
1820        name: "GPT-4o",
1821        api: Api::AzureOpenAiResponses,
1822        provider: "azure-openai-responses",
1823        reasoning: false,
1824        input: &[InputModality::Text, InputModality::Image],
1825        cost_input: 0.0,
1826        cost_output: 0.0,
1827        cost_cache_read: 1.25,
1828        cost_cache_write: 0.0,
1829        context_window: 128000,
1830        max_tokens: 16384,
1831    },
1832    ModelEntry {
1833        id: "gpt-4o-2024-05-13",
1834        name: "GPT-4o (2024-05-13)",
1835        api: Api::AzureOpenAiResponses,
1836        provider: "azure-openai-responses",
1837        reasoning: false,
1838        input: &[InputModality::Text, InputModality::Image],
1839        cost_input: 0.0,
1840        cost_output: 0.0,
1841        cost_cache_read: 0.0,
1842        cost_cache_write: 0.0,
1843        context_window: 128000,
1844        max_tokens: 4096,
1845    },
1846    ModelEntry {
1847        id: "gpt-4o-2024-08-06",
1848        name: "GPT-4o (2024-08-06)",
1849        api: Api::AzureOpenAiResponses,
1850        provider: "azure-openai-responses",
1851        reasoning: false,
1852        input: &[InputModality::Text, InputModality::Image],
1853        cost_input: 0.0,
1854        cost_output: 0.0,
1855        cost_cache_read: 1.25,
1856        cost_cache_write: 0.0,
1857        context_window: 128000,
1858        max_tokens: 16384,
1859    },
1860    ModelEntry {
1861        id: "gpt-4o-2024-11-20",
1862        name: "GPT-4o (2024-11-20)",
1863        api: Api::AzureOpenAiResponses,
1864        provider: "azure-openai-responses",
1865        reasoning: false,
1866        input: &[InputModality::Text, InputModality::Image],
1867        cost_input: 0.0,
1868        cost_output: 0.0,
1869        cost_cache_read: 1.25,
1870        cost_cache_write: 0.0,
1871        context_window: 128000,
1872        max_tokens: 16384,
1873    },
1874    ModelEntry {
1875        id: "gpt-4o-mini",
1876        name: "GPT-4o mini",
1877        api: Api::AzureOpenAiResponses,
1878        provider: "azure-openai-responses",
1879        reasoning: false,
1880        input: &[InputModality::Text, InputModality::Image],
1881        cost_input: 0.0,
1882        cost_output: 0.0,
1883        cost_cache_read: 0.08,
1884        cost_cache_write: 0.0,
1885        context_window: 128000,
1886        max_tokens: 16384,
1887    },
1888    ModelEntry {
1889        id: "gpt-5",
1890        name: "GPT-5",
1891        api: Api::AzureOpenAiResponses,
1892        provider: "azure-openai-responses",
1893        reasoning: true,
1894        input: &[InputModality::Text, InputModality::Image],
1895        cost_input: 0.0,
1896        cost_output: 0.0,
1897        cost_cache_read: 0.125,
1898        cost_cache_write: 0.0,
1899        context_window: 400000,
1900        max_tokens: 128000,
1901    },
1902    ModelEntry {
1903        id: "gpt-5-chat-latest",
1904        name: "GPT-5 Chat Latest",
1905        api: Api::AzureOpenAiResponses,
1906        provider: "azure-openai-responses",
1907        reasoning: false,
1908        input: &[InputModality::Text, InputModality::Image],
1909        cost_input: 0.0,
1910        cost_output: 0.0,
1911        cost_cache_read: 0.125,
1912        cost_cache_write: 0.0,
1913        context_window: 128000,
1914        max_tokens: 16384,
1915    },
1916    ModelEntry {
1917        id: "gpt-5-codex",
1918        name: "GPT-5-Codex",
1919        api: Api::AzureOpenAiResponses,
1920        provider: "azure-openai-responses",
1921        reasoning: true,
1922        input: &[InputModality::Text, InputModality::Image],
1923        cost_input: 0.0,
1924        cost_output: 0.0,
1925        cost_cache_read: 0.125,
1926        cost_cache_write: 0.0,
1927        context_window: 400000,
1928        max_tokens: 128000,
1929    },
1930    ModelEntry {
1931        id: "gpt-5-mini",
1932        name: "GPT-5 Mini",
1933        api: Api::AzureOpenAiResponses,
1934        provider: "azure-openai-responses",
1935        reasoning: true,
1936        input: &[InputModality::Text, InputModality::Image],
1937        cost_input: 0.0,
1938        cost_output: 0.0,
1939        cost_cache_read: 0.025,
1940        cost_cache_write: 0.0,
1941        context_window: 400000,
1942        max_tokens: 128000,
1943    },
1944    ModelEntry {
1945        id: "gpt-5-nano",
1946        name: "GPT-5 Nano",
1947        api: Api::AzureOpenAiResponses,
1948        provider: "azure-openai-responses",
1949        reasoning: true,
1950        input: &[InputModality::Text, InputModality::Image],
1951        cost_input: 0.0,
1952        cost_output: 0.0,
1953        cost_cache_read: 0.005,
1954        cost_cache_write: 0.0,
1955        context_window: 400000,
1956        max_tokens: 128000,
1957    },
1958    ModelEntry {
1959        id: "gpt-5-pro",
1960        name: "GPT-5 Pro",
1961        api: Api::AzureOpenAiResponses,
1962        provider: "azure-openai-responses",
1963        reasoning: true,
1964        input: &[InputModality::Text, InputModality::Image],
1965        cost_input: 0.0,
1966        cost_output: 0.0,
1967        cost_cache_read: 0.0,
1968        cost_cache_write: 0.0,
1969        context_window: 400000,
1970        max_tokens: 272000,
1971    },
1972    ModelEntry {
1973        id: "gpt-5.1",
1974        name: "GPT-5.1",
1975        api: Api::AzureOpenAiResponses,
1976        provider: "azure-openai-responses",
1977        reasoning: true,
1978        input: &[InputModality::Text, InputModality::Image],
1979        cost_input: 0.0,
1980        cost_output: 0.0,
1981        cost_cache_read: 0.13,
1982        cost_cache_write: 0.0,
1983        context_window: 400000,
1984        max_tokens: 128000,
1985    },
1986    ModelEntry {
1987        id: "gpt-5.1-chat-latest",
1988        name: "GPT-5.1 Chat",
1989        api: Api::AzureOpenAiResponses,
1990        provider: "azure-openai-responses",
1991        reasoning: true,
1992        input: &[InputModality::Text, InputModality::Image],
1993        cost_input: 0.0,
1994        cost_output: 0.0,
1995        cost_cache_read: 0.125,
1996        cost_cache_write: 0.0,
1997        context_window: 128000,
1998        max_tokens: 16384,
1999    },
2000    ModelEntry {
2001        id: "gpt-5.1-codex",
2002        name: "GPT-5.1 Codex",
2003        api: Api::AzureOpenAiResponses,
2004        provider: "azure-openai-responses",
2005        reasoning: true,
2006        input: &[InputModality::Text, InputModality::Image],
2007        cost_input: 0.0,
2008        cost_output: 0.0,
2009        cost_cache_read: 0.125,
2010        cost_cache_write: 0.0,
2011        context_window: 400000,
2012        max_tokens: 128000,
2013    },
2014    ModelEntry {
2015        id: "gpt-5.1-codex-max",
2016        name: "GPT-5.1 Codex Max",
2017        api: Api::AzureOpenAiResponses,
2018        provider: "azure-openai-responses",
2019        reasoning: true,
2020        input: &[InputModality::Text, InputModality::Image],
2021        cost_input: 0.0,
2022        cost_output: 0.0,
2023        cost_cache_read: 0.125,
2024        cost_cache_write: 0.0,
2025        context_window: 400000,
2026        max_tokens: 128000,
2027    },
2028    ModelEntry {
2029        id: "gpt-5.1-codex-mini",
2030        name: "GPT-5.1 Codex mini",
2031        api: Api::AzureOpenAiResponses,
2032        provider: "azure-openai-responses",
2033        reasoning: true,
2034        input: &[InputModality::Text, InputModality::Image],
2035        cost_input: 0.0,
2036        cost_output: 0.0,
2037        cost_cache_read: 0.025,
2038        cost_cache_write: 0.0,
2039        context_window: 400000,
2040        max_tokens: 128000,
2041    },
2042    ModelEntry {
2043        id: "gpt-5.2",
2044        name: "GPT-5.2",
2045        api: Api::AzureOpenAiResponses,
2046        provider: "azure-openai-responses",
2047        reasoning: true,
2048        input: &[InputModality::Text, InputModality::Image],
2049        cost_input: 0.0,
2050        cost_output: 0.0,
2051        cost_cache_read: 0.175,
2052        cost_cache_write: 0.0,
2053        context_window: 400000,
2054        max_tokens: 128000,
2055    },
2056    ModelEntry {
2057        id: "gpt-5.2-chat-latest",
2058        name: "GPT-5.2 Chat",
2059        api: Api::AzureOpenAiResponses,
2060        provider: "azure-openai-responses",
2061        reasoning: true,
2062        input: &[InputModality::Text, InputModality::Image],
2063        cost_input: 0.0,
2064        cost_output: 0.0,
2065        cost_cache_read: 0.175,
2066        cost_cache_write: 0.0,
2067        context_window: 128000,
2068        max_tokens: 16384,
2069    },
2070    ModelEntry {
2071        id: "gpt-5.2-codex",
2072        name: "GPT-5.2 Codex",
2073        api: Api::AzureOpenAiResponses,
2074        provider: "azure-openai-responses",
2075        reasoning: true,
2076        input: &[InputModality::Text, InputModality::Image],
2077        cost_input: 0.0,
2078        cost_output: 0.0,
2079        cost_cache_read: 0.175,
2080        cost_cache_write: 0.0,
2081        context_window: 400000,
2082        max_tokens: 128000,
2083    },
2084    ModelEntry {
2085        id: "gpt-5.2-pro",
2086        name: "GPT-5.2 Pro",
2087        api: Api::AzureOpenAiResponses,
2088        provider: "azure-openai-responses",
2089        reasoning: true,
2090        input: &[InputModality::Text, InputModality::Image],
2091        cost_input: 0.0,
2092        cost_output: 0.0,
2093        cost_cache_read: 0.0,
2094        cost_cache_write: 0.0,
2095        context_window: 400000,
2096        max_tokens: 128000,
2097    },
2098    ModelEntry {
2099        id: "gpt-5.3-chat-latest",
2100        name: "GPT-5.3 Chat (latest)",
2101        api: Api::AzureOpenAiResponses,
2102        provider: "azure-openai-responses",
2103        reasoning: false,
2104        input: &[InputModality::Text, InputModality::Image],
2105        cost_input: 0.0,
2106        cost_output: 0.0,
2107        cost_cache_read: 0.175,
2108        cost_cache_write: 0.0,
2109        context_window: 128000,
2110        max_tokens: 16384,
2111    },
2112    ModelEntry {
2113        id: "gpt-5.3-codex",
2114        name: "GPT-5.3 Codex",
2115        api: Api::AzureOpenAiResponses,
2116        provider: "azure-openai-responses",
2117        reasoning: true,
2118        input: &[InputModality::Text, InputModality::Image],
2119        cost_input: 0.0,
2120        cost_output: 0.0,
2121        cost_cache_read: 0.175,
2122        cost_cache_write: 0.0,
2123        context_window: 400000,
2124        max_tokens: 128000,
2125    },
2126    ModelEntry {
2127        id: "gpt-5.3-codex-spark",
2128        name: "GPT-5.3 Codex Spark",
2129        api: Api::AzureOpenAiResponses,
2130        provider: "azure-openai-responses",
2131        reasoning: true,
2132        input: &[InputModality::Text, InputModality::Image],
2133        cost_input: 0.0,
2134        cost_output: 0.0,
2135        cost_cache_read: 0.175,
2136        cost_cache_write: 0.0,
2137        context_window: 128000,
2138        max_tokens: 32000,
2139    },
2140    ModelEntry {
2141        id: "gpt-5.4",
2142        name: "GPT-5.4",
2143        api: Api::AzureOpenAiResponses,
2144        provider: "azure-openai-responses",
2145        reasoning: true,
2146        input: &[InputModality::Text, InputModality::Image],
2147        cost_input: 0.0,
2148        cost_output: 0.0,
2149        cost_cache_read: 0.25,
2150        cost_cache_write: 0.0,
2151        context_window: 272000,
2152        max_tokens: 128000,
2153    },
2154    ModelEntry {
2155        id: "gpt-5.4-mini",
2156        name: "GPT-5.4 mini",
2157        api: Api::AzureOpenAiResponses,
2158        provider: "azure-openai-responses",
2159        reasoning: true,
2160        input: &[InputModality::Text, InputModality::Image],
2161        cost_input: 0.0,
2162        cost_output: 0.0,
2163        cost_cache_read: 0.075,
2164        cost_cache_write: 0.0,
2165        context_window: 400000,
2166        max_tokens: 128000,
2167    },
2168    ModelEntry {
2169        id: "gpt-5.4-nano",
2170        name: "GPT-5.4 nano",
2171        api: Api::AzureOpenAiResponses,
2172        provider: "azure-openai-responses",
2173        reasoning: true,
2174        input: &[InputModality::Text, InputModality::Image],
2175        cost_input: 0.0,
2176        cost_output: 0.0,
2177        cost_cache_read: 0.02,
2178        cost_cache_write: 0.0,
2179        context_window: 400000,
2180        max_tokens: 128000,
2181    },
2182    ModelEntry {
2183        id: "gpt-5.4-pro",
2184        name: "GPT-5.4 Pro",
2185        api: Api::AzureOpenAiResponses,
2186        provider: "azure-openai-responses",
2187        reasoning: true,
2188        input: &[InputModality::Text, InputModality::Image],
2189        cost_input: 0.0,
2190        cost_output: 0.0,
2191        cost_cache_read: 0.0,
2192        cost_cache_write: 0.0,
2193        context_window: 1050000,
2194        max_tokens: 128000,
2195    },
2196    ModelEntry {
2197        id: "gpt-5.5",
2198        name: "GPT-5.5",
2199        api: Api::AzureOpenAiResponses,
2200        provider: "azure-openai-responses",
2201        reasoning: true,
2202        input: &[InputModality::Text, InputModality::Image],
2203        cost_input: 0.0,
2204        cost_output: 0.0,
2205        cost_cache_read: 0.5,
2206        cost_cache_write: 0.0,
2207        context_window: 272000,
2208        max_tokens: 128000,
2209    },
2210    ModelEntry {
2211        id: "gpt-5.5-pro",
2212        name: "GPT-5.5 Pro",
2213        api: Api::AzureOpenAiResponses,
2214        provider: "azure-openai-responses",
2215        reasoning: true,
2216        input: &[InputModality::Text, InputModality::Image],
2217        cost_input: 0.0,
2218        cost_output: 0.0,
2219        cost_cache_read: 0.0,
2220        cost_cache_write: 0.0,
2221        context_window: 1050000,
2222        max_tokens: 128000,
2223    },
2224    ModelEntry {
2225        id: "o1",
2226        name: "o1",
2227        api: Api::AzureOpenAiResponses,
2228        provider: "azure-openai-responses",
2229        reasoning: true,
2230        input: &[InputModality::Text, InputModality::Image],
2231        cost_input: 0.0,
2232        cost_output: 0.0,
2233        cost_cache_read: 7.5,
2234        cost_cache_write: 0.0,
2235        context_window: 200000,
2236        max_tokens: 100000,
2237    },
2238    ModelEntry {
2239        id: "o1-pro",
2240        name: "o1-pro",
2241        api: Api::AzureOpenAiResponses,
2242        provider: "azure-openai-responses",
2243        reasoning: true,
2244        input: &[InputModality::Text, InputModality::Image],
2245        cost_input: 0.0,
2246        cost_output: 0.0,
2247        cost_cache_read: 0.0,
2248        cost_cache_write: 0.0,
2249        context_window: 200000,
2250        max_tokens: 100000,
2251    },
2252    ModelEntry {
2253        id: "o3",
2254        name: "o3",
2255        api: Api::AzureOpenAiResponses,
2256        provider: "azure-openai-responses",
2257        reasoning: true,
2258        input: &[InputModality::Text, InputModality::Image],
2259        cost_input: 0.0,
2260        cost_output: 0.0,
2261        cost_cache_read: 0.5,
2262        cost_cache_write: 0.0,
2263        context_window: 200000,
2264        max_tokens: 100000,
2265    },
2266    ModelEntry {
2267        id: "o3-deep-research",
2268        name: "o3-deep-research",
2269        api: Api::AzureOpenAiResponses,
2270        provider: "azure-openai-responses",
2271        reasoning: true,
2272        input: &[InputModality::Text, InputModality::Image],
2273        cost_input: 0.0,
2274        cost_output: 0.0,
2275        cost_cache_read: 2.5,
2276        cost_cache_write: 0.0,
2277        context_window: 200000,
2278        max_tokens: 100000,
2279    },
2280    ModelEntry {
2281        id: "o3-mini",
2282        name: "o3-mini",
2283        api: Api::AzureOpenAiResponses,
2284        provider: "azure-openai-responses",
2285        reasoning: true,
2286        input: &[InputModality::Text],
2287        cost_input: 0.0,
2288        cost_output: 0.0,
2289        cost_cache_read: 0.55,
2290        cost_cache_write: 0.0,
2291        context_window: 200000,
2292        max_tokens: 100000,
2293    },
2294    ModelEntry {
2295        id: "o3-pro",
2296        name: "o3-pro",
2297        api: Api::AzureOpenAiResponses,
2298        provider: "azure-openai-responses",
2299        reasoning: true,
2300        input: &[InputModality::Text, InputModality::Image],
2301        cost_input: 0.0,
2302        cost_output: 0.0,
2303        cost_cache_read: 0.0,
2304        cost_cache_write: 0.0,
2305        context_window: 200000,
2306        max_tokens: 100000,
2307    },
2308    ModelEntry {
2309        id: "o4-mini",
2310        name: "o4-mini",
2311        api: Api::AzureOpenAiResponses,
2312        provider: "azure-openai-responses",
2313        reasoning: true,
2314        input: &[InputModality::Text, InputModality::Image],
2315        cost_input: 0.0,
2316        cost_output: 0.0,
2317        cost_cache_read: 0.28,
2318        cost_cache_write: 0.0,
2319        context_window: 200000,
2320        max_tokens: 100000,
2321    },
2322    ModelEntry {
2323        id: "o4-mini-deep-research",
2324        name: "o4-mini-deep-research",
2325        api: Api::AzureOpenAiResponses,
2326        provider: "azure-openai-responses",
2327        reasoning: true,
2328        input: &[InputModality::Text, InputModality::Image],
2329        cost_input: 0.0,
2330        cost_output: 0.0,
2331        cost_cache_read: 0.5,
2332        cost_cache_write: 0.0,
2333        context_window: 200000,
2334        max_tokens: 100000,
2335    },
2336];
2337
2338/// cerebras models (4 entries)
2339static CEREBRAS_MODELS: &[ModelEntry] = &[
2340    ModelEntry {
2341        id: "gpt-oss-120b",
2342        name: "GPT OSS 120B",
2343        api: Api::OpenAiCompletions,
2344        provider: "cerebras",
2345        reasoning: true,
2346        input: &[InputModality::Text],
2347        cost_input: 0.0,
2348        cost_output: 0.0,
2349        cost_cache_read: 0.0,
2350        cost_cache_write: 0.0,
2351        context_window: 131072,
2352        max_tokens: 32768,
2353    },
2354    ModelEntry {
2355        id: "llama3.1-8b",
2356        name: "Llama 3.1 8B",
2357        api: Api::OpenAiCompletions,
2358        provider: "cerebras",
2359        reasoning: false,
2360        input: &[InputModality::Text],
2361        cost_input: 0.0,
2362        cost_output: 0.0,
2363        cost_cache_read: 0.0,
2364        cost_cache_write: 0.0,
2365        context_window: 32000,
2366        max_tokens: 8000,
2367    },
2368    ModelEntry {
2369        id: "qwen-3-235b-a22b-instruct-2507",
2370        name: "Qwen 3 235B Instruct",
2371        api: Api::OpenAiCompletions,
2372        provider: "cerebras",
2373        reasoning: false,
2374        input: &[InputModality::Text],
2375        cost_input: 0.0,
2376        cost_output: 0.0,
2377        cost_cache_read: 0.0,
2378        cost_cache_write: 0.0,
2379        context_window: 131000,
2380        max_tokens: 32000,
2381    },
2382    ModelEntry {
2383        id: "zai-glm-4.7",
2384        name: "Z.AI GLM-4.7",
2385        api: Api::OpenAiCompletions,
2386        provider: "cerebras",
2387        reasoning: false,
2388        input: &[InputModality::Text],
2389        cost_input: 0.0,
2390        cost_output: 0.0,
2391        cost_cache_read: 0.0,
2392        cost_cache_write: 0.0,
2393        context_window: 131072,
2394        max_tokens: 40000,
2395    },
2396];
2397
2398/// cloudflare-ai-gateway models (24 entries)
2399static CLOUDFLARE_AI_GATEWAY_MODELS: &[ModelEntry] = &[
2400    ModelEntry {
2401        id: "claude-3-5-haiku",
2402        name: "Claude Haiku 3.5 (latest)",
2403        api: Api::AnthropicMessages,
2404        provider: "cloudflare-ai-gateway",
2405        reasoning: false,
2406        input: &[InputModality::Text, InputModality::Image],
2407        cost_input: 0.0,
2408        cost_output: 0.0,
2409        cost_cache_read: 0.08,
2410        cost_cache_write: 1.0,
2411        context_window: 200000,
2412        max_tokens: 8192,
2413    },
2414    ModelEntry {
2415        id: "claude-3-haiku",
2416        name: "Claude Haiku 3",
2417        api: Api::AnthropicMessages,
2418        provider: "cloudflare-ai-gateway",
2419        reasoning: false,
2420        input: &[InputModality::Text, InputModality::Image],
2421        cost_input: 0.0,
2422        cost_output: 0.0,
2423        cost_cache_read: 0.03,
2424        cost_cache_write: 0.3,
2425        context_window: 200000,
2426        max_tokens: 4096,
2427    },
2428    ModelEntry {
2429        id: "claude-3-sonnet",
2430        name: "Claude Sonnet 3",
2431        api: Api::AnthropicMessages,
2432        provider: "cloudflare-ai-gateway",
2433        reasoning: false,
2434        input: &[InputModality::Text, InputModality::Image],
2435        cost_input: 0.0,
2436        cost_output: 0.0,
2437        cost_cache_read: 0.3,
2438        cost_cache_write: 0.3,
2439        context_window: 200000,
2440        max_tokens: 4096,
2441    },
2442    ModelEntry {
2443        id: "claude-3.5-sonnet",
2444        name: "Claude Sonnet 3.5 v2",
2445        api: Api::AnthropicMessages,
2446        provider: "cloudflare-ai-gateway",
2447        reasoning: false,
2448        input: &[InputModality::Text, InputModality::Image],
2449        cost_input: 0.0,
2450        cost_output: 0.0,
2451        cost_cache_read: 0.3,
2452        cost_cache_write: 3.75,
2453        context_window: 200000,
2454        max_tokens: 8192,
2455    },
2456    ModelEntry {
2457        id: "claude-opus-4",
2458        name: "Claude Opus 4 (latest)",
2459        api: Api::AnthropicMessages,
2460        provider: "cloudflare-ai-gateway",
2461        reasoning: true,
2462        input: &[InputModality::Text, InputModality::Image],
2463        cost_input: 0.0,
2464        cost_output: 0.0,
2465        cost_cache_read: 1.5,
2466        cost_cache_write: 18.75,
2467        context_window: 200000,
2468        max_tokens: 32000,
2469    },
2470    ModelEntry {
2471        id: "claude-opus-4-1",
2472        name: "Claude Opus 4.1 (latest)",
2473        api: Api::AnthropicMessages,
2474        provider: "cloudflare-ai-gateway",
2475        reasoning: true,
2476        input: &[InputModality::Text, InputModality::Image],
2477        cost_input: 0.0,
2478        cost_output: 0.0,
2479        cost_cache_read: 1.5,
2480        cost_cache_write: 18.75,
2481        context_window: 200000,
2482        max_tokens: 32000,
2483    },
2484    ModelEntry {
2485        id: "claude-opus-4-6",
2486        name: "Claude Opus 4.6 (latest)",
2487        api: Api::AnthropicMessages,
2488        provider: "cloudflare-ai-gateway",
2489        reasoning: true,
2490        input: &[InputModality::Text, InputModality::Image],
2491        cost_input: 0.0,
2492        cost_output: 0.0,
2493        cost_cache_read: 0.5,
2494        cost_cache_write: 6.25,
2495        context_window: 1000000,
2496        max_tokens: 128000,
2497    },
2498    ModelEntry {
2499        id: "claude-sonnet-4",
2500        name: "Claude Sonnet 4 (latest)",
2501        api: Api::AnthropicMessages,
2502        provider: "cloudflare-ai-gateway",
2503        reasoning: true,
2504        input: &[InputModality::Text, InputModality::Image],
2505        cost_input: 0.0,
2506        cost_output: 0.0,
2507        cost_cache_read: 0.3,
2508        cost_cache_write: 3.75,
2509        context_window: 200000,
2510        max_tokens: 64000,
2511    },
2512    ModelEntry {
2513        id: "claude-sonnet-4-6",
2514        name: "Claude Sonnet 4.6",
2515        api: Api::AnthropicMessages,
2516        provider: "cloudflare-ai-gateway",
2517        reasoning: true,
2518        input: &[InputModality::Text, InputModality::Image],
2519        cost_input: 0.0,
2520        cost_output: 0.0,
2521        cost_cache_read: 0.3,
2522        cost_cache_write: 3.75,
2523        context_window: 1000000,
2524        max_tokens: 64000,
2525    },
2526    ModelEntry {
2527        id: "gpt-4",
2528        name: "GPT-4",
2529        api: Api::OpenAiResponses,
2530        provider: "cloudflare-ai-gateway",
2531        reasoning: false,
2532        input: &[InputModality::Text],
2533        cost_input: 0.0,
2534        cost_output: 0.0,
2535        cost_cache_read: 0.0,
2536        cost_cache_write: 0.0,
2537        context_window: 8192,
2538        max_tokens: 8192,
2539    },
2540    ModelEntry {
2541        id: "gpt-4o",
2542        name: "GPT-4o",
2543        api: Api::OpenAiResponses,
2544        provider: "cloudflare-ai-gateway",
2545        reasoning: false,
2546        input: &[InputModality::Text, InputModality::Image],
2547        cost_input: 0.0,
2548        cost_output: 0.0,
2549        cost_cache_read: 1.25,
2550        cost_cache_write: 0.0,
2551        context_window: 128000,
2552        max_tokens: 16384,
2553    },
2554    ModelEntry {
2555        id: "gpt-5.1",
2556        name: "GPT-5.1",
2557        api: Api::OpenAiResponses,
2558        provider: "cloudflare-ai-gateway",
2559        reasoning: true,
2560        input: &[InputModality::Text, InputModality::Image],
2561        cost_input: 0.0,
2562        cost_output: 0.0,
2563        cost_cache_read: 0.13,
2564        cost_cache_write: 0.0,
2565        context_window: 400000,
2566        max_tokens: 128000,
2567    },
2568    ModelEntry {
2569        id: "gpt-5.2",
2570        name: "GPT-5.2",
2571        api: Api::OpenAiResponses,
2572        provider: "cloudflare-ai-gateway",
2573        reasoning: true,
2574        input: &[InputModality::Text, InputModality::Image],
2575        cost_input: 0.0,
2576        cost_output: 0.0,
2577        cost_cache_read: 0.175,
2578        cost_cache_write: 0.0,
2579        context_window: 400000,
2580        max_tokens: 128000,
2581    },
2582    ModelEntry {
2583        id: "gpt-5.2-codex",
2584        name: "GPT-5.2 Codex",
2585        api: Api::OpenAiResponses,
2586        provider: "cloudflare-ai-gateway",
2587        reasoning: true,
2588        input: &[InputModality::Text, InputModality::Image],
2589        cost_input: 0.0,
2590        cost_output: 0.0,
2591        cost_cache_read: 0.175,
2592        cost_cache_write: 0.0,
2593        context_window: 400000,
2594        max_tokens: 128000,
2595    },
2596    ModelEntry {
2597        id: "gpt-5.4",
2598        name: "GPT-5.4",
2599        api: Api::OpenAiResponses,
2600        provider: "cloudflare-ai-gateway",
2601        reasoning: true,
2602        input: &[InputModality::Text, InputModality::Image],
2603        cost_input: 0.0,
2604        cost_output: 0.0,
2605        cost_cache_read: 0.25,
2606        cost_cache_write: 0.0,
2607        context_window: 1050000,
2608        max_tokens: 128000,
2609    },
2610    ModelEntry {
2611        id: "o1",
2612        name: "o1",
2613        api: Api::OpenAiResponses,
2614        provider: "cloudflare-ai-gateway",
2615        reasoning: true,
2616        input: &[InputModality::Text, InputModality::Image],
2617        cost_input: 0.0,
2618        cost_output: 0.0,
2619        cost_cache_read: 7.5,
2620        cost_cache_write: 0.0,
2621        context_window: 200000,
2622        max_tokens: 100000,
2623    },
2624    ModelEntry {
2625        id: "o3-mini",
2626        name: "o3-mini",
2627        api: Api::OpenAiResponses,
2628        provider: "cloudflare-ai-gateway",
2629        reasoning: true,
2630        input: &[InputModality::Text],
2631        cost_input: 0.0,
2632        cost_output: 0.0,
2633        cost_cache_read: 0.55,
2634        cost_cache_write: 0.0,
2635        context_window: 200000,
2636        max_tokens: 100000,
2637    },
2638    ModelEntry {
2639        id: "o3-pro",
2640        name: "o3-pro",
2641        api: Api::OpenAiResponses,
2642        provider: "cloudflare-ai-gateway",
2643        reasoning: true,
2644        input: &[InputModality::Text, InputModality::Image],
2645        cost_input: 0.0,
2646        cost_output: 0.0,
2647        cost_cache_read: 0.0,
2648        cost_cache_write: 0.0,
2649        context_window: 200000,
2650        max_tokens: 100000,
2651    },
2652    ModelEntry {
2653        id: "workers-ai/@cf/moonshotai/kimi-k2.5",
2654        name: "Kimi K2.5",
2655        api: Api::OpenAiCompletions,
2656        provider: "cloudflare-ai-gateway",
2657        reasoning: true,
2658        input: &[InputModality::Text, InputModality::Image],
2659        cost_input: 0.0,
2660        cost_output: 0.0,
2661        cost_cache_read: 0.1,
2662        cost_cache_write: 0.0,
2663        context_window: 256000,
2664        max_tokens: 256000,
2665    },
2666    ModelEntry {
2667        id: "workers-ai/@cf/nvidia/nemotron-3-120b-a12b",
2668        name: "Nemotron 3 Super 120B",
2669        api: Api::OpenAiCompletions,
2670        provider: "cloudflare-ai-gateway",
2671        reasoning: true,
2672        input: &[InputModality::Text],
2673        cost_input: 0.0,
2674        cost_output: 0.0,
2675        cost_cache_read: 0.0,
2676        cost_cache_write: 0.0,
2677        context_window: 256000,
2678        max_tokens: 256000,
2679    },
2680    ModelEntry {
2681        id: "claude-3-opus",
2682        name: "Claude Opus 3",
2683        api: Api::AnthropicMessages,
2684        provider: "cloudflare-ai-gateway",
2685        reasoning: false,
2686        input: &[InputModality::Text, InputModality::Image],
2687        cost_input: 15.0,
2688        cost_output: 75.0,
2689        cost_cache_read: 1.5,
2690        cost_cache_write: 18.75,
2691        context_window: 200000,
2692        max_tokens: 4096,
2693    },
2694    ModelEntry {
2695        id: "claude-3.5-haiku",
2696        name: "Claude Haiku 3.5 (latest)",
2697        api: Api::AnthropicMessages,
2698        provider: "cloudflare-ai-gateway",
2699        reasoning: false,
2700        input: &[InputModality::Text, InputModality::Image],
2701        cost_input: 0.8,
2702        cost_output: 4.0,
2703        cost_cache_read: 0.08,
2704        cost_cache_write: 1.0,
2705        context_window: 200000,
2706        max_tokens: 8192,
2707    },
2708    ModelEntry {
2709        id: "workers-ai/@cf/moonshotai/kimi-k2.6",
2710        name: "Kimi K2.6",
2711        api: Api::OpenAiCompletions,
2712        provider: "cloudflare-ai-gateway",
2713        reasoning: true,
2714        input: &[InputModality::Text, InputModality::Image],
2715        cost_input: 0.95,
2716        cost_output: 4.0,
2717        cost_cache_read: 0.16,
2718        cost_cache_write: 0.0,
2719        context_window: 256000,
2720        max_tokens: 256000,
2721    },
2722    ModelEntry {
2723        id: "workers-ai/@cf/zai-org/glm-4.7-flash",
2724        name: "GLM-4.7-Flash",
2725        api: Api::OpenAiCompletions,
2726        provider: "cloudflare-ai-gateway",
2727        reasoning: true,
2728        input: &[InputModality::Text],
2729        cost_input: 0.06,
2730        cost_output: 0.4,
2731        cost_cache_read: 0.0,
2732        cost_cache_write: 0.0,
2733        context_window: 131072,
2734        max_tokens: 131072,
2735    },
2736];
2737
2738/// cloudflare-workers-ai models (12 entries)
2739static CLOUDFLARE_WORKERS_AI_MODELS: &[ModelEntry] = &[
2740    ModelEntry {
2741        id: "@cf/google/gemma-4-26b-a4b-it",
2742        name: "Gemma 4 26B A4B IT",
2743        api: Api::OpenAiCompletions,
2744        provider: "cloudflare-workers-ai",
2745        reasoning: true,
2746        input: &[InputModality::Text, InputModality::Image],
2747        cost_input: 0.0,
2748        cost_output: 0.0,
2749        cost_cache_read: 0.0,
2750        cost_cache_write: 0.0,
2751        context_window: 256000,
2752        max_tokens: 16384,
2753    },
2754    ModelEntry {
2755        id: "@cf/meta/llama-4-scout-17b-16e-instruct",
2756        name: "Llama 4 Scout 17B 16E Instruct",
2757        api: Api::OpenAiCompletions,
2758        provider: "cloudflare-workers-ai",
2759        reasoning: false,
2760        input: &[InputModality::Text, InputModality::Image],
2761        cost_input: 0.0,
2762        cost_output: 0.0,
2763        cost_cache_read: 0.0,
2764        cost_cache_write: 0.0,
2765        context_window: 128000,
2766        max_tokens: 16384,
2767    },
2768    ModelEntry {
2769        id: "@cf/moonshotai/kimi-k2.5",
2770        name: "Kimi K2.5",
2771        api: Api::OpenAiCompletions,
2772        provider: "cloudflare-workers-ai",
2773        reasoning: true,
2774        input: &[InputModality::Text, InputModality::Image],
2775        cost_input: 0.0,
2776        cost_output: 0.0,
2777        cost_cache_read: 0.1,
2778        cost_cache_write: 0.0,
2779        context_window: 256000,
2780        max_tokens: 256000,
2781    },
2782    ModelEntry {
2783        id: "@cf/moonshotai/kimi-k2.6",
2784        name: "Kimi K2.6",
2785        api: Api::OpenAiCompletions,
2786        provider: "cloudflare-workers-ai",
2787        reasoning: true,
2788        input: &[InputModality::Text, InputModality::Image],
2789        cost_input: 0.0,
2790        cost_output: 0.0,
2791        cost_cache_read: 0.16,
2792        cost_cache_write: 0.0,
2793        context_window: 256000,
2794        max_tokens: 256000,
2795    },
2796    ModelEntry {
2797        id: "@cf/nvidia/nemotron-3-120b-a12b",
2798        name: "Nemotron 3 Super 120B",
2799        api: Api::OpenAiCompletions,
2800        provider: "cloudflare-workers-ai",
2801        reasoning: true,
2802        input: &[InputModality::Text],
2803        cost_input: 0.0,
2804        cost_output: 0.0,
2805        cost_cache_read: 0.0,
2806        cost_cache_write: 0.0,
2807        context_window: 256000,
2808        max_tokens: 256000,
2809    },
2810    ModelEntry {
2811        id: "@cf/openai/gpt-oss-120b",
2812        name: "GPT OSS 120B",
2813        api: Api::OpenAiCompletions,
2814        provider: "cloudflare-workers-ai",
2815        reasoning: true,
2816        input: &[InputModality::Text],
2817        cost_input: 0.0,
2818        cost_output: 0.0,
2819        cost_cache_read: 0.0,
2820        cost_cache_write: 0.0,
2821        context_window: 128000,
2822        max_tokens: 16384,
2823    },
2824    ModelEntry {
2825        id: "@cf/openai/gpt-oss-20b",
2826        name: "GPT OSS 20B",
2827        api: Api::OpenAiCompletions,
2828        provider: "cloudflare-workers-ai",
2829        reasoning: true,
2830        input: &[InputModality::Text],
2831        cost_input: 0.0,
2832        cost_output: 0.0,
2833        cost_cache_read: 0.0,
2834        cost_cache_write: 0.0,
2835        context_window: 128000,
2836        max_tokens: 16384,
2837    },
2838    ModelEntry {
2839        id: "@cf/zai-org/glm-4.7-flash",
2840        name: "GLM-4.7-Flash",
2841        api: Api::OpenAiCompletions,
2842        provider: "cloudflare-workers-ai",
2843        reasoning: true,
2844        input: &[InputModality::Text],
2845        cost_input: 0.0,
2846        cost_output: 0.0,
2847        cost_cache_read: 0.0,
2848        cost_cache_write: 0.0,
2849        context_window: 131072,
2850        max_tokens: 131072,
2851    },
2852    ModelEntry {
2853        id: "@cf/ibm-granite/granite-4.0-h-micro",
2854        name: "Granite 4.0 H Micro",
2855        api: Api::OpenAiCompletions,
2856        provider: "cloudflare-workers-ai",
2857        reasoning: false,
2858        input: &[InputModality::Text],
2859        cost_input: 0.017,
2860        cost_output: 0.112,
2861        cost_cache_read: 0.0,
2862        cost_cache_write: 0.0,
2863        context_window: 131000,
2864        max_tokens: 131000,
2865    },
2866    ModelEntry {
2867        id: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
2868        name: "Llama 3.3 70B Instruct fp8 Fast",
2869        api: Api::OpenAiCompletions,
2870        provider: "cloudflare-workers-ai",
2871        reasoning: false,
2872        input: &[InputModality::Text],
2873        cost_input: 0.293,
2874        cost_output: 2.253,
2875        cost_cache_read: 0.0,
2876        cost_cache_write: 0.0,
2877        context_window: 24000,
2878        max_tokens: 24000,
2879    },
2880    ModelEntry {
2881        id: "@cf/mistralai/mistral-small-3.1-24b-instruct",
2882        name: "Mistral Small 3.1 24B Instruct",
2883        api: Api::OpenAiCompletions,
2884        provider: "cloudflare-workers-ai",
2885        reasoning: false,
2886        input: &[InputModality::Text],
2887        cost_input: 0.351,
2888        cost_output: 0.555,
2889        cost_cache_read: 0.0,
2890        cost_cache_write: 0.0,
2891        context_window: 128000,
2892        max_tokens: 128000,
2893    },
2894    ModelEntry {
2895        id: "@cf/qwen/qwen3-30b-a3b-fp8",
2896        name: "Qwen3 30B A3b fp8",
2897        api: Api::OpenAiCompletions,
2898        provider: "cloudflare-workers-ai",
2899        reasoning: true,
2900        input: &[InputModality::Text],
2901        cost_input: 0.0509,
2902        cost_output: 0.335,
2903        cost_cache_read: 0.0,
2904        cost_cache_write: 0.0,
2905        context_window: 32768,
2906        max_tokens: 32768,
2907    },
2908];
2909
2910/// deepseek models (2 entries)
2911static DEEPSEEK_MODELS: &[ModelEntry] = &[
2912    ModelEntry {
2913        id: "deepseek-v4-flash",
2914        name: "DeepSeek V4 Flash",
2915        api: Api::OpenAiCompletions,
2916        provider: "deepseek",
2917        reasoning: true,
2918        input: &[InputModality::Text],
2919        cost_input: 0.0,
2920        cost_output: 0.0,
2921        cost_cache_read: 0.0028,
2922        cost_cache_write: 0.0,
2923        context_window: 1000000,
2924        max_tokens: 384000,
2925    },
2926    ModelEntry {
2927        id: "deepseek-v4-pro",
2928        name: "DeepSeek V4 Pro",
2929        api: Api::OpenAiCompletions,
2930        provider: "deepseek",
2931        reasoning: true,
2932        input: &[InputModality::Text],
2933        cost_input: 0.0,
2934        cost_output: 0.0,
2935        cost_cache_read: 0.003625,
2936        cost_cache_write: 0.0,
2937        context_window: 1000000,
2938        max_tokens: 384000,
2939    },
2940];
2941
2942/// fireworks models (22 entries)
2943static FIREWORKS_MODELS: &[ModelEntry] = &[
2944    ModelEntry {
2945        id: "accounts/fireworks/models/deepseek-v3p1",
2946        name: "DeepSeek V3.1",
2947        api: Api::AnthropicMessages,
2948        provider: "fireworks",
2949        reasoning: true,
2950        input: &[InputModality::Text],
2951        cost_input: 0.0,
2952        cost_output: 0.0,
2953        cost_cache_read: 0.0,
2954        cost_cache_write: 0.0,
2955        context_window: 163840,
2956        max_tokens: 163840,
2957    },
2958    ModelEntry {
2959        id: "accounts/fireworks/models/deepseek-v3p2",
2960        name: "DeepSeek V3.2",
2961        api: Api::AnthropicMessages,
2962        provider: "fireworks",
2963        reasoning: true,
2964        input: &[InputModality::Text],
2965        cost_input: 0.0,
2966        cost_output: 0.0,
2967        cost_cache_read: 0.28,
2968        cost_cache_write: 0.0,
2969        context_window: 160000,
2970        max_tokens: 160000,
2971    },
2972    ModelEntry {
2973        id: "accounts/fireworks/models/deepseek-v4-pro",
2974        name: "DeepSeek V4 Pro",
2975        api: Api::AnthropicMessages,
2976        provider: "fireworks",
2977        reasoning: true,
2978        input: &[InputModality::Text],
2979        cost_input: 0.0,
2980        cost_output: 0.0,
2981        cost_cache_read: 0.15,
2982        cost_cache_write: 0.0,
2983        context_window: 1000000,
2984        max_tokens: 384000,
2985    },
2986    ModelEntry {
2987        id: "accounts/fireworks/models/glm-4p5",
2988        name: "GLM 4.5",
2989        api: Api::AnthropicMessages,
2990        provider: "fireworks",
2991        reasoning: true,
2992        input: &[InputModality::Text],
2993        cost_input: 0.0,
2994        cost_output: 0.0,
2995        cost_cache_read: 0.0,
2996        cost_cache_write: 0.0,
2997        context_window: 131072,
2998        max_tokens: 131072,
2999    },
3000    ModelEntry {
3001        id: "accounts/fireworks/models/glm-4p5-air",
3002        name: "GLM 4.5 Air",
3003        api: Api::AnthropicMessages,
3004        provider: "fireworks",
3005        reasoning: true,
3006        input: &[InputModality::Text],
3007        cost_input: 0.0,
3008        cost_output: 0.0,
3009        cost_cache_read: 0.0,
3010        cost_cache_write: 0.0,
3011        context_window: 131072,
3012        max_tokens: 131072,
3013    },
3014    ModelEntry {
3015        id: "accounts/fireworks/models/glm-4p7",
3016        name: "GLM 4.7",
3017        api: Api::AnthropicMessages,
3018        provider: "fireworks",
3019        reasoning: true,
3020        input: &[InputModality::Text],
3021        cost_input: 0.0,
3022        cost_output: 0.0,
3023        cost_cache_read: 0.3,
3024        cost_cache_write: 0.0,
3025        context_window: 198000,
3026        max_tokens: 198000,
3027    },
3028    ModelEntry {
3029        id: "accounts/fireworks/models/glm-5",
3030        name: "GLM 5",
3031        api: Api::AnthropicMessages,
3032        provider: "fireworks",
3033        reasoning: true,
3034        input: &[InputModality::Text],
3035        cost_input: 0.0,
3036        cost_output: 0.0,
3037        cost_cache_read: 0.5,
3038        cost_cache_write: 0.0,
3039        context_window: 202752,
3040        max_tokens: 131072,
3041    },
3042    ModelEntry {
3043        id: "accounts/fireworks/models/glm-5p1",
3044        name: "GLM 5.1",
3045        api: Api::AnthropicMessages,
3046        provider: "fireworks",
3047        reasoning: true,
3048        input: &[InputModality::Text],
3049        cost_input: 0.0,
3050        cost_output: 0.0,
3051        cost_cache_read: 0.26,
3052        cost_cache_write: 0.0,
3053        context_window: 202800,
3054        max_tokens: 131072,
3055    },
3056    ModelEntry {
3057        id: "accounts/fireworks/models/gpt-oss-120b",
3058        name: "GPT OSS 120B",
3059        api: Api::AnthropicMessages,
3060        provider: "fireworks",
3061        reasoning: true,
3062        input: &[InputModality::Text],
3063        cost_input: 0.0,
3064        cost_output: 0.0,
3065        cost_cache_read: 0.0,
3066        cost_cache_write: 0.0,
3067        context_window: 131072,
3068        max_tokens: 32768,
3069    },
3070    ModelEntry {
3071        id: "accounts/fireworks/models/gpt-oss-20b",
3072        name: "GPT OSS 20B",
3073        api: Api::AnthropicMessages,
3074        provider: "fireworks",
3075        reasoning: true,
3076        input: &[InputModality::Text],
3077        cost_input: 0.0,
3078        cost_output: 0.0,
3079        cost_cache_read: 0.0,
3080        cost_cache_write: 0.0,
3081        context_window: 131072,
3082        max_tokens: 32768,
3083    },
3084    ModelEntry {
3085        id: "accounts/fireworks/models/kimi-k2-instruct",
3086        name: "Kimi K2 Instruct",
3087        api: Api::AnthropicMessages,
3088        provider: "fireworks",
3089        reasoning: false,
3090        input: &[InputModality::Text],
3091        cost_input: 0.0,
3092        cost_output: 0.0,
3093        cost_cache_read: 0.0,
3094        cost_cache_write: 0.0,
3095        context_window: 128000,
3096        max_tokens: 16384,
3097    },
3098    ModelEntry {
3099        id: "accounts/fireworks/models/kimi-k2-thinking",
3100        name: "Kimi K2 Thinking",
3101        api: Api::AnthropicMessages,
3102        provider: "fireworks",
3103        reasoning: true,
3104        input: &[InputModality::Text],
3105        cost_input: 0.0,
3106        cost_output: 0.0,
3107        cost_cache_read: 0.3,
3108        cost_cache_write: 0.0,
3109        context_window: 256000,
3110        max_tokens: 256000,
3111    },
3112    ModelEntry {
3113        id: "accounts/fireworks/models/kimi-k2p5",
3114        name: "Kimi K2.5",
3115        api: Api::AnthropicMessages,
3116        provider: "fireworks",
3117        reasoning: true,
3118        input: &[InputModality::Text, InputModality::Image],
3119        cost_input: 0.0,
3120        cost_output: 0.0,
3121        cost_cache_read: 0.1,
3122        cost_cache_write: 0.0,
3123        context_window: 256000,
3124        max_tokens: 256000,
3125    },
3126    ModelEntry {
3127        id: "accounts/fireworks/models/kimi-k2p6",
3128        name: "Kimi K2.6",
3129        api: Api::AnthropicMessages,
3130        provider: "fireworks",
3131        reasoning: true,
3132        input: &[InputModality::Text, InputModality::Image],
3133        cost_input: 0.0,
3134        cost_output: 0.0,
3135        cost_cache_read: 0.16,
3136        cost_cache_write: 0.0,
3137        context_window: 262000,
3138        max_tokens: 262000,
3139    },
3140    ModelEntry {
3141        id: "accounts/fireworks/models/minimax-m2p1",
3142        name: "MiniMax-M2.1",
3143        api: Api::AnthropicMessages,
3144        provider: "fireworks",
3145        reasoning: true,
3146        input: &[InputModality::Text],
3147        cost_input: 0.0,
3148        cost_output: 0.0,
3149        cost_cache_read: 0.03,
3150        cost_cache_write: 0.0,
3151        context_window: 200000,
3152        max_tokens: 200000,
3153    },
3154    ModelEntry {
3155        id: "accounts/fireworks/models/minimax-m2p5",
3156        name: "MiniMax-M2.5",
3157        api: Api::AnthropicMessages,
3158        provider: "fireworks",
3159        reasoning: true,
3160        input: &[InputModality::Text],
3161        cost_input: 0.0,
3162        cost_output: 0.0,
3163        cost_cache_read: 0.03,
3164        cost_cache_write: 0.0,
3165        context_window: 196608,
3166        max_tokens: 196608,
3167    },
3168    ModelEntry {
3169        id: "accounts/fireworks/models/minimax-m2p7",
3170        name: "MiniMax-M2.7",
3171        api: Api::AnthropicMessages,
3172        provider: "fireworks",
3173        reasoning: true,
3174        input: &[InputModality::Text],
3175        cost_input: 0.0,
3176        cost_output: 0.0,
3177        cost_cache_read: 0.03,
3178        cost_cache_write: 0.0,
3179        context_window: 196608,
3180        max_tokens: 196608,
3181    },
3182    ModelEntry {
3183        id: "accounts/fireworks/models/qwen3p6-plus",
3184        name: "Qwen 3.6 Plus",
3185        api: Api::AnthropicMessages,
3186        provider: "fireworks",
3187        reasoning: true,
3188        input: &[InputModality::Text, InputModality::Image],
3189        cost_input: 0.0,
3190        cost_output: 0.0,
3191        cost_cache_read: 0.1,
3192        cost_cache_write: 0.0,
3193        context_window: 128000,
3194        max_tokens: 8192,
3195    },
3196    ModelEntry {
3197        id: "accounts/fireworks/routers/kimi-k2p5-turbo",
3198        name: "Kimi K2.5 Turbo",
3199        api: Api::AnthropicMessages,
3200        provider: "fireworks",
3201        reasoning: true,
3202        input: &[InputModality::Text, InputModality::Image],
3203        cost_input: 0.0,
3204        cost_output: 0.0,
3205        cost_cache_read: 0.0,
3206        cost_cache_write: 0.0,
3207        context_window: 256000,
3208        max_tokens: 256000,
3209    },
3210    ModelEntry {
3211        id: "accounts/fireworks/models/deepseek-v4-flash",
3212        name: "DeepSeek V4 Flash",
3213        api: Api::AnthropicMessages,
3214        provider: "fireworks",
3215        reasoning: true,
3216        input: &[InputModality::Text],
3217        cost_input: 0.14,
3218        cost_output: 0.28,
3219        cost_cache_read: 0.03,
3220        cost_cache_write: 0.0,
3221        context_window: 1000000,
3222        max_tokens: 384000,
3223    },
3224    ModelEntry {
3225        id: "accounts/fireworks/routers/glm-5p1-fast",
3226        name: "GLM 5.1 Fast",
3227        api: Api::AnthropicMessages,
3228        provider: "fireworks",
3229        reasoning: true,
3230        input: &[InputModality::Text],
3231        cost_input: 2.8,
3232        cost_output: 8.8,
3233        cost_cache_read: 0.52,
3234        cost_cache_write: 0.0,
3235        context_window: 202800,
3236        max_tokens: 131072,
3237    },
3238    ModelEntry {
3239        id: "accounts/fireworks/routers/kimi-k2p6-turbo",
3240        name: "Kimi K2.6 Turbo",
3241        api: Api::AnthropicMessages,
3242        provider: "fireworks",
3243        reasoning: true,
3244        input: &[InputModality::Text, InputModality::Image],
3245        cost_input: 2.0,
3246        cost_output: 8.0,
3247        cost_cache_read: 0.3,
3248        cost_cache_write: 0.0,
3249        context_window: 262000,
3250        max_tokens: 262000,
3251    },
3252];
3253
3254/// github-copilot models (27 entries)
3255static GITHUB_COPILOT_MODELS: &[ModelEntry] = &[
3256    ModelEntry {
3257        id: "claude-haiku-4.5",
3258        name: "Claude Haiku 4.5",
3259        api: Api::AnthropicMessages,
3260        provider: "github-copilot",
3261        reasoning: true,
3262        input: &[InputModality::Text, InputModality::Image],
3263        cost_input: 0.0,
3264        cost_output: 0.0,
3265        cost_cache_read: 0.0,
3266        cost_cache_write: 0.0,
3267        context_window: 144000,
3268        max_tokens: 32000,
3269    },
3270    ModelEntry {
3271        id: "claude-opus-4.5",
3272        name: "Claude Opus 4.5",
3273        api: Api::AnthropicMessages,
3274        provider: "github-copilot",
3275        reasoning: true,
3276        input: &[InputModality::Text, InputModality::Image],
3277        cost_input: 0.0,
3278        cost_output: 0.0,
3279        cost_cache_read: 0.0,
3280        cost_cache_write: 0.0,
3281        context_window: 160000,
3282        max_tokens: 32000,
3283    },
3284    ModelEntry {
3285        id: "claude-opus-4.6",
3286        name: "Claude Opus 4.6",
3287        api: Api::AnthropicMessages,
3288        provider: "github-copilot",
3289        reasoning: true,
3290        input: &[InputModality::Text, InputModality::Image],
3291        cost_input: 0.0,
3292        cost_output: 0.0,
3293        cost_cache_read: 0.0,
3294        cost_cache_write: 0.0,
3295        context_window: 1000000,
3296        max_tokens: 64000,
3297    },
3298    ModelEntry {
3299        id: "claude-opus-4.7",
3300        name: "Claude Opus 4.7",
3301        api: Api::AnthropicMessages,
3302        provider: "github-copilot",
3303        reasoning: true,
3304        input: &[InputModality::Text, InputModality::Image],
3305        cost_input: 0.0,
3306        cost_output: 0.0,
3307        cost_cache_read: 0.0,
3308        cost_cache_write: 0.0,
3309        context_window: 144000,
3310        max_tokens: 64000,
3311    },
3312    ModelEntry {
3313        id: "claude-sonnet-4",
3314        name: "Claude Sonnet 4",
3315        api: Api::AnthropicMessages,
3316        provider: "github-copilot",
3317        reasoning: true,
3318        input: &[InputModality::Text, InputModality::Image],
3319        cost_input: 0.0,
3320        cost_output: 0.0,
3321        cost_cache_read: 0.0,
3322        cost_cache_write: 0.0,
3323        context_window: 216000,
3324        max_tokens: 16000,
3325    },
3326    ModelEntry {
3327        id: "claude-sonnet-4.5",
3328        name: "Claude Sonnet 4.5",
3329        api: Api::AnthropicMessages,
3330        provider: "github-copilot",
3331        reasoning: true,
3332        input: &[InputModality::Text, InputModality::Image],
3333        cost_input: 0.0,
3334        cost_output: 0.0,
3335        cost_cache_read: 0.0,
3336        cost_cache_write: 0.0,
3337        context_window: 144000,
3338        max_tokens: 32000,
3339    },
3340    ModelEntry {
3341        id: "claude-sonnet-4.6",
3342        name: "Claude Sonnet 4.6",
3343        api: Api::AnthropicMessages,
3344        provider: "github-copilot",
3345        reasoning: true,
3346        input: &[InputModality::Text, InputModality::Image],
3347        cost_input: 0.0,
3348        cost_output: 0.0,
3349        cost_cache_read: 0.0,
3350        cost_cache_write: 0.0,
3351        context_window: 1000000,
3352        max_tokens: 32000,
3353    },
3354    ModelEntry {
3355        id: "gemini-2.5-pro",
3356        name: "Gemini 2.5 Pro",
3357        api: Api::OpenAiCompletions,
3358        provider: "github-copilot",
3359        reasoning: false,
3360        input: &[InputModality::Text, InputModality::Image],
3361        cost_input: 0.0,
3362        cost_output: 0.0,
3363        cost_cache_read: 0.0,
3364        cost_cache_write: 0.0,
3365        context_window: 128000,
3366        max_tokens: 64000,
3367    },
3368    ModelEntry {
3369        id: "gemini-3-flash-preview",
3370        name: "Gemini 3 Flash",
3371        api: Api::OpenAiCompletions,
3372        provider: "github-copilot",
3373        reasoning: true,
3374        input: &[InputModality::Text, InputModality::Image],
3375        cost_input: 0.0,
3376        cost_output: 0.0,
3377        cost_cache_read: 0.0,
3378        cost_cache_write: 0.0,
3379        context_window: 128000,
3380        max_tokens: 64000,
3381    },
3382    ModelEntry {
3383        id: "gemini-3-pro-preview",
3384        name: "Gemini 3 Pro Preview",
3385        api: Api::OpenAiCompletions,
3386        provider: "github-copilot",
3387        reasoning: true,
3388        input: &[InputModality::Text, InputModality::Image],
3389        cost_input: 0.0,
3390        cost_output: 0.0,
3391        cost_cache_read: 0.0,
3392        cost_cache_write: 0.0,
3393        context_window: 128000,
3394        max_tokens: 64000,
3395    },
3396    ModelEntry {
3397        id: "gemini-3.1-pro-preview",
3398        name: "Gemini 3.1 Pro Preview",
3399        api: Api::OpenAiCompletions,
3400        provider: "github-copilot",
3401        reasoning: true,
3402        input: &[InputModality::Text, InputModality::Image],
3403        cost_input: 0.0,
3404        cost_output: 0.0,
3405        cost_cache_read: 0.0,
3406        cost_cache_write: 0.0,
3407        context_window: 128000,
3408        max_tokens: 64000,
3409    },
3410    ModelEntry {
3411        id: "gpt-4.1",
3412        name: "GPT-4.1",
3413        api: Api::OpenAiCompletions,
3414        provider: "github-copilot",
3415        reasoning: false,
3416        input: &[InputModality::Text, InputModality::Image],
3417        cost_input: 0.0,
3418        cost_output: 0.0,
3419        cost_cache_read: 0.0,
3420        cost_cache_write: 0.0,
3421        context_window: 128000,
3422        max_tokens: 16384,
3423    },
3424    ModelEntry {
3425        id: "gpt-4o",
3426        name: "GPT-4o",
3427        api: Api::OpenAiCompletions,
3428        provider: "github-copilot",
3429        reasoning: false,
3430        input: &[InputModality::Text, InputModality::Image],
3431        cost_input: 0.0,
3432        cost_output: 0.0,
3433        cost_cache_read: 0.0,
3434        cost_cache_write: 0.0,
3435        context_window: 128000,
3436        max_tokens: 4096,
3437    },
3438    ModelEntry {
3439        id: "gpt-5",
3440        name: "GPT-5",
3441        api: Api::OpenAiResponses,
3442        provider: "github-copilot",
3443        reasoning: true,
3444        input: &[InputModality::Text, InputModality::Image],
3445        cost_input: 0.0,
3446        cost_output: 0.0,
3447        cost_cache_read: 0.0,
3448        cost_cache_write: 0.0,
3449        context_window: 128000,
3450        max_tokens: 128000,
3451    },
3452    ModelEntry {
3453        id: "gpt-5-mini",
3454        name: "GPT-5-mini",
3455        api: Api::OpenAiResponses,
3456        provider: "github-copilot",
3457        reasoning: true,
3458        input: &[InputModality::Text, InputModality::Image],
3459        cost_input: 0.0,
3460        cost_output: 0.0,
3461        cost_cache_read: 0.0,
3462        cost_cache_write: 0.0,
3463        context_window: 264000,
3464        max_tokens: 64000,
3465    },
3466    ModelEntry {
3467        id: "gpt-5.1",
3468        name: "GPT-5.1",
3469        api: Api::OpenAiResponses,
3470        provider: "github-copilot",
3471        reasoning: true,
3472        input: &[InputModality::Text, InputModality::Image],
3473        cost_input: 0.0,
3474        cost_output: 0.0,
3475        cost_cache_read: 0.0,
3476        cost_cache_write: 0.0,
3477        context_window: 264000,
3478        max_tokens: 64000,
3479    },
3480    ModelEntry {
3481        id: "gpt-5.1-codex",
3482        name: "GPT-5.1-Codex",
3483        api: Api::OpenAiResponses,
3484        provider: "github-copilot",
3485        reasoning: true,
3486        input: &[InputModality::Text, InputModality::Image],
3487        cost_input: 0.0,
3488        cost_output: 0.0,
3489        cost_cache_read: 0.0,
3490        cost_cache_write: 0.0,
3491        context_window: 400000,
3492        max_tokens: 128000,
3493    },
3494    ModelEntry {
3495        id: "gpt-5.1-codex-max",
3496        name: "GPT-5.1-Codex-max",
3497        api: Api::OpenAiResponses,
3498        provider: "github-copilot",
3499        reasoning: true,
3500        input: &[InputModality::Text, InputModality::Image],
3501        cost_input: 0.0,
3502        cost_output: 0.0,
3503        cost_cache_read: 0.0,
3504        cost_cache_write: 0.0,
3505        context_window: 400000,
3506        max_tokens: 128000,
3507    },
3508    ModelEntry {
3509        id: "gpt-5.1-codex-mini",
3510        name: "GPT-5.1-Codex-mini",
3511        api: Api::OpenAiResponses,
3512        provider: "github-copilot",
3513        reasoning: true,
3514        input: &[InputModality::Text, InputModality::Image],
3515        cost_input: 0.0,
3516        cost_output: 0.0,
3517        cost_cache_read: 0.0,
3518        cost_cache_write: 0.0,
3519        context_window: 400000,
3520        max_tokens: 128000,
3521    },
3522    ModelEntry {
3523        id: "gpt-5.2",
3524        name: "GPT-5.2",
3525        api: Api::OpenAiResponses,
3526        provider: "github-copilot",
3527        reasoning: true,
3528        input: &[InputModality::Text, InputModality::Image],
3529        cost_input: 0.0,
3530        cost_output: 0.0,
3531        cost_cache_read: 0.0,
3532        cost_cache_write: 0.0,
3533        context_window: 264000,
3534        max_tokens: 64000,
3535    },
3536    ModelEntry {
3537        id: "gpt-5.2-codex",
3538        name: "GPT-5.2-Codex",
3539        api: Api::OpenAiResponses,
3540        provider: "github-copilot",
3541        reasoning: true,
3542        input: &[InputModality::Text, InputModality::Image],
3543        cost_input: 0.0,
3544        cost_output: 0.0,
3545        cost_cache_read: 0.0,
3546        cost_cache_write: 0.0,
3547        context_window: 400000,
3548        max_tokens: 128000,
3549    },
3550    ModelEntry {
3551        id: "gpt-5.3-codex",
3552        name: "GPT-5.3-Codex",
3553        api: Api::OpenAiResponses,
3554        provider: "github-copilot",
3555        reasoning: true,
3556        input: &[InputModality::Text, InputModality::Image],
3557        cost_input: 0.0,
3558        cost_output: 0.0,
3559        cost_cache_read: 0.0,
3560        cost_cache_write: 0.0,
3561        context_window: 400000,
3562        max_tokens: 128000,
3563    },
3564    ModelEntry {
3565        id: "gpt-5.4",
3566        name: "GPT-5.4",
3567        api: Api::OpenAiResponses,
3568        provider: "github-copilot",
3569        reasoning: true,
3570        input: &[InputModality::Text, InputModality::Image],
3571        cost_input: 0.0,
3572        cost_output: 0.0,
3573        cost_cache_read: 0.0,
3574        cost_cache_write: 0.0,
3575        context_window: 400000,
3576        max_tokens: 128000,
3577    },
3578    ModelEntry {
3579        id: "gpt-5.4-mini",
3580        name: "GPT-5.4 Mini",
3581        api: Api::OpenAiResponses,
3582        provider: "github-copilot",
3583        reasoning: true,
3584        input: &[InputModality::Text, InputModality::Image],
3585        cost_input: 0.0,
3586        cost_output: 0.0,
3587        cost_cache_read: 0.0,
3588        cost_cache_write: 0.0,
3589        context_window: 400000,
3590        max_tokens: 128000,
3591    },
3592    ModelEntry {
3593        id: "gpt-5.5",
3594        name: "GPT-5.5",
3595        api: Api::OpenAiResponses,
3596        provider: "github-copilot",
3597        reasoning: true,
3598        input: &[InputModality::Text, InputModality::Image],
3599        cost_input: 0.0,
3600        cost_output: 0.0,
3601        cost_cache_read: 0.0,
3602        cost_cache_write: 0.0,
3603        context_window: 400000,
3604        max_tokens: 128000,
3605    },
3606    ModelEntry {
3607        id: "grok-code-fast-1",
3608        name: "Grok Code Fast 1",
3609        api: Api::OpenAiCompletions,
3610        provider: "github-copilot",
3611        reasoning: true,
3612        input: &[InputModality::Text],
3613        cost_input: 0.0,
3614        cost_output: 0.0,
3615        cost_cache_read: 0.0,
3616        cost_cache_write: 0.0,
3617        context_window: 128000,
3618        max_tokens: 64000,
3619    },
3620    ModelEntry {
3621        id: "gemini-3.5-flash",
3622        name: "Gemini 3.5 Flash",
3623        api: Api::OpenAiCompletions,
3624        provider: "github-copilot",
3625        reasoning: true,
3626        input: &[InputModality::Text, InputModality::Image],
3627        cost_input: 0.0,
3628        cost_output: 0.0,
3629        cost_cache_read: 0.0,
3630        cost_cache_write: 0.0,
3631        context_window: 128000,
3632        max_tokens: 64000,
3633    },
3634];
3635
3636/// google models (29 entries)
3637static GOOGLE_MODELS: &[ModelEntry] = &[
3638    ModelEntry {
3639        id: "gemini-1.5-flash",
3640        name: "Gemini 1.5 Flash",
3641        api: Api::GoogleGenerativeAi,
3642        provider: "google",
3643        reasoning: false,
3644        input: &[InputModality::Text, InputModality::Image],
3645        cost_input: 0.0,
3646        cost_output: 0.0,
3647        cost_cache_read: 0.01875,
3648        cost_cache_write: 0.0,
3649        context_window: 1000000,
3650        max_tokens: 8192,
3651    },
3652    ModelEntry {
3653        id: "gemini-1.5-flash-8b",
3654        name: "Gemini 1.5 Flash-8B",
3655        api: Api::GoogleGenerativeAi,
3656        provider: "google",
3657        reasoning: false,
3658        input: &[InputModality::Text, InputModality::Image],
3659        cost_input: 0.0,
3660        cost_output: 0.0,
3661        cost_cache_read: 0.01,
3662        cost_cache_write: 0.0,
3663        context_window: 1000000,
3664        max_tokens: 8192,
3665    },
3666    ModelEntry {
3667        id: "gemini-1.5-pro",
3668        name: "Gemini 1.5 Pro",
3669        api: Api::GoogleGenerativeAi,
3670        provider: "google",
3671        reasoning: false,
3672        input: &[InputModality::Text, InputModality::Image],
3673        cost_input: 0.0,
3674        cost_output: 0.0,
3675        cost_cache_read: 0.3125,
3676        cost_cache_write: 0.0,
3677        context_window: 1000000,
3678        max_tokens: 8192,
3679    },
3680    ModelEntry {
3681        id: "gemini-2.0-flash",
3682        name: "Gemini 2.0 Flash",
3683        api: Api::GoogleGenerativeAi,
3684        provider: "google",
3685        reasoning: false,
3686        input: &[InputModality::Text, InputModality::Image],
3687        cost_input: 0.0,
3688        cost_output: 0.0,
3689        cost_cache_read: 0.025,
3690        cost_cache_write: 0.0,
3691        context_window: 1048576,
3692        max_tokens: 8192,
3693    },
3694    ModelEntry {
3695        id: "gemini-2.0-flash-lite",
3696        name: "Gemini 2.0 Flash Lite",
3697        api: Api::GoogleGenerativeAi,
3698        provider: "google",
3699        reasoning: false,
3700        input: &[InputModality::Text, InputModality::Image],
3701        cost_input: 0.0,
3702        cost_output: 0.0,
3703        cost_cache_read: 0.0,
3704        cost_cache_write: 0.0,
3705        context_window: 1048576,
3706        max_tokens: 8192,
3707    },
3708    ModelEntry {
3709        id: "gemini-2.5-flash",
3710        name: "Gemini 2.5 Flash",
3711        api: Api::GoogleGenerativeAi,
3712        provider: "google",
3713        reasoning: true,
3714        input: &[InputModality::Text, InputModality::Image],
3715        cost_input: 0.0,
3716        cost_output: 0.0,
3717        cost_cache_read: 0.03,
3718        cost_cache_write: 0.0,
3719        context_window: 1048576,
3720        max_tokens: 65536,
3721    },
3722    ModelEntry {
3723        id: "gemini-2.5-flash-lite",
3724        name: "Gemini 2.5 Flash Lite",
3725        api: Api::GoogleGenerativeAi,
3726        provider: "google",
3727        reasoning: true,
3728        input: &[InputModality::Text, InputModality::Image],
3729        cost_input: 0.0,
3730        cost_output: 0.0,
3731        cost_cache_read: 0.025,
3732        cost_cache_write: 0.0,
3733        context_window: 1048576,
3734        max_tokens: 65536,
3735    },
3736    ModelEntry {
3737        id: "gemini-2.5-flash-lite-preview-06-17",
3738        name: "Gemini 2.5 Flash Lite Preview 06-17",
3739        api: Api::GoogleGenerativeAi,
3740        provider: "google",
3741        reasoning: true,
3742        input: &[InputModality::Text, InputModality::Image],
3743        cost_input: 0.0,
3744        cost_output: 0.0,
3745        cost_cache_read: 0.025,
3746        cost_cache_write: 0.0,
3747        context_window: 1048576,
3748        max_tokens: 65536,
3749    },
3750    ModelEntry {
3751        id: "gemini-2.5-flash-lite-preview-09-2025",
3752        name: "Gemini 2.5 Flash Lite Preview 09-25",
3753        api: Api::GoogleGenerativeAi,
3754        provider: "google",
3755        reasoning: true,
3756        input: &[InputModality::Text, InputModality::Image],
3757        cost_input: 0.0,
3758        cost_output: 0.0,
3759        cost_cache_read: 0.025,
3760        cost_cache_write: 0.0,
3761        context_window: 1048576,
3762        max_tokens: 65536,
3763    },
3764    ModelEntry {
3765        id: "gemini-2.5-flash-preview-04-17",
3766        name: "Gemini 2.5 Flash Preview 04-17",
3767        api: Api::GoogleGenerativeAi,
3768        provider: "google",
3769        reasoning: true,
3770        input: &[InputModality::Text, InputModality::Image],
3771        cost_input: 0.0,
3772        cost_output: 0.0,
3773        cost_cache_read: 0.0375,
3774        cost_cache_write: 0.0,
3775        context_window: 1048576,
3776        max_tokens: 65536,
3777    },
3778    ModelEntry {
3779        id: "gemini-2.5-flash-preview-05-20",
3780        name: "Gemini 2.5 Flash Preview 05-20",
3781        api: Api::GoogleGenerativeAi,
3782        provider: "google",
3783        reasoning: true,
3784        input: &[InputModality::Text, InputModality::Image],
3785        cost_input: 0.0,
3786        cost_output: 0.0,
3787        cost_cache_read: 0.0375,
3788        cost_cache_write: 0.0,
3789        context_window: 1048576,
3790        max_tokens: 65536,
3791    },
3792    ModelEntry {
3793        id: "gemini-2.5-flash-preview-09-2025",
3794        name: "Gemini 2.5 Flash Preview 09-25",
3795        api: Api::GoogleGenerativeAi,
3796        provider: "google",
3797        reasoning: true,
3798        input: &[InputModality::Text, InputModality::Image],
3799        cost_input: 0.0,
3800        cost_output: 0.0,
3801        cost_cache_read: 0.075,
3802        cost_cache_write: 0.0,
3803        context_window: 1048576,
3804        max_tokens: 65536,
3805    },
3806    ModelEntry {
3807        id: "gemini-2.5-pro",
3808        name: "Gemini 2.5 Pro",
3809        api: Api::GoogleGenerativeAi,
3810        provider: "google",
3811        reasoning: true,
3812        input: &[InputModality::Text, InputModality::Image],
3813        cost_input: 0.0,
3814        cost_output: 0.0,
3815        cost_cache_read: 0.125,
3816        cost_cache_write: 0.0,
3817        context_window: 1048576,
3818        max_tokens: 65536,
3819    },
3820    ModelEntry {
3821        id: "gemini-2.5-pro-preview-05-06",
3822        name: "Gemini 2.5 Pro Preview 05-06",
3823        api: Api::GoogleGenerativeAi,
3824        provider: "google",
3825        reasoning: true,
3826        input: &[InputModality::Text, InputModality::Image],
3827        cost_input: 0.0,
3828        cost_output: 0.0,
3829        cost_cache_read: 0.31,
3830        cost_cache_write: 0.0,
3831        context_window: 1048576,
3832        max_tokens: 65536,
3833    },
3834    ModelEntry {
3835        id: "gemini-2.5-pro-preview-06-05",
3836        name: "Gemini 2.5 Pro Preview 06-05",
3837        api: Api::GoogleGenerativeAi,
3838        provider: "google",
3839        reasoning: true,
3840        input: &[InputModality::Text, InputModality::Image],
3841        cost_input: 0.0,
3842        cost_output: 0.0,
3843        cost_cache_read: 0.31,
3844        cost_cache_write: 0.0,
3845        context_window: 1048576,
3846        max_tokens: 65536,
3847    },
3848    ModelEntry {
3849        id: "gemini-3-flash-preview",
3850        name: "Gemini 3 Flash Preview",
3851        api: Api::GoogleGenerativeAi,
3852        provider: "google",
3853        reasoning: true,
3854        input: &[InputModality::Text, InputModality::Image],
3855        cost_input: 0.0,
3856        cost_output: 0.0,
3857        cost_cache_read: 0.05,
3858        cost_cache_write: 0.0,
3859        context_window: 1048576,
3860        max_tokens: 65536,
3861    },
3862    ModelEntry {
3863        id: "gemini-3-pro-preview",
3864        name: "Gemini 3 Pro Preview",
3865        api: Api::GoogleGenerativeAi,
3866        provider: "google",
3867        reasoning: true,
3868        input: &[InputModality::Text, InputModality::Image],
3869        cost_input: 0.0,
3870        cost_output: 0.0,
3871        cost_cache_read: 0.2,
3872        cost_cache_write: 0.0,
3873        context_window: 1000000,
3874        max_tokens: 64000,
3875    },
3876    ModelEntry {
3877        id: "gemini-3.1-flash-lite-preview",
3878        name: "Gemini 3.1 Flash Lite Preview",
3879        api: Api::GoogleGenerativeAi,
3880        provider: "google",
3881        reasoning: true,
3882        input: &[InputModality::Text, InputModality::Image],
3883        cost_input: 0.0,
3884        cost_output: 0.0,
3885        cost_cache_read: 0.025,
3886        cost_cache_write: 1.0,
3887        context_window: 1048576,
3888        max_tokens: 65536,
3889    },
3890    ModelEntry {
3891        id: "gemini-3.1-pro-preview",
3892        name: "Gemini 3.1 Pro Preview",
3893        api: Api::GoogleGenerativeAi,
3894        provider: "google",
3895        reasoning: true,
3896        input: &[InputModality::Text, InputModality::Image],
3897        cost_input: 0.0,
3898        cost_output: 0.0,
3899        cost_cache_read: 0.2,
3900        cost_cache_write: 0.0,
3901        context_window: 1048576,
3902        max_tokens: 65536,
3903    },
3904    ModelEntry {
3905        id: "gemini-3.1-pro-preview-customtools",
3906        name: "Gemini 3.1 Pro Preview Custom Tools",
3907        api: Api::GoogleGenerativeAi,
3908        provider: "google",
3909        reasoning: true,
3910        input: &[InputModality::Text, InputModality::Image],
3911        cost_input: 0.0,
3912        cost_output: 0.0,
3913        cost_cache_read: 0.2,
3914        cost_cache_write: 0.0,
3915        context_window: 1048576,
3916        max_tokens: 65536,
3917    },
3918    ModelEntry {
3919        id: "gemini-flash-latest",
3920        name: "Gemini Flash Latest",
3921        api: Api::GoogleGenerativeAi,
3922        provider: "google",
3923        reasoning: true,
3924        input: &[InputModality::Text, InputModality::Image],
3925        cost_input: 0.0,
3926        cost_output: 0.0,
3927        cost_cache_read: 0.075,
3928        cost_cache_write: 0.0,
3929        context_window: 1048576,
3930        max_tokens: 65536,
3931    },
3932    ModelEntry {
3933        id: "gemini-flash-lite-latest",
3934        name: "Gemini Flash-Lite Latest",
3935        api: Api::GoogleGenerativeAi,
3936        provider: "google",
3937        reasoning: true,
3938        input: &[InputModality::Text, InputModality::Image],
3939        cost_input: 0.0,
3940        cost_output: 0.0,
3941        cost_cache_read: 0.025,
3942        cost_cache_write: 0.0,
3943        context_window: 1048576,
3944        max_tokens: 65536,
3945    },
3946    ModelEntry {
3947        id: "gemini-live-2.5-flash",
3948        name: "Gemini Live 2.5 Flash",
3949        api: Api::GoogleGenerativeAi,
3950        provider: "google",
3951        reasoning: true,
3952        input: &[InputModality::Text, InputModality::Image],
3953        cost_input: 0.0,
3954        cost_output: 0.0,
3955        cost_cache_read: 0.0,
3956        cost_cache_write: 0.0,
3957        context_window: 128000,
3958        max_tokens: 8000,
3959    },
3960    ModelEntry {
3961        id: "gemini-live-2.5-flash-preview-native-audio",
3962        name: "Gemini Live 2.5 Flash Preview Native Audio",
3963        api: Api::GoogleGenerativeAi,
3964        provider: "google",
3965        reasoning: true,
3966        input: &[InputModality::Text],
3967        cost_input: 0.0,
3968        cost_output: 0.0,
3969        cost_cache_read: 0.0,
3970        cost_cache_write: 0.0,
3971        context_window: 131072,
3972        max_tokens: 65536,
3973    },
3974    ModelEntry {
3975        id: "gemma-3-27b-it",
3976        name: "Gemma 3 27B",
3977        api: Api::GoogleGenerativeAi,
3978        provider: "google",
3979        reasoning: false,
3980        input: &[InputModality::Text, InputModality::Image],
3981        cost_input: 0.0,
3982        cost_output: 0.0,
3983        cost_cache_read: 0.0,
3984        cost_cache_write: 0.0,
3985        context_window: 131072,
3986        max_tokens: 8192,
3987    },
3988    ModelEntry {
3989        id: "gemma-4-26b-a4b-it",
3990        name: "Gemma 4 26B",
3991        api: Api::GoogleGenerativeAi,
3992        provider: "google",
3993        reasoning: true,
3994        input: &[InputModality::Text, InputModality::Image],
3995        cost_input: 0.0,
3996        cost_output: 0.0,
3997        cost_cache_read: 0.0,
3998        cost_cache_write: 0.0,
3999        context_window: 256000,
4000        max_tokens: 8192,
4001    },
4002    ModelEntry {
4003        id: "gemma-4-31b-it",
4004        name: "Gemma 4 31B",
4005        api: Api::GoogleGenerativeAi,
4006        provider: "google",
4007        reasoning: true,
4008        input: &[InputModality::Text, InputModality::Image],
4009        cost_input: 0.0,
4010        cost_output: 0.0,
4011        cost_cache_read: 0.0,
4012        cost_cache_write: 0.0,
4013        context_window: 256000,
4014        max_tokens: 8192,
4015    },
4016    ModelEntry {
4017        id: "gemini-3.1-flash-lite",
4018        name: "Gemini 3.1 Flash Lite",
4019        api: Api::GoogleGenerativeAi,
4020        provider: "google",
4021        reasoning: true,
4022        input: &[InputModality::Text, InputModality::Image],
4023        cost_input: 0.25,
4024        cost_output: 1.5,
4025        cost_cache_read: 0.025,
4026        cost_cache_write: 0.0,
4027        context_window: 1048576,
4028        max_tokens: 65536,
4029    },
4030    ModelEntry {
4031        id: "gemini-3.5-flash",
4032        name: "Gemini 3.5 Flash",
4033        api: Api::GoogleGenerativeAi,
4034        provider: "google",
4035        reasoning: true,
4036        input: &[InputModality::Text, InputModality::Image],
4037        cost_input: 1.5,
4038        cost_output: 9.0,
4039        cost_cache_read: 0.15,
4040        cost_cache_write: 0.0,
4041        context_window: 1048576,
4042        max_tokens: 65536,
4043    },
4044];
4045
4046/// google-vertex models (13 entries)
4047static GOOGLE_VERTEX_MODELS: &[ModelEntry] = &[
4048    ModelEntry {
4049        id: "gemini-1.5-flash",
4050        name: "Gemini 1.5 Flash (Vertex)",
4051        api: Api::GoogleVertex,
4052        provider: "google-vertex",
4053        reasoning: false,
4054        input: &[InputModality::Text, InputModality::Image],
4055        cost_input: 0.0,
4056        cost_output: 0.0,
4057        cost_cache_read: 0.01875,
4058        cost_cache_write: 0.0,
4059        context_window: 1000000,
4060        max_tokens: 8192,
4061    },
4062    ModelEntry {
4063        id: "gemini-1.5-flash-8b",
4064        name: "Gemini 1.5 Flash-8B (Vertex)",
4065        api: Api::GoogleVertex,
4066        provider: "google-vertex",
4067        reasoning: false,
4068        input: &[InputModality::Text, InputModality::Image],
4069        cost_input: 0.0,
4070        cost_output: 0.0,
4071        cost_cache_read: 0.01,
4072        cost_cache_write: 0.0,
4073        context_window: 1000000,
4074        max_tokens: 8192,
4075    },
4076    ModelEntry {
4077        id: "gemini-1.5-pro",
4078        name: "Gemini 1.5 Pro (Vertex)",
4079        api: Api::GoogleVertex,
4080        provider: "google-vertex",
4081        reasoning: false,
4082        input: &[InputModality::Text, InputModality::Image],
4083        cost_input: 0.0,
4084        cost_output: 0.0,
4085        cost_cache_read: 0.3125,
4086        cost_cache_write: 0.0,
4087        context_window: 1000000,
4088        max_tokens: 8192,
4089    },
4090    ModelEntry {
4091        id: "gemini-2.0-flash",
4092        name: "Gemini 2.0 Flash (Vertex)",
4093        api: Api::GoogleVertex,
4094        provider: "google-vertex",
4095        reasoning: false,
4096        input: &[InputModality::Text, InputModality::Image],
4097        cost_input: 0.0,
4098        cost_output: 0.0,
4099        cost_cache_read: 0.0375,
4100        cost_cache_write: 0.0,
4101        context_window: 1048576,
4102        max_tokens: 8192,
4103    },
4104    ModelEntry {
4105        id: "gemini-2.0-flash-lite",
4106        name: "Gemini 2.0 Flash Lite (Vertex)",
4107        api: Api::GoogleVertex,
4108        provider: "google-vertex",
4109        reasoning: true,
4110        input: &[InputModality::Text, InputModality::Image],
4111        cost_input: 0.0,
4112        cost_output: 0.0,
4113        cost_cache_read: 0.01875,
4114        cost_cache_write: 0.0,
4115        context_window: 1048576,
4116        max_tokens: 65536,
4117    },
4118    ModelEntry {
4119        id: "gemini-2.5-flash",
4120        name: "Gemini 2.5 Flash (Vertex)",
4121        api: Api::GoogleVertex,
4122        provider: "google-vertex",
4123        reasoning: true,
4124        input: &[InputModality::Text, InputModality::Image],
4125        cost_input: 0.0,
4126        cost_output: 0.0,
4127        cost_cache_read: 0.03,
4128        cost_cache_write: 0.0,
4129        context_window: 1048576,
4130        max_tokens: 65536,
4131    },
4132    ModelEntry {
4133        id: "gemini-2.5-flash-lite",
4134        name: "Gemini 2.5 Flash Lite (Vertex)",
4135        api: Api::GoogleVertex,
4136        provider: "google-vertex",
4137        reasoning: true,
4138        input: &[InputModality::Text, InputModality::Image],
4139        cost_input: 0.0,
4140        cost_output: 0.0,
4141        cost_cache_read: 0.01,
4142        cost_cache_write: 0.0,
4143        context_window: 1048576,
4144        max_tokens: 65536,
4145    },
4146    ModelEntry {
4147        id: "gemini-2.5-flash-lite-preview-09-2025",
4148        name: "Gemini 2.5 Flash Lite Preview 09-25 (Vertex)",
4149        api: Api::GoogleVertex,
4150        provider: "google-vertex",
4151        reasoning: true,
4152        input: &[InputModality::Text, InputModality::Image],
4153        cost_input: 0.0,
4154        cost_output: 0.0,
4155        cost_cache_read: 0.01,
4156        cost_cache_write: 0.0,
4157        context_window: 1048576,
4158        max_tokens: 65536,
4159    },
4160    ModelEntry {
4161        id: "gemini-2.5-pro",
4162        name: "Gemini 2.5 Pro (Vertex)",
4163        api: Api::GoogleVertex,
4164        provider: "google-vertex",
4165        reasoning: true,
4166        input: &[InputModality::Text, InputModality::Image],
4167        cost_input: 0.0,
4168        cost_output: 0.0,
4169        cost_cache_read: 0.125,
4170        cost_cache_write: 0.0,
4171        context_window: 1048576,
4172        max_tokens: 65536,
4173    },
4174    ModelEntry {
4175        id: "gemini-3-flash-preview",
4176        name: "Gemini 3 Flash Preview (Vertex)",
4177        api: Api::GoogleVertex,
4178        provider: "google-vertex",
4179        reasoning: true,
4180        input: &[InputModality::Text, InputModality::Image],
4181        cost_input: 0.0,
4182        cost_output: 0.0,
4183        cost_cache_read: 0.05,
4184        cost_cache_write: 0.0,
4185        context_window: 1048576,
4186        max_tokens: 65536,
4187    },
4188    ModelEntry {
4189        id: "gemini-3-pro-preview",
4190        name: "Gemini 3 Pro Preview (Vertex)",
4191        api: Api::GoogleVertex,
4192        provider: "google-vertex",
4193        reasoning: true,
4194        input: &[InputModality::Text, InputModality::Image],
4195        cost_input: 0.0,
4196        cost_output: 0.0,
4197        cost_cache_read: 0.2,
4198        cost_cache_write: 0.0,
4199        context_window: 1000000,
4200        max_tokens: 64000,
4201    },
4202    ModelEntry {
4203        id: "gemini-3.1-pro-preview",
4204        name: "Gemini 3.1 Pro Preview (Vertex)",
4205        api: Api::GoogleVertex,
4206        provider: "google-vertex",
4207        reasoning: true,
4208        input: &[InputModality::Text, InputModality::Image],
4209        cost_input: 0.0,
4210        cost_output: 0.0,
4211        cost_cache_read: 0.2,
4212        cost_cache_write: 0.0,
4213        context_window: 1048576,
4214        max_tokens: 65536,
4215    },
4216    ModelEntry {
4217        id: "gemini-3.1-pro-preview-customtools",
4218        name: "Gemini 3.1 Pro Preview Custom Tools (Vertex)",
4219        api: Api::GoogleVertex,
4220        provider: "google-vertex",
4221        reasoning: true,
4222        input: &[InputModality::Text, InputModality::Image],
4223        cost_input: 0.0,
4224        cost_output: 0.0,
4225        cost_cache_read: 0.2,
4226        cost_cache_write: 0.0,
4227        context_window: 1048576,
4228        max_tokens: 65536,
4229    },
4230];
4231
4232/// groq models (18 entries)
4233static GROQ_MODELS: &[ModelEntry] = &[
4234    ModelEntry {
4235        id: "deepseek-r1-distill-llama-70b",
4236        name: "DeepSeek R1 Distill Llama 70B",
4237        api: Api::OpenAiCompletions,
4238        provider: "groq",
4239        reasoning: true,
4240        input: &[InputModality::Text],
4241        cost_input: 0.0,
4242        cost_output: 0.0,
4243        cost_cache_read: 0.0,
4244        cost_cache_write: 0.0,
4245        context_window: 131072,
4246        max_tokens: 8192,
4247    },
4248    ModelEntry {
4249        id: "gemma2-9b-it",
4250        name: "Gemma 2 9B",
4251        api: Api::OpenAiCompletions,
4252        provider: "groq",
4253        reasoning: false,
4254        input: &[InputModality::Text],
4255        cost_input: 0.0,
4256        cost_output: 0.0,
4257        cost_cache_read: 0.0,
4258        cost_cache_write: 0.0,
4259        context_window: 8192,
4260        max_tokens: 8192,
4261    },
4262    ModelEntry {
4263        id: "groq/compound",
4264        name: "Compound",
4265        api: Api::OpenAiCompletions,
4266        provider: "groq",
4267        reasoning: true,
4268        input: &[InputModality::Text],
4269        cost_input: 0.0,
4270        cost_output: 0.0,
4271        cost_cache_read: 0.0,
4272        cost_cache_write: 0.0,
4273        context_window: 131072,
4274        max_tokens: 8192,
4275    },
4276    ModelEntry {
4277        id: "groq/compound-mini",
4278        name: "Compound Mini",
4279        api: Api::OpenAiCompletions,
4280        provider: "groq",
4281        reasoning: true,
4282        input: &[InputModality::Text],
4283        cost_input: 0.0,
4284        cost_output: 0.0,
4285        cost_cache_read: 0.0,
4286        cost_cache_write: 0.0,
4287        context_window: 131072,
4288        max_tokens: 8192,
4289    },
4290    ModelEntry {
4291        id: "llama-3.1-8b-instant",
4292        name: "Llama 3.1 8B Instant",
4293        api: Api::OpenAiCompletions,
4294        provider: "groq",
4295        reasoning: false,
4296        input: &[InputModality::Text],
4297        cost_input: 0.0,
4298        cost_output: 0.0,
4299        cost_cache_read: 0.0,
4300        cost_cache_write: 0.0,
4301        context_window: 131072,
4302        max_tokens: 131072,
4303    },
4304    ModelEntry {
4305        id: "llama-3.3-70b-versatile",
4306        name: "Llama 3.3 70B Versatile",
4307        api: Api::OpenAiCompletions,
4308        provider: "groq",
4309        reasoning: false,
4310        input: &[InputModality::Text],
4311        cost_input: 0.0,
4312        cost_output: 0.0,
4313        cost_cache_read: 0.0,
4314        cost_cache_write: 0.0,
4315        context_window: 131072,
4316        max_tokens: 32768,
4317    },
4318    ModelEntry {
4319        id: "llama3-70b-8192",
4320        name: "Llama 3 70B",
4321        api: Api::OpenAiCompletions,
4322        provider: "groq",
4323        reasoning: false,
4324        input: &[InputModality::Text],
4325        cost_input: 0.0,
4326        cost_output: 0.0,
4327        cost_cache_read: 0.0,
4328        cost_cache_write: 0.0,
4329        context_window: 8192,
4330        max_tokens: 8192,
4331    },
4332    ModelEntry {
4333        id: "llama3-8b-8192",
4334        name: "Llama 3 8B",
4335        api: Api::OpenAiCompletions,
4336        provider: "groq",
4337        reasoning: false,
4338        input: &[InputModality::Text],
4339        cost_input: 0.0,
4340        cost_output: 0.0,
4341        cost_cache_read: 0.0,
4342        cost_cache_write: 0.0,
4343        context_window: 8192,
4344        max_tokens: 8192,
4345    },
4346    ModelEntry {
4347        id: "meta-llama/llama-4-maverick-17b-128e-instruct",
4348        name: "Llama 4 Maverick 17B",
4349        api: Api::OpenAiCompletions,
4350        provider: "groq",
4351        reasoning: false,
4352        input: &[InputModality::Text, InputModality::Image],
4353        cost_input: 0.0,
4354        cost_output: 0.0,
4355        cost_cache_read: 0.0,
4356        cost_cache_write: 0.0,
4357        context_window: 131072,
4358        max_tokens: 8192,
4359    },
4360    ModelEntry {
4361        id: "meta-llama/llama-4-scout-17b-16e-instruct",
4362        name: "Llama 4 Scout 17B",
4363        api: Api::OpenAiCompletions,
4364        provider: "groq",
4365        reasoning: false,
4366        input: &[InputModality::Text, InputModality::Image],
4367        cost_input: 0.0,
4368        cost_output: 0.0,
4369        cost_cache_read: 0.0,
4370        cost_cache_write: 0.0,
4371        context_window: 131072,
4372        max_tokens: 8192,
4373    },
4374    ModelEntry {
4375        id: "mistral-saba-24b",
4376        name: "Mistral Saba 24B",
4377        api: Api::OpenAiCompletions,
4378        provider: "groq",
4379        reasoning: false,
4380        input: &[InputModality::Text],
4381        cost_input: 0.0,
4382        cost_output: 0.0,
4383        cost_cache_read: 0.0,
4384        cost_cache_write: 0.0,
4385        context_window: 32768,
4386        max_tokens: 32768,
4387    },
4388    ModelEntry {
4389        id: "moonshotai/kimi-k2-instruct",
4390        name: "Kimi K2 Instruct",
4391        api: Api::OpenAiCompletions,
4392        provider: "groq",
4393        reasoning: false,
4394        input: &[InputModality::Text],
4395        cost_input: 0.0,
4396        cost_output: 0.0,
4397        cost_cache_read: 0.0,
4398        cost_cache_write: 0.0,
4399        context_window: 131072,
4400        max_tokens: 16384,
4401    },
4402    ModelEntry {
4403        id: "moonshotai/kimi-k2-instruct-0905",
4404        name: "Kimi K2 Instruct 0905",
4405        api: Api::OpenAiCompletions,
4406        provider: "groq",
4407        reasoning: false,
4408        input: &[InputModality::Text],
4409        cost_input: 0.0,
4410        cost_output: 0.0,
4411        cost_cache_read: 0.0,
4412        cost_cache_write: 0.0,
4413        context_window: 262144,
4414        max_tokens: 16384,
4415    },
4416    ModelEntry {
4417        id: "openai/gpt-oss-120b",
4418        name: "GPT OSS 120B",
4419        api: Api::OpenAiCompletions,
4420        provider: "groq",
4421        reasoning: true,
4422        input: &[InputModality::Text],
4423        cost_input: 0.0,
4424        cost_output: 0.0,
4425        cost_cache_read: 0.0,
4426        cost_cache_write: 0.0,
4427        context_window: 131072,
4428        max_tokens: 65536,
4429    },
4430    ModelEntry {
4431        id: "openai/gpt-oss-20b",
4432        name: "GPT OSS 20B",
4433        api: Api::OpenAiCompletions,
4434        provider: "groq",
4435        reasoning: true,
4436        input: &[InputModality::Text],
4437        cost_input: 0.0,
4438        cost_output: 0.0,
4439        cost_cache_read: 0.0,
4440        cost_cache_write: 0.0,
4441        context_window: 131072,
4442        max_tokens: 65536,
4443    },
4444    ModelEntry {
4445        id: "openai/gpt-oss-safeguard-20b",
4446        name: "Safety GPT OSS 20B",
4447        api: Api::OpenAiCompletions,
4448        provider: "groq",
4449        reasoning: true,
4450        input: &[InputModality::Text],
4451        cost_input: 0.0,
4452        cost_output: 0.0,
4453        cost_cache_read: 0.037,
4454        cost_cache_write: 0.0,
4455        context_window: 131072,
4456        max_tokens: 65536,
4457    },
4458    ModelEntry {
4459        id: "qwen-qwq-32b",
4460        name: "Qwen QwQ 32B",
4461        api: Api::OpenAiCompletions,
4462        provider: "groq",
4463        reasoning: true,
4464        input: &[InputModality::Text],
4465        cost_input: 0.0,
4466        cost_output: 0.0,
4467        cost_cache_read: 0.0,
4468        cost_cache_write: 0.0,
4469        context_window: 131072,
4470        max_tokens: 16384,
4471    },
4472    ModelEntry {
4473        id: "qwen/qwen3-32b",
4474        name: "Qwen3 32B",
4475        api: Api::OpenAiCompletions,
4476        provider: "groq",
4477        reasoning: true,
4478        input: &[InputModality::Text],
4479        cost_input: 0.0,
4480        cost_output: 0.0,
4481        cost_cache_read: 0.0,
4482        cost_cache_write: 0.0,
4483        context_window: 131072,
4484        max_tokens: 40960,
4485    },
4486];
4487
4488/// huggingface models (22 entries)
4489static HUGGINGFACE_MODELS: &[ModelEntry] = &[
4490    ModelEntry {
4491        id: "MiniMaxAI/MiniMax-M2.1",
4492        name: "MiniMax-M2.1",
4493        api: Api::OpenAiCompletions,
4494        provider: "huggingface",
4495        reasoning: true,
4496        input: &[InputModality::Text],
4497        cost_input: 0.0,
4498        cost_output: 0.0,
4499        cost_cache_read: 0.0,
4500        cost_cache_write: 0.0,
4501        context_window: 204800,
4502        max_tokens: 131072,
4503    },
4504    ModelEntry {
4505        id: "MiniMaxAI/MiniMax-M2.5",
4506        name: "MiniMax-M2.5",
4507        api: Api::OpenAiCompletions,
4508        provider: "huggingface",
4509        reasoning: true,
4510        input: &[InputModality::Text],
4511        cost_input: 0.0,
4512        cost_output: 0.0,
4513        cost_cache_read: 0.03,
4514        cost_cache_write: 0.0,
4515        context_window: 204800,
4516        max_tokens: 131072,
4517    },
4518    ModelEntry {
4519        id: "MiniMaxAI/MiniMax-M2.7",
4520        name: "MiniMax-M2.7",
4521        api: Api::OpenAiCompletions,
4522        provider: "huggingface",
4523        reasoning: true,
4524        input: &[InputModality::Text],
4525        cost_input: 0.0,
4526        cost_output: 0.0,
4527        cost_cache_read: 0.06,
4528        cost_cache_write: 0.0,
4529        context_window: 204800,
4530        max_tokens: 131072,
4531    },
4532    ModelEntry {
4533        id: "Qwen/Qwen3-235B-A22B-Thinking-2507",
4534        name: "Qwen3-235B-A22B-Thinking-2507",
4535        api: Api::OpenAiCompletions,
4536        provider: "huggingface",
4537        reasoning: true,
4538        input: &[InputModality::Text],
4539        cost_input: 0.0,
4540        cost_output: 0.0,
4541        cost_cache_read: 0.0,
4542        cost_cache_write: 0.0,
4543        context_window: 262144,
4544        max_tokens: 131072,
4545    },
4546    ModelEntry {
4547        id: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
4548        name: "Qwen3-Coder-480B-A35B-Instruct",
4549        api: Api::OpenAiCompletions,
4550        provider: "huggingface",
4551        reasoning: false,
4552        input: &[InputModality::Text],
4553        cost_input: 0.0,
4554        cost_output: 0.0,
4555        cost_cache_read: 0.0,
4556        cost_cache_write: 0.0,
4557        context_window: 262144,
4558        max_tokens: 66536,
4559    },
4560    ModelEntry {
4561        id: "Qwen/Qwen3-Coder-Next",
4562        name: "Qwen3-Coder-Next",
4563        api: Api::OpenAiCompletions,
4564        provider: "huggingface",
4565        reasoning: false,
4566        input: &[InputModality::Text],
4567        cost_input: 0.0,
4568        cost_output: 0.0,
4569        cost_cache_read: 0.0,
4570        cost_cache_write: 0.0,
4571        context_window: 262144,
4572        max_tokens: 65536,
4573    },
4574    ModelEntry {
4575        id: "Qwen/Qwen3-Next-80B-A3B-Instruct",
4576        name: "Qwen3-Next-80B-A3B-Instruct",
4577        api: Api::OpenAiCompletions,
4578        provider: "huggingface",
4579        reasoning: false,
4580        input: &[InputModality::Text],
4581        cost_input: 0.0,
4582        cost_output: 0.0,
4583        cost_cache_read: 0.0,
4584        cost_cache_write: 0.0,
4585        context_window: 262144,
4586        max_tokens: 66536,
4587    },
4588    ModelEntry {
4589        id: "Qwen/Qwen3-Next-80B-A3B-Thinking",
4590        name: "Qwen3-Next-80B-A3B-Thinking",
4591        api: Api::OpenAiCompletions,
4592        provider: "huggingface",
4593        reasoning: false,
4594        input: &[InputModality::Text],
4595        cost_input: 0.0,
4596        cost_output: 0.0,
4597        cost_cache_read: 0.0,
4598        cost_cache_write: 0.0,
4599        context_window: 262144,
4600        max_tokens: 131072,
4601    },
4602    ModelEntry {
4603        id: "Qwen/Qwen3.5-397B-A17B",
4604        name: "Qwen3.5-397B-A17B",
4605        api: Api::OpenAiCompletions,
4606        provider: "huggingface",
4607        reasoning: true,
4608        input: &[InputModality::Text, InputModality::Image],
4609        cost_input: 0.0,
4610        cost_output: 0.0,
4611        cost_cache_read: 0.0,
4612        cost_cache_write: 0.0,
4613        context_window: 262144,
4614        max_tokens: 32768,
4615    },
4616    ModelEntry {
4617        id: "XiaomiMiMo/MiMo-V2-Flash",
4618        name: "MiMo-V2-Flash",
4619        api: Api::OpenAiCompletions,
4620        provider: "huggingface",
4621        reasoning: true,
4622        input: &[InputModality::Text],
4623        cost_input: 0.0,
4624        cost_output: 0.0,
4625        cost_cache_read: 0.0,
4626        cost_cache_write: 0.0,
4627        context_window: 262144,
4628        max_tokens: 4096,
4629    },
4630    ModelEntry {
4631        id: "deepseek-ai/DeepSeek-R1-0528",
4632        name: "DeepSeek-R1-0528",
4633        api: Api::OpenAiCompletions,
4634        provider: "huggingface",
4635        reasoning: true,
4636        input: &[InputModality::Text],
4637        cost_input: 0.0,
4638        cost_output: 0.0,
4639        cost_cache_read: 0.0,
4640        cost_cache_write: 0.0,
4641        context_window: 163840,
4642        max_tokens: 163840,
4643    },
4644    ModelEntry {
4645        id: "deepseek-ai/DeepSeek-V3.2",
4646        name: "DeepSeek-V3.2",
4647        api: Api::OpenAiCompletions,
4648        provider: "huggingface",
4649        reasoning: true,
4650        input: &[InputModality::Text],
4651        cost_input: 0.0,
4652        cost_output: 0.0,
4653        cost_cache_read: 0.0,
4654        cost_cache_write: 0.0,
4655        context_window: 163840,
4656        max_tokens: 65536,
4657    },
4658    ModelEntry {
4659        id: "deepseek-ai/DeepSeek-V4-Pro",
4660        name: "DeepSeek V4 Pro",
4661        api: Api::OpenAiCompletions,
4662        provider: "huggingface",
4663        reasoning: true,
4664        input: &[InputModality::Text],
4665        cost_input: 0.0,
4666        cost_output: 0.0,
4667        cost_cache_read: 0.145,
4668        cost_cache_write: 0.0,
4669        context_window: 1048576,
4670        max_tokens: 393216,
4671    },
4672    ModelEntry {
4673        id: "moonshotai/Kimi-K2-Instruct",
4674        name: "Kimi-K2-Instruct",
4675        api: Api::OpenAiCompletions,
4676        provider: "huggingface",
4677        reasoning: false,
4678        input: &[InputModality::Text],
4679        cost_input: 0.0,
4680        cost_output: 0.0,
4681        cost_cache_read: 0.0,
4682        cost_cache_write: 0.0,
4683        context_window: 131072,
4684        max_tokens: 16384,
4685    },
4686    ModelEntry {
4687        id: "moonshotai/Kimi-K2-Instruct-0905",
4688        name: "Kimi-K2-Instruct-0905",
4689        api: Api::OpenAiCompletions,
4690        provider: "huggingface",
4691        reasoning: false,
4692        input: &[InputModality::Text],
4693        cost_input: 0.0,
4694        cost_output: 0.0,
4695        cost_cache_read: 0.0,
4696        cost_cache_write: 0.0,
4697        context_window: 262144,
4698        max_tokens: 16384,
4699    },
4700    ModelEntry {
4701        id: "moonshotai/Kimi-K2-Thinking",
4702        name: "Kimi-K2-Thinking",
4703        api: Api::OpenAiCompletions,
4704        provider: "huggingface",
4705        reasoning: true,
4706        input: &[InputModality::Text],
4707        cost_input: 0.0,
4708        cost_output: 0.0,
4709        cost_cache_read: 0.15,
4710        cost_cache_write: 0.0,
4711        context_window: 262144,
4712        max_tokens: 262144,
4713    },
4714    ModelEntry {
4715        id: "moonshotai/Kimi-K2.5",
4716        name: "Kimi-K2.5",
4717        api: Api::OpenAiCompletions,
4718        provider: "huggingface",
4719        reasoning: true,
4720        input: &[InputModality::Text, InputModality::Image],
4721        cost_input: 0.0,
4722        cost_output: 0.0,
4723        cost_cache_read: 0.1,
4724        cost_cache_write: 0.0,
4725        context_window: 262144,
4726        max_tokens: 262144,
4727    },
4728    ModelEntry {
4729        id: "moonshotai/Kimi-K2.6",
4730        name: "Kimi-K2.6",
4731        api: Api::OpenAiCompletions,
4732        provider: "huggingface",
4733        reasoning: true,
4734        input: &[InputModality::Text, InputModality::Image],
4735        cost_input: 0.0,
4736        cost_output: 0.0,
4737        cost_cache_read: 0.16,
4738        cost_cache_write: 0.0,
4739        context_window: 262144,
4740        max_tokens: 262144,
4741    },
4742    ModelEntry {
4743        id: "zai-org/GLM-4.7",
4744        name: "GLM-4.7",
4745        api: Api::OpenAiCompletions,
4746        provider: "huggingface",
4747        reasoning: true,
4748        input: &[InputModality::Text],
4749        cost_input: 0.0,
4750        cost_output: 0.0,
4751        cost_cache_read: 0.11,
4752        cost_cache_write: 0.0,
4753        context_window: 204800,
4754        max_tokens: 131072,
4755    },
4756    ModelEntry {
4757        id: "zai-org/GLM-4.7-Flash",
4758        name: "GLM-4.7-Flash",
4759        api: Api::OpenAiCompletions,
4760        provider: "huggingface",
4761        reasoning: true,
4762        input: &[InputModality::Text],
4763        cost_input: 0.0,
4764        cost_output: 0.0,
4765        cost_cache_read: 0.0,
4766        cost_cache_write: 0.0,
4767        context_window: 200000,
4768        max_tokens: 128000,
4769    },
4770    ModelEntry {
4771        id: "zai-org/GLM-5",
4772        name: "GLM-5",
4773        api: Api::OpenAiCompletions,
4774        provider: "huggingface",
4775        reasoning: true,
4776        input: &[InputModality::Text],
4777        cost_input: 0.0,
4778        cost_output: 0.0,
4779        cost_cache_read: 0.2,
4780        cost_cache_write: 0.0,
4781        context_window: 202752,
4782        max_tokens: 131072,
4783    },
4784    ModelEntry {
4785        id: "zai-org/GLM-5.1",
4786        name: "GLM-5.1",
4787        api: Api::OpenAiCompletions,
4788        provider: "huggingface",
4789        reasoning: true,
4790        input: &[InputModality::Text],
4791        cost_input: 0.0,
4792        cost_output: 0.0,
4793        cost_cache_read: 0.2,
4794        cost_cache_write: 0.0,
4795        context_window: 202752,
4796        max_tokens: 131072,
4797    },
4798];
4799
4800/// kimi-coding models (3 entries)
4801static KIMI_CODING_MODELS: &[ModelEntry] = &[
4802    ModelEntry {
4803        id: "k2p6",
4804        name: "Kimi K2.6",
4805        api: Api::AnthropicMessages,
4806        provider: "kimi-coding",
4807        reasoning: true,
4808        input: &[InputModality::Text, InputModality::Image],
4809        cost_input: 0.0,
4810        cost_output: 0.0,
4811        cost_cache_read: 0.0,
4812        cost_cache_write: 0.0,
4813        context_window: 262144,
4814        max_tokens: 32768,
4815    },
4816    ModelEntry {
4817        id: "kimi-for-coding",
4818        name: "Kimi For Coding",
4819        api: Api::AnthropicMessages,
4820        provider: "kimi-coding",
4821        reasoning: true,
4822        input: &[InputModality::Text, InputModality::Image],
4823        cost_input: 0.0,
4824        cost_output: 0.0,
4825        cost_cache_read: 0.0,
4826        cost_cache_write: 0.0,
4827        context_window: 262144,
4828        max_tokens: 32768,
4829    },
4830    ModelEntry {
4831        id: "kimi-k2-thinking",
4832        name: "Kimi K2 Thinking",
4833        api: Api::AnthropicMessages,
4834        provider: "kimi-coding",
4835        reasoning: true,
4836        input: &[InputModality::Text],
4837        cost_input: 0.0,
4838        cost_output: 0.0,
4839        cost_cache_read: 0.0,
4840        cost_cache_write: 0.0,
4841        context_window: 262144,
4842        max_tokens: 32768,
4843    },
4844];
4845
4846/// minimax models (2 entries)
4847static MINIMAX_MODELS: &[ModelEntry] = &[
4848    ModelEntry {
4849        id: "MiniMax-M2.7",
4850        name: "MiniMax-M2.7",
4851        api: Api::AnthropicMessages,
4852        provider: "minimax",
4853        reasoning: true,
4854        input: &[InputModality::Text],
4855        cost_input: 0.0,
4856        cost_output: 0.0,
4857        cost_cache_read: 0.06,
4858        cost_cache_write: 0.375,
4859        context_window: 204800,
4860        max_tokens: 131072,
4861    },
4862    ModelEntry {
4863        id: "MiniMax-M2.7-highspeed",
4864        name: "MiniMax-M2.7-highspeed",
4865        api: Api::AnthropicMessages,
4866        provider: "minimax",
4867        reasoning: true,
4868        input: &[InputModality::Text],
4869        cost_input: 0.0,
4870        cost_output: 0.0,
4871        cost_cache_read: 0.06,
4872        cost_cache_write: 0.375,
4873        context_window: 204800,
4874        max_tokens: 131072,
4875    },
4876];
4877
4878/// minimax-cn models (2 entries)
4879static MINIMAX_CN_MODELS: &[ModelEntry] = &[
4880    ModelEntry {
4881        id: "MiniMax-M2.7",
4882        name: "MiniMax-M2.7",
4883        api: Api::AnthropicMessages,
4884        provider: "minimax-cn",
4885        reasoning: true,
4886        input: &[InputModality::Text],
4887        cost_input: 0.0,
4888        cost_output: 0.0,
4889        cost_cache_read: 0.06,
4890        cost_cache_write: 0.375,
4891        context_window: 204800,
4892        max_tokens: 131072,
4893    },
4894    ModelEntry {
4895        id: "MiniMax-M2.7-highspeed",
4896        name: "MiniMax-M2.7-highspeed",
4897        api: Api::AnthropicMessages,
4898        provider: "minimax-cn",
4899        reasoning: true,
4900        input: &[InputModality::Text],
4901        cost_input: 0.0,
4902        cost_output: 0.0,
4903        cost_cache_read: 0.06,
4904        cost_cache_write: 0.375,
4905        context_window: 204800,
4906        max_tokens: 131072,
4907    },
4908];
4909
4910/// mistral models (28 entries)
4911static MISTRAL_MODELS: &[ModelEntry] = &[
4912    ModelEntry {
4913        id: "codestral-latest",
4914        name: "Codestral (latest)",
4915        api: Api::MistralConversations,
4916        provider: "mistral",
4917        reasoning: false,
4918        input: &[InputModality::Text],
4919        cost_input: 0.0,
4920        cost_output: 0.0,
4921        cost_cache_read: 0.0,
4922        cost_cache_write: 0.0,
4923        context_window: 256000,
4924        max_tokens: 4096,
4925    },
4926    ModelEntry {
4927        id: "devstral-2512",
4928        name: "Devstral 2",
4929        api: Api::MistralConversations,
4930        provider: "mistral",
4931        reasoning: false,
4932        input: &[InputModality::Text],
4933        cost_input: 0.0,
4934        cost_output: 0.0,
4935        cost_cache_read: 0.0,
4936        cost_cache_write: 0.0,
4937        context_window: 262144,
4938        max_tokens: 262144,
4939    },
4940    ModelEntry {
4941        id: "devstral-medium-2507",
4942        name: "Devstral Medium",
4943        api: Api::MistralConversations,
4944        provider: "mistral",
4945        reasoning: false,
4946        input: &[InputModality::Text],
4947        cost_input: 0.0,
4948        cost_output: 0.0,
4949        cost_cache_read: 0.0,
4950        cost_cache_write: 0.0,
4951        context_window: 128000,
4952        max_tokens: 128000,
4953    },
4954    ModelEntry {
4955        id: "devstral-medium-latest",
4956        name: "Devstral 2 (latest)",
4957        api: Api::MistralConversations,
4958        provider: "mistral",
4959        reasoning: false,
4960        input: &[InputModality::Text],
4961        cost_input: 0.0,
4962        cost_output: 0.0,
4963        cost_cache_read: 0.0,
4964        cost_cache_write: 0.0,
4965        context_window: 262144,
4966        max_tokens: 262144,
4967    },
4968    ModelEntry {
4969        id: "devstral-small-2505",
4970        name: "Devstral Small 2505",
4971        api: Api::MistralConversations,
4972        provider: "mistral",
4973        reasoning: false,
4974        input: &[InputModality::Text],
4975        cost_input: 0.0,
4976        cost_output: 0.0,
4977        cost_cache_read: 0.0,
4978        cost_cache_write: 0.0,
4979        context_window: 128000,
4980        max_tokens: 128000,
4981    },
4982    ModelEntry {
4983        id: "devstral-small-2507",
4984        name: "Devstral Small",
4985        api: Api::MistralConversations,
4986        provider: "mistral",
4987        reasoning: false,
4988        input: &[InputModality::Text],
4989        cost_input: 0.0,
4990        cost_output: 0.0,
4991        cost_cache_read: 0.0,
4992        cost_cache_write: 0.0,
4993        context_window: 128000,
4994        max_tokens: 128000,
4995    },
4996    ModelEntry {
4997        id: "labs-devstral-small-2512",
4998        name: "Devstral Small 2",
4999        api: Api::MistralConversations,
5000        provider: "mistral",
5001        reasoning: false,
5002        input: &[InputModality::Text, InputModality::Image],
5003        cost_input: 0.0,
5004        cost_output: 0.0,
5005        cost_cache_read: 0.0,
5006        cost_cache_write: 0.0,
5007        context_window: 256000,
5008        max_tokens: 256000,
5009    },
5010    ModelEntry {
5011        id: "magistral-medium-latest",
5012        name: "Magistral Medium (latest)",
5013        api: Api::MistralConversations,
5014        provider: "mistral",
5015        reasoning: true,
5016        input: &[InputModality::Text],
5017        cost_input: 0.0,
5018        cost_output: 0.0,
5019        cost_cache_read: 0.0,
5020        cost_cache_write: 0.0,
5021        context_window: 128000,
5022        max_tokens: 16384,
5023    },
5024    ModelEntry {
5025        id: "magistral-small",
5026        name: "Magistral Small",
5027        api: Api::MistralConversations,
5028        provider: "mistral",
5029        reasoning: true,
5030        input: &[InputModality::Text],
5031        cost_input: 0.0,
5032        cost_output: 0.0,
5033        cost_cache_read: 0.0,
5034        cost_cache_write: 0.0,
5035        context_window: 128000,
5036        max_tokens: 128000,
5037    },
5038    ModelEntry {
5039        id: "ministral-3b-latest",
5040        name: "Ministral 3B (latest)",
5041        api: Api::MistralConversations,
5042        provider: "mistral",
5043        reasoning: false,
5044        input: &[InputModality::Text],
5045        cost_input: 0.0,
5046        cost_output: 0.0,
5047        cost_cache_read: 0.0,
5048        cost_cache_write: 0.0,
5049        context_window: 128000,
5050        max_tokens: 128000,
5051    },
5052    ModelEntry {
5053        id: "ministral-8b-latest",
5054        name: "Ministral 8B (latest)",
5055        api: Api::MistralConversations,
5056        provider: "mistral",
5057        reasoning: false,
5058        input: &[InputModality::Text],
5059        cost_input: 0.0,
5060        cost_output: 0.0,
5061        cost_cache_read: 0.0,
5062        cost_cache_write: 0.0,
5063        context_window: 128000,
5064        max_tokens: 128000,
5065    },
5066    ModelEntry {
5067        id: "mistral-large-2411",
5068        name: "Mistral Large 2.1",
5069        api: Api::MistralConversations,
5070        provider: "mistral",
5071        reasoning: false,
5072        input: &[InputModality::Text],
5073        cost_input: 0.0,
5074        cost_output: 0.0,
5075        cost_cache_read: 0.0,
5076        cost_cache_write: 0.0,
5077        context_window: 131072,
5078        max_tokens: 16384,
5079    },
5080    ModelEntry {
5081        id: "mistral-large-2512",
5082        name: "Mistral Large 3",
5083        api: Api::MistralConversations,
5084        provider: "mistral",
5085        reasoning: false,
5086        input: &[InputModality::Text, InputModality::Image],
5087        cost_input: 0.0,
5088        cost_output: 0.0,
5089        cost_cache_read: 0.0,
5090        cost_cache_write: 0.0,
5091        context_window: 262144,
5092        max_tokens: 262144,
5093    },
5094    ModelEntry {
5095        id: "mistral-large-latest",
5096        name: "Mistral Large (latest)",
5097        api: Api::MistralConversations,
5098        provider: "mistral",
5099        reasoning: false,
5100        input: &[InputModality::Text, InputModality::Image],
5101        cost_input: 0.0,
5102        cost_output: 0.0,
5103        cost_cache_read: 0.0,
5104        cost_cache_write: 0.0,
5105        context_window: 262144,
5106        max_tokens: 262144,
5107    },
5108    ModelEntry {
5109        id: "mistral-medium-2505",
5110        name: "Mistral Medium 3",
5111        api: Api::MistralConversations,
5112        provider: "mistral",
5113        reasoning: false,
5114        input: &[InputModality::Text, InputModality::Image],
5115        cost_input: 0.0,
5116        cost_output: 0.0,
5117        cost_cache_read: 0.0,
5118        cost_cache_write: 0.0,
5119        context_window: 131072,
5120        max_tokens: 131072,
5121    },
5122    ModelEntry {
5123        id: "mistral-medium-2508",
5124        name: "Mistral Medium 3.1",
5125        api: Api::MistralConversations,
5126        provider: "mistral",
5127        reasoning: false,
5128        input: &[InputModality::Text, InputModality::Image],
5129        cost_input: 0.0,
5130        cost_output: 0.0,
5131        cost_cache_read: 0.0,
5132        cost_cache_write: 0.0,
5133        context_window: 262144,
5134        max_tokens: 262144,
5135    },
5136    ModelEntry {
5137        id: "mistral-medium-2604",
5138        name: "Mistral Medium 3.5",
5139        api: Api::MistralConversations,
5140        provider: "mistral",
5141        reasoning: true,
5142        input: &[InputModality::Text, InputModality::Image],
5143        cost_input: 0.0,
5144        cost_output: 0.0,
5145        cost_cache_read: 0.0,
5146        cost_cache_write: 0.0,
5147        context_window: 262144,
5148        max_tokens: 262144,
5149    },
5150    ModelEntry {
5151        id: "mistral-medium-3.5",
5152        name: "Mistral Medium 3.5",
5153        api: Api::MistralConversations,
5154        provider: "mistral",
5155        reasoning: true,
5156        input: &[InputModality::Text, InputModality::Image],
5157        cost_input: 0.0,
5158        cost_output: 0.0,
5159        cost_cache_read: 0.0,
5160        cost_cache_write: 0.0,
5161        context_window: 262144,
5162        max_tokens: 262144,
5163    },
5164    ModelEntry {
5165        id: "mistral-medium-latest",
5166        name: "Mistral Medium (latest)",
5167        api: Api::MistralConversations,
5168        provider: "mistral",
5169        reasoning: true,
5170        input: &[InputModality::Text, InputModality::Image],
5171        cost_input: 0.0,
5172        cost_output: 0.0,
5173        cost_cache_read: 0.0,
5174        cost_cache_write: 0.0,
5175        context_window: 262144,
5176        max_tokens: 262144,
5177    },
5178    ModelEntry {
5179        id: "mistral-nemo",
5180        name: "Mistral Nemo",
5181        api: Api::MistralConversations,
5182        provider: "mistral",
5183        reasoning: false,
5184        input: &[InputModality::Text],
5185        cost_input: 0.0,
5186        cost_output: 0.0,
5187        cost_cache_read: 0.0,
5188        cost_cache_write: 0.0,
5189        context_window: 128000,
5190        max_tokens: 128000,
5191    },
5192    ModelEntry {
5193        id: "mistral-small-2506",
5194        name: "Mistral Small 3.2",
5195        api: Api::MistralConversations,
5196        provider: "mistral",
5197        reasoning: false,
5198        input: &[InputModality::Text, InputModality::Image],
5199        cost_input: 0.0,
5200        cost_output: 0.0,
5201        cost_cache_read: 0.0,
5202        cost_cache_write: 0.0,
5203        context_window: 128000,
5204        max_tokens: 16384,
5205    },
5206    ModelEntry {
5207        id: "mistral-small-2603",
5208        name: "Mistral Small 4",
5209        api: Api::MistralConversations,
5210        provider: "mistral",
5211        reasoning: true,
5212        input: &[InputModality::Text, InputModality::Image],
5213        cost_input: 0.0,
5214        cost_output: 0.0,
5215        cost_cache_read: 0.0,
5216        cost_cache_write: 0.0,
5217        context_window: 256000,
5218        max_tokens: 256000,
5219    },
5220    ModelEntry {
5221        id: "mistral-small-latest",
5222        name: "Mistral Small (latest)",
5223        api: Api::MistralConversations,
5224        provider: "mistral",
5225        reasoning: true,
5226        input: &[InputModality::Text, InputModality::Image],
5227        cost_input: 0.0,
5228        cost_output: 0.0,
5229        cost_cache_read: 0.0,
5230        cost_cache_write: 0.0,
5231        context_window: 256000,
5232        max_tokens: 256000,
5233    },
5234    ModelEntry {
5235        id: "open-mistral-7b",
5236        name: "Mistral 7B",
5237        api: Api::MistralConversations,
5238        provider: "mistral",
5239        reasoning: false,
5240        input: &[InputModality::Text],
5241        cost_input: 0.0,
5242        cost_output: 0.0,
5243        cost_cache_read: 0.0,
5244        cost_cache_write: 0.0,
5245        context_window: 8000,
5246        max_tokens: 8000,
5247    },
5248    ModelEntry {
5249        id: "open-mixtral-8x22b",
5250        name: "Mixtral 8x22B",
5251        api: Api::MistralConversations,
5252        provider: "mistral",
5253        reasoning: false,
5254        input: &[InputModality::Text],
5255        cost_input: 0.0,
5256        cost_output: 0.0,
5257        cost_cache_read: 0.0,
5258        cost_cache_write: 0.0,
5259        context_window: 64000,
5260        max_tokens: 64000,
5261    },
5262    ModelEntry {
5263        id: "open-mixtral-8x7b",
5264        name: "Mixtral 8x7B",
5265        api: Api::MistralConversations,
5266        provider: "mistral",
5267        reasoning: false,
5268        input: &[InputModality::Text],
5269        cost_input: 0.0,
5270        cost_output: 0.0,
5271        cost_cache_read: 0.0,
5272        cost_cache_write: 0.0,
5273        context_window: 32000,
5274        max_tokens: 32000,
5275    },
5276    ModelEntry {
5277        id: "pixtral-12b",
5278        name: "Pixtral 12B",
5279        api: Api::MistralConversations,
5280        provider: "mistral",
5281        reasoning: false,
5282        input: &[InputModality::Text, InputModality::Image],
5283        cost_input: 0.0,
5284        cost_output: 0.0,
5285        cost_cache_read: 0.0,
5286        cost_cache_write: 0.0,
5287        context_window: 128000,
5288        max_tokens: 128000,
5289    },
5290    ModelEntry {
5291        id: "pixtral-large-latest",
5292        name: "Pixtral Large (latest)",
5293        api: Api::MistralConversations,
5294        provider: "mistral",
5295        reasoning: false,
5296        input: &[InputModality::Text, InputModality::Image],
5297        cost_input: 0.0,
5298        cost_output: 0.0,
5299        cost_cache_read: 0.0,
5300        cost_cache_write: 0.0,
5301        context_window: 128000,
5302        max_tokens: 128000,
5303    },
5304];
5305
5306/// moonshotai models (7 entries)
5307static MOONSHOTAI_MODELS: &[ModelEntry] = &[
5308    ModelEntry {
5309        id: "kimi-k2-0711-preview",
5310        name: "Kimi K2 0711",
5311        api: Api::OpenAiCompletions,
5312        provider: "moonshotai",
5313        reasoning: false,
5314        input: &[InputModality::Text],
5315        cost_input: 0.0,
5316        cost_output: 0.0,
5317        cost_cache_read: 0.15,
5318        cost_cache_write: 0.0,
5319        context_window: 131072,
5320        max_tokens: 16384,
5321    },
5322    ModelEntry {
5323        id: "kimi-k2-0905-preview",
5324        name: "Kimi K2 0905",
5325        api: Api::OpenAiCompletions,
5326        provider: "moonshotai",
5327        reasoning: false,
5328        input: &[InputModality::Text],
5329        cost_input: 0.0,
5330        cost_output: 0.0,
5331        cost_cache_read: 0.15,
5332        cost_cache_write: 0.0,
5333        context_window: 262144,
5334        max_tokens: 262144,
5335    },
5336    ModelEntry {
5337        id: "kimi-k2-thinking",
5338        name: "Kimi K2 Thinking",
5339        api: Api::OpenAiCompletions,
5340        provider: "moonshotai",
5341        reasoning: true,
5342        input: &[InputModality::Text],
5343        cost_input: 0.0,
5344        cost_output: 0.0,
5345        cost_cache_read: 0.15,
5346        cost_cache_write: 0.0,
5347        context_window: 262144,
5348        max_tokens: 262144,
5349    },
5350    ModelEntry {
5351        id: "kimi-k2-thinking-turbo",
5352        name: "Kimi K2 Thinking Turbo",
5353        api: Api::OpenAiCompletions,
5354        provider: "moonshotai",
5355        reasoning: true,
5356        input: &[InputModality::Text],
5357        cost_input: 0.0,
5358        cost_output: 0.0,
5359        cost_cache_read: 0.15,
5360        cost_cache_write: 0.0,
5361        context_window: 262144,
5362        max_tokens: 262144,
5363    },
5364    ModelEntry {
5365        id: "kimi-k2-turbo-preview",
5366        name: "Kimi K2 Turbo",
5367        api: Api::OpenAiCompletions,
5368        provider: "moonshotai",
5369        reasoning: false,
5370        input: &[InputModality::Text],
5371        cost_input: 0.0,
5372        cost_output: 0.0,
5373        cost_cache_read: 0.6,
5374        cost_cache_write: 0.0,
5375        context_window: 262144,
5376        max_tokens: 262144,
5377    },
5378    ModelEntry {
5379        id: "kimi-k2.5",
5380        name: "Kimi K2.5",
5381        api: Api::OpenAiCompletions,
5382        provider: "moonshotai",
5383        reasoning: true,
5384        input: &[InputModality::Text, InputModality::Image],
5385        cost_input: 0.0,
5386        cost_output: 0.0,
5387        cost_cache_read: 0.1,
5388        cost_cache_write: 0.0,
5389        context_window: 262144,
5390        max_tokens: 262144,
5391    },
5392    ModelEntry {
5393        id: "kimi-k2.6",
5394        name: "Kimi K2.6",
5395        api: Api::OpenAiCompletions,
5396        provider: "moonshotai",
5397        reasoning: true,
5398        input: &[InputModality::Text, InputModality::Image],
5399        cost_input: 0.0,
5400        cost_output: 0.0,
5401        cost_cache_read: 0.16,
5402        cost_cache_write: 0.0,
5403        context_window: 262144,
5404        max_tokens: 262144,
5405    },
5406];
5407
5408/// moonshotai-cn models (7 entries)
5409static MOONSHOTAI_CN_MODELS: &[ModelEntry] = &[
5410    ModelEntry {
5411        id: "kimi-k2-0711-preview",
5412        name: "Kimi K2 0711",
5413        api: Api::OpenAiCompletions,
5414        provider: "moonshotai-cn",
5415        reasoning: false,
5416        input: &[InputModality::Text],
5417        cost_input: 0.0,
5418        cost_output: 0.0,
5419        cost_cache_read: 0.15,
5420        cost_cache_write: 0.0,
5421        context_window: 131072,
5422        max_tokens: 16384,
5423    },
5424    ModelEntry {
5425        id: "kimi-k2-0905-preview",
5426        name: "Kimi K2 0905",
5427        api: Api::OpenAiCompletions,
5428        provider: "moonshotai-cn",
5429        reasoning: false,
5430        input: &[InputModality::Text],
5431        cost_input: 0.0,
5432        cost_output: 0.0,
5433        cost_cache_read: 0.15,
5434        cost_cache_write: 0.0,
5435        context_window: 262144,
5436        max_tokens: 262144,
5437    },
5438    ModelEntry {
5439        id: "kimi-k2-thinking",
5440        name: "Kimi K2 Thinking",
5441        api: Api::OpenAiCompletions,
5442        provider: "moonshotai-cn",
5443        reasoning: true,
5444        input: &[InputModality::Text],
5445        cost_input: 0.0,
5446        cost_output: 0.0,
5447        cost_cache_read: 0.15,
5448        cost_cache_write: 0.0,
5449        context_window: 262144,
5450        max_tokens: 262144,
5451    },
5452    ModelEntry {
5453        id: "kimi-k2-thinking-turbo",
5454        name: "Kimi K2 Thinking Turbo",
5455        api: Api::OpenAiCompletions,
5456        provider: "moonshotai-cn",
5457        reasoning: true,
5458        input: &[InputModality::Text],
5459        cost_input: 0.0,
5460        cost_output: 0.0,
5461        cost_cache_read: 0.15,
5462        cost_cache_write: 0.0,
5463        context_window: 262144,
5464        max_tokens: 262144,
5465    },
5466    ModelEntry {
5467        id: "kimi-k2-turbo-preview",
5468        name: "Kimi K2 Turbo",
5469        api: Api::OpenAiCompletions,
5470        provider: "moonshotai-cn",
5471        reasoning: false,
5472        input: &[InputModality::Text],
5473        cost_input: 0.0,
5474        cost_output: 0.0,
5475        cost_cache_read: 0.6,
5476        cost_cache_write: 0.0,
5477        context_window: 262144,
5478        max_tokens: 262144,
5479    },
5480    ModelEntry {
5481        id: "kimi-k2.5",
5482        name: "Kimi K2.5",
5483        api: Api::OpenAiCompletions,
5484        provider: "moonshotai-cn",
5485        reasoning: true,
5486        input: &[InputModality::Text, InputModality::Image],
5487        cost_input: 0.0,
5488        cost_output: 0.0,
5489        cost_cache_read: 0.1,
5490        cost_cache_write: 0.0,
5491        context_window: 262144,
5492        max_tokens: 262144,
5493    },
5494    ModelEntry {
5495        id: "kimi-k2.6",
5496        name: "Kimi K2.6",
5497        api: Api::OpenAiCompletions,
5498        provider: "moonshotai-cn",
5499        reasoning: true,
5500        input: &[InputModality::Text, InputModality::Image],
5501        cost_input: 0.0,
5502        cost_output: 0.0,
5503        cost_cache_read: 0.16,
5504        cost_cache_write: 0.0,
5505        context_window: 262144,
5506        max_tokens: 262144,
5507    },
5508];
5509
5510/// openai models (42 entries)
5511static OPENAI_MODELS: &[ModelEntry] = &[
5512    ModelEntry {
5513        id: "gpt-4",
5514        name: "GPT-4",
5515        api: Api::OpenAiResponses,
5516        provider: "openai",
5517        reasoning: false,
5518        input: &[InputModality::Text],
5519        cost_input: 0.0,
5520        cost_output: 0.0,
5521        cost_cache_read: 0.0,
5522        cost_cache_write: 0.0,
5523        context_window: 8192,
5524        max_tokens: 8192,
5525    },
5526    ModelEntry {
5527        id: "gpt-4-turbo",
5528        name: "GPT-4 Turbo",
5529        api: Api::OpenAiResponses,
5530        provider: "openai",
5531        reasoning: false,
5532        input: &[InputModality::Text, InputModality::Image],
5533        cost_input: 0.0,
5534        cost_output: 0.0,
5535        cost_cache_read: 0.0,
5536        cost_cache_write: 0.0,
5537        context_window: 128000,
5538        max_tokens: 4096,
5539    },
5540    ModelEntry {
5541        id: "gpt-4.1",
5542        name: "GPT-4.1",
5543        api: Api::OpenAiResponses,
5544        provider: "openai",
5545        reasoning: false,
5546        input: &[InputModality::Text, InputModality::Image],
5547        cost_input: 0.0,
5548        cost_output: 0.0,
5549        cost_cache_read: 0.5,
5550        cost_cache_write: 0.0,
5551        context_window: 1047576,
5552        max_tokens: 32768,
5553    },
5554    ModelEntry {
5555        id: "gpt-4.1-mini",
5556        name: "GPT-4.1 mini",
5557        api: Api::OpenAiResponses,
5558        provider: "openai",
5559        reasoning: false,
5560        input: &[InputModality::Text, InputModality::Image],
5561        cost_input: 0.0,
5562        cost_output: 0.0,
5563        cost_cache_read: 0.1,
5564        cost_cache_write: 0.0,
5565        context_window: 1047576,
5566        max_tokens: 32768,
5567    },
5568    ModelEntry {
5569        id: "gpt-4.1-nano",
5570        name: "GPT-4.1 nano",
5571        api: Api::OpenAiResponses,
5572        provider: "openai",
5573        reasoning: false,
5574        input: &[InputModality::Text, InputModality::Image],
5575        cost_input: 0.0,
5576        cost_output: 0.0,
5577        cost_cache_read: 0.03,
5578        cost_cache_write: 0.0,
5579        context_window: 1047576,
5580        max_tokens: 32768,
5581    },
5582    ModelEntry {
5583        id: "gpt-4o",
5584        name: "GPT-4o",
5585        api: Api::OpenAiResponses,
5586        provider: "openai",
5587        reasoning: false,
5588        input: &[InputModality::Text, InputModality::Image],
5589        cost_input: 0.0,
5590        cost_output: 0.0,
5591        cost_cache_read: 1.25,
5592        cost_cache_write: 0.0,
5593        context_window: 128000,
5594        max_tokens: 16384,
5595    },
5596    ModelEntry {
5597        id: "gpt-4o-2024-05-13",
5598        name: "GPT-4o (2024-05-13)",
5599        api: Api::OpenAiResponses,
5600        provider: "openai",
5601        reasoning: false,
5602        input: &[InputModality::Text, InputModality::Image],
5603        cost_input: 0.0,
5604        cost_output: 0.0,
5605        cost_cache_read: 0.0,
5606        cost_cache_write: 0.0,
5607        context_window: 128000,
5608        max_tokens: 4096,
5609    },
5610    ModelEntry {
5611        id: "gpt-4o-2024-08-06",
5612        name: "GPT-4o (2024-08-06)",
5613        api: Api::OpenAiResponses,
5614        provider: "openai",
5615        reasoning: false,
5616        input: &[InputModality::Text, InputModality::Image],
5617        cost_input: 0.0,
5618        cost_output: 0.0,
5619        cost_cache_read: 1.25,
5620        cost_cache_write: 0.0,
5621        context_window: 128000,
5622        max_tokens: 16384,
5623    },
5624    ModelEntry {
5625        id: "gpt-4o-2024-11-20",
5626        name: "GPT-4o (2024-11-20)",
5627        api: Api::OpenAiResponses,
5628        provider: "openai",
5629        reasoning: false,
5630        input: &[InputModality::Text, InputModality::Image],
5631        cost_input: 0.0,
5632        cost_output: 0.0,
5633        cost_cache_read: 1.25,
5634        cost_cache_write: 0.0,
5635        context_window: 128000,
5636        max_tokens: 16384,
5637    },
5638    ModelEntry {
5639        id: "gpt-4o-mini",
5640        name: "GPT-4o mini",
5641        api: Api::OpenAiResponses,
5642        provider: "openai",
5643        reasoning: false,
5644        input: &[InputModality::Text, InputModality::Image],
5645        cost_input: 0.0,
5646        cost_output: 0.0,
5647        cost_cache_read: 0.08,
5648        cost_cache_write: 0.0,
5649        context_window: 128000,
5650        max_tokens: 16384,
5651    },
5652    ModelEntry {
5653        id: "gpt-5",
5654        name: "GPT-5",
5655        api: Api::OpenAiResponses,
5656        provider: "openai",
5657        reasoning: true,
5658        input: &[InputModality::Text, InputModality::Image],
5659        cost_input: 0.0,
5660        cost_output: 0.0,
5661        cost_cache_read: 0.125,
5662        cost_cache_write: 0.0,
5663        context_window: 400000,
5664        max_tokens: 128000,
5665    },
5666    ModelEntry {
5667        id: "gpt-5-chat-latest",
5668        name: "GPT-5 Chat Latest",
5669        api: Api::OpenAiResponses,
5670        provider: "openai",
5671        reasoning: false,
5672        input: &[InputModality::Text, InputModality::Image],
5673        cost_input: 0.0,
5674        cost_output: 0.0,
5675        cost_cache_read: 0.125,
5676        cost_cache_write: 0.0,
5677        context_window: 128000,
5678        max_tokens: 16384,
5679    },
5680    ModelEntry {
5681        id: "gpt-5-codex",
5682        name: "GPT-5-Codex",
5683        api: Api::OpenAiResponses,
5684        provider: "openai",
5685        reasoning: true,
5686        input: &[InputModality::Text, InputModality::Image],
5687        cost_input: 0.0,
5688        cost_output: 0.0,
5689        cost_cache_read: 0.125,
5690        cost_cache_write: 0.0,
5691        context_window: 400000,
5692        max_tokens: 128000,
5693    },
5694    ModelEntry {
5695        id: "gpt-5-mini",
5696        name: "GPT-5 Mini",
5697        api: Api::OpenAiResponses,
5698        provider: "openai",
5699        reasoning: true,
5700        input: &[InputModality::Text, InputModality::Image],
5701        cost_input: 0.0,
5702        cost_output: 0.0,
5703        cost_cache_read: 0.025,
5704        cost_cache_write: 0.0,
5705        context_window: 400000,
5706        max_tokens: 128000,
5707    },
5708    ModelEntry {
5709        id: "gpt-5-nano",
5710        name: "GPT-5 Nano",
5711        api: Api::OpenAiResponses,
5712        provider: "openai",
5713        reasoning: true,
5714        input: &[InputModality::Text, InputModality::Image],
5715        cost_input: 0.0,
5716        cost_output: 0.0,
5717        cost_cache_read: 0.005,
5718        cost_cache_write: 0.0,
5719        context_window: 400000,
5720        max_tokens: 128000,
5721    },
5722    ModelEntry {
5723        id: "gpt-5-pro",
5724        name: "GPT-5 Pro",
5725        api: Api::OpenAiResponses,
5726        provider: "openai",
5727        reasoning: true,
5728        input: &[InputModality::Text, InputModality::Image],
5729        cost_input: 0.0,
5730        cost_output: 0.0,
5731        cost_cache_read: 0.0,
5732        cost_cache_write: 0.0,
5733        context_window: 400000,
5734        max_tokens: 272000,
5735    },
5736    ModelEntry {
5737        id: "gpt-5.1",
5738        name: "GPT-5.1",
5739        api: Api::OpenAiResponses,
5740        provider: "openai",
5741        reasoning: true,
5742        input: &[InputModality::Text, InputModality::Image],
5743        cost_input: 0.0,
5744        cost_output: 0.0,
5745        cost_cache_read: 0.13,
5746        cost_cache_write: 0.0,
5747        context_window: 400000,
5748        max_tokens: 128000,
5749    },
5750    ModelEntry {
5751        id: "gpt-5.1-chat-latest",
5752        name: "GPT-5.1 Chat",
5753        api: Api::OpenAiResponses,
5754        provider: "openai",
5755        reasoning: true,
5756        input: &[InputModality::Text, InputModality::Image],
5757        cost_input: 0.0,
5758        cost_output: 0.0,
5759        cost_cache_read: 0.125,
5760        cost_cache_write: 0.0,
5761        context_window: 128000,
5762        max_tokens: 16384,
5763    },
5764    ModelEntry {
5765        id: "gpt-5.1-codex",
5766        name: "GPT-5.1 Codex",
5767        api: Api::OpenAiResponses,
5768        provider: "openai",
5769        reasoning: true,
5770        input: &[InputModality::Text, InputModality::Image],
5771        cost_input: 0.0,
5772        cost_output: 0.0,
5773        cost_cache_read: 0.125,
5774        cost_cache_write: 0.0,
5775        context_window: 400000,
5776        max_tokens: 128000,
5777    },
5778    ModelEntry {
5779        id: "gpt-5.1-codex-max",
5780        name: "GPT-5.1 Codex Max",
5781        api: Api::OpenAiResponses,
5782        provider: "openai",
5783        reasoning: true,
5784        input: &[InputModality::Text, InputModality::Image],
5785        cost_input: 0.0,
5786        cost_output: 0.0,
5787        cost_cache_read: 0.125,
5788        cost_cache_write: 0.0,
5789        context_window: 400000,
5790        max_tokens: 128000,
5791    },
5792    ModelEntry {
5793        id: "gpt-5.1-codex-mini",
5794        name: "GPT-5.1 Codex mini",
5795        api: Api::OpenAiResponses,
5796        provider: "openai",
5797        reasoning: true,
5798        input: &[InputModality::Text, InputModality::Image],
5799        cost_input: 0.0,
5800        cost_output: 0.0,
5801        cost_cache_read: 0.025,
5802        cost_cache_write: 0.0,
5803        context_window: 400000,
5804        max_tokens: 128000,
5805    },
5806    ModelEntry {
5807        id: "gpt-5.2",
5808        name: "GPT-5.2",
5809        api: Api::OpenAiResponses,
5810        provider: "openai",
5811        reasoning: true,
5812        input: &[InputModality::Text, InputModality::Image],
5813        cost_input: 0.0,
5814        cost_output: 0.0,
5815        cost_cache_read: 0.175,
5816        cost_cache_write: 0.0,
5817        context_window: 400000,
5818        max_tokens: 128000,
5819    },
5820    ModelEntry {
5821        id: "gpt-5.2-chat-latest",
5822        name: "GPT-5.2 Chat",
5823        api: Api::OpenAiResponses,
5824        provider: "openai",
5825        reasoning: true,
5826        input: &[InputModality::Text, InputModality::Image],
5827        cost_input: 0.0,
5828        cost_output: 0.0,
5829        cost_cache_read: 0.175,
5830        cost_cache_write: 0.0,
5831        context_window: 128000,
5832        max_tokens: 16384,
5833    },
5834    ModelEntry {
5835        id: "gpt-5.2-codex",
5836        name: "GPT-5.2 Codex",
5837        api: Api::OpenAiResponses,
5838        provider: "openai",
5839        reasoning: true,
5840        input: &[InputModality::Text, InputModality::Image],
5841        cost_input: 0.0,
5842        cost_output: 0.0,
5843        cost_cache_read: 0.175,
5844        cost_cache_write: 0.0,
5845        context_window: 400000,
5846        max_tokens: 128000,
5847    },
5848    ModelEntry {
5849        id: "gpt-5.2-pro",
5850        name: "GPT-5.2 Pro",
5851        api: Api::OpenAiResponses,
5852        provider: "openai",
5853        reasoning: true,
5854        input: &[InputModality::Text, InputModality::Image],
5855        cost_input: 0.0,
5856        cost_output: 0.0,
5857        cost_cache_read: 0.0,
5858        cost_cache_write: 0.0,
5859        context_window: 400000,
5860        max_tokens: 128000,
5861    },
5862    ModelEntry {
5863        id: "gpt-5.3-chat-latest",
5864        name: "GPT-5.3 Chat (latest)",
5865        api: Api::OpenAiResponses,
5866        provider: "openai",
5867        reasoning: false,
5868        input: &[InputModality::Text, InputModality::Image],
5869        cost_input: 0.0,
5870        cost_output: 0.0,
5871        cost_cache_read: 0.175,
5872        cost_cache_write: 0.0,
5873        context_window: 128000,
5874        max_tokens: 16384,
5875    },
5876    ModelEntry {
5877        id: "gpt-5.3-codex",
5878        name: "GPT-5.3 Codex",
5879        api: Api::OpenAiResponses,
5880        provider: "openai",
5881        reasoning: true,
5882        input: &[InputModality::Text, InputModality::Image],
5883        cost_input: 0.0,
5884        cost_output: 0.0,
5885        cost_cache_read: 0.175,
5886        cost_cache_write: 0.0,
5887        context_window: 400000,
5888        max_tokens: 128000,
5889    },
5890    ModelEntry {
5891        id: "gpt-5.3-codex-spark",
5892        name: "GPT-5.3 Codex Spark",
5893        api: Api::OpenAiResponses,
5894        provider: "openai",
5895        reasoning: true,
5896        input: &[InputModality::Text, InputModality::Image],
5897        cost_input: 0.0,
5898        cost_output: 0.0,
5899        cost_cache_read: 0.175,
5900        cost_cache_write: 0.0,
5901        context_window: 128000,
5902        max_tokens: 32000,
5903    },
5904    ModelEntry {
5905        id: "gpt-5.4",
5906        name: "GPT-5.4",
5907        api: Api::OpenAiResponses,
5908        provider: "openai",
5909        reasoning: true,
5910        input: &[InputModality::Text, InputModality::Image],
5911        cost_input: 0.0,
5912        cost_output: 0.0,
5913        cost_cache_read: 0.25,
5914        cost_cache_write: 0.0,
5915        context_window: 272000,
5916        max_tokens: 128000,
5917    },
5918    ModelEntry {
5919        id: "gpt-5.4-mini",
5920        name: "GPT-5.4 mini",
5921        api: Api::OpenAiResponses,
5922        provider: "openai",
5923        reasoning: true,
5924        input: &[InputModality::Text, InputModality::Image],
5925        cost_input: 0.0,
5926        cost_output: 0.0,
5927        cost_cache_read: 0.075,
5928        cost_cache_write: 0.0,
5929        context_window: 400000,
5930        max_tokens: 128000,
5931    },
5932    ModelEntry {
5933        id: "gpt-5.4-nano",
5934        name: "GPT-5.4 nano",
5935        api: Api::OpenAiResponses,
5936        provider: "openai",
5937        reasoning: true,
5938        input: &[InputModality::Text, InputModality::Image],
5939        cost_input: 0.0,
5940        cost_output: 0.0,
5941        cost_cache_read: 0.02,
5942        cost_cache_write: 0.0,
5943        context_window: 400000,
5944        max_tokens: 128000,
5945    },
5946    ModelEntry {
5947        id: "gpt-5.4-pro",
5948        name: "GPT-5.4 Pro",
5949        api: Api::OpenAiResponses,
5950        provider: "openai",
5951        reasoning: true,
5952        input: &[InputModality::Text, InputModality::Image],
5953        cost_input: 0.0,
5954        cost_output: 0.0,
5955        cost_cache_read: 0.0,
5956        cost_cache_write: 0.0,
5957        context_window: 1050000,
5958        max_tokens: 128000,
5959    },
5960    ModelEntry {
5961        id: "gpt-5.5",
5962        name: "GPT-5.5",
5963        api: Api::OpenAiResponses,
5964        provider: "openai",
5965        reasoning: true,
5966        input: &[InputModality::Text, InputModality::Image],
5967        cost_input: 0.0,
5968        cost_output: 0.0,
5969        cost_cache_read: 0.5,
5970        cost_cache_write: 0.0,
5971        context_window: 272000,
5972        max_tokens: 128000,
5973    },
5974    ModelEntry {
5975        id: "gpt-5.5-pro",
5976        name: "GPT-5.5 Pro",
5977        api: Api::OpenAiResponses,
5978        provider: "openai",
5979        reasoning: true,
5980        input: &[InputModality::Text, InputModality::Image],
5981        cost_input: 0.0,
5982        cost_output: 0.0,
5983        cost_cache_read: 0.0,
5984        cost_cache_write: 0.0,
5985        context_window: 1050000,
5986        max_tokens: 128000,
5987    },
5988    ModelEntry {
5989        id: "o1",
5990        name: "o1",
5991        api: Api::OpenAiResponses,
5992        provider: "openai",
5993        reasoning: true,
5994        input: &[InputModality::Text, InputModality::Image],
5995        cost_input: 0.0,
5996        cost_output: 0.0,
5997        cost_cache_read: 7.5,
5998        cost_cache_write: 0.0,
5999        context_window: 200000,
6000        max_tokens: 100000,
6001    },
6002    ModelEntry {
6003        id: "o1-pro",
6004        name: "o1-pro",
6005        api: Api::OpenAiResponses,
6006        provider: "openai",
6007        reasoning: true,
6008        input: &[InputModality::Text, InputModality::Image],
6009        cost_input: 0.0,
6010        cost_output: 0.0,
6011        cost_cache_read: 0.0,
6012        cost_cache_write: 0.0,
6013        context_window: 200000,
6014        max_tokens: 100000,
6015    },
6016    ModelEntry {
6017        id: "o3",
6018        name: "o3",
6019        api: Api::OpenAiResponses,
6020        provider: "openai",
6021        reasoning: true,
6022        input: &[InputModality::Text, InputModality::Image],
6023        cost_input: 0.0,
6024        cost_output: 0.0,
6025        cost_cache_read: 0.5,
6026        cost_cache_write: 0.0,
6027        context_window: 200000,
6028        max_tokens: 100000,
6029    },
6030    ModelEntry {
6031        id: "o3-deep-research",
6032        name: "o3-deep-research",
6033        api: Api::OpenAiResponses,
6034        provider: "openai",
6035        reasoning: true,
6036        input: &[InputModality::Text, InputModality::Image],
6037        cost_input: 0.0,
6038        cost_output: 0.0,
6039        cost_cache_read: 2.5,
6040        cost_cache_write: 0.0,
6041        context_window: 200000,
6042        max_tokens: 100000,
6043    },
6044    ModelEntry {
6045        id: "o3-mini",
6046        name: "o3-mini",
6047        api: Api::OpenAiResponses,
6048        provider: "openai",
6049        reasoning: true,
6050        input: &[InputModality::Text],
6051        cost_input: 0.0,
6052        cost_output: 0.0,
6053        cost_cache_read: 0.55,
6054        cost_cache_write: 0.0,
6055        context_window: 200000,
6056        max_tokens: 100000,
6057    },
6058    ModelEntry {
6059        id: "o3-pro",
6060        name: "o3-pro",
6061        api: Api::OpenAiResponses,
6062        provider: "openai",
6063        reasoning: true,
6064        input: &[InputModality::Text, InputModality::Image],
6065        cost_input: 0.0,
6066        cost_output: 0.0,
6067        cost_cache_read: 0.0,
6068        cost_cache_write: 0.0,
6069        context_window: 200000,
6070        max_tokens: 100000,
6071    },
6072    ModelEntry {
6073        id: "o4-mini",
6074        name: "o4-mini",
6075        api: Api::OpenAiResponses,
6076        provider: "openai",
6077        reasoning: true,
6078        input: &[InputModality::Text, InputModality::Image],
6079        cost_input: 0.0,
6080        cost_output: 0.0,
6081        cost_cache_read: 0.28,
6082        cost_cache_write: 0.0,
6083        context_window: 200000,
6084        max_tokens: 100000,
6085    },
6086    ModelEntry {
6087        id: "o4-mini-deep-research",
6088        name: "o4-mini-deep-research",
6089        api: Api::OpenAiResponses,
6090        provider: "openai",
6091        reasoning: true,
6092        input: &[InputModality::Text, InputModality::Image],
6093        cost_input: 0.0,
6094        cost_output: 0.0,
6095        cost_cache_read: 0.5,
6096        cost_cache_write: 0.0,
6097        context_window: 200000,
6098        max_tokens: 100000,
6099    },
6100];
6101
6102/// openai-codex models (10 entries)
6103static OPENAI_CODEX_MODELS: &[ModelEntry] = &[
6104    ModelEntry {
6105        id: "gpt-5.1",
6106        name: "GPT-5.1",
6107        api: Api::OpenAiCompletions,
6108        provider: "openai-codex",
6109        reasoning: true,
6110        input: &[InputModality::Text, InputModality::Image],
6111        cost_input: 0.0,
6112        cost_output: 0.0,
6113        cost_cache_read: 0.125,
6114        cost_cache_write: 0.0,
6115        context_window: 272000,
6116        max_tokens: 128000,
6117    },
6118    ModelEntry {
6119        id: "gpt-5.1-codex-max",
6120        name: "GPT-5.1 Codex Max",
6121        api: Api::OpenAiCompletions,
6122        provider: "openai-codex",
6123        reasoning: true,
6124        input: &[InputModality::Text, InputModality::Image],
6125        cost_input: 0.0,
6126        cost_output: 0.0,
6127        cost_cache_read: 0.125,
6128        cost_cache_write: 0.0,
6129        context_window: 272000,
6130        max_tokens: 128000,
6131    },
6132    ModelEntry {
6133        id: "gpt-5.1-codex-mini",
6134        name: "GPT-5.1 Codex Mini",
6135        api: Api::OpenAiCompletions,
6136        provider: "openai-codex",
6137        reasoning: true,
6138        input: &[InputModality::Text, InputModality::Image],
6139        cost_input: 0.0,
6140        cost_output: 0.0,
6141        cost_cache_read: 0.025,
6142        cost_cache_write: 0.0,
6143        context_window: 272000,
6144        max_tokens: 128000,
6145    },
6146    ModelEntry {
6147        id: "gpt-5.2",
6148        name: "GPT-5.2",
6149        api: Api::OpenAiCompletions,
6150        provider: "openai-codex",
6151        reasoning: true,
6152        input: &[InputModality::Text, InputModality::Image],
6153        cost_input: 0.0,
6154        cost_output: 0.0,
6155        cost_cache_read: 0.175,
6156        cost_cache_write: 0.0,
6157        context_window: 272000,
6158        max_tokens: 128000,
6159    },
6160    ModelEntry {
6161        id: "gpt-5.2-codex",
6162        name: "GPT-5.2 Codex",
6163        api: Api::OpenAiCompletions,
6164        provider: "openai-codex",
6165        reasoning: true,
6166        input: &[InputModality::Text, InputModality::Image],
6167        cost_input: 0.0,
6168        cost_output: 0.0,
6169        cost_cache_read: 0.175,
6170        cost_cache_write: 0.0,
6171        context_window: 272000,
6172        max_tokens: 128000,
6173    },
6174    ModelEntry {
6175        id: "gpt-5.3-codex",
6176        name: "GPT-5.3 Codex",
6177        api: Api::OpenAiCompletions,
6178        provider: "openai-codex",
6179        reasoning: true,
6180        input: &[InputModality::Text, InputModality::Image],
6181        cost_input: 0.0,
6182        cost_output: 0.0,
6183        cost_cache_read: 0.175,
6184        cost_cache_write: 0.0,
6185        context_window: 272000,
6186        max_tokens: 128000,
6187    },
6188    ModelEntry {
6189        id: "gpt-5.3-codex-spark",
6190        name: "GPT-5.3 Codex Spark",
6191        api: Api::OpenAiCompletions,
6192        provider: "openai-codex",
6193        reasoning: true,
6194        input: &[InputModality::Text],
6195        cost_input: 0.0,
6196        cost_output: 0.0,
6197        cost_cache_read: 0.0,
6198        cost_cache_write: 0.0,
6199        context_window: 128000,
6200        max_tokens: 128000,
6201    },
6202    ModelEntry {
6203        id: "gpt-5.4",
6204        name: "GPT-5.4",
6205        api: Api::OpenAiCompletions,
6206        provider: "openai-codex",
6207        reasoning: true,
6208        input: &[InputModality::Text, InputModality::Image],
6209        cost_input: 0.0,
6210        cost_output: 0.0,
6211        cost_cache_read: 0.25,
6212        cost_cache_write: 0.0,
6213        context_window: 272000,
6214        max_tokens: 128000,
6215    },
6216    ModelEntry {
6217        id: "gpt-5.4-mini",
6218        name: "GPT-5.4 Mini",
6219        api: Api::OpenAiCompletions,
6220        provider: "openai-codex",
6221        reasoning: true,
6222        input: &[InputModality::Text, InputModality::Image],
6223        cost_input: 0.0,
6224        cost_output: 0.0,
6225        cost_cache_read: 0.075,
6226        cost_cache_write: 0.0,
6227        context_window: 272000,
6228        max_tokens: 128000,
6229    },
6230    ModelEntry {
6231        id: "gpt-5.5",
6232        name: "GPT-5.5",
6233        api: Api::OpenAiCompletions,
6234        provider: "openai-codex",
6235        reasoning: true,
6236        input: &[InputModality::Text, InputModality::Image],
6237        cost_input: 0.0,
6238        cost_output: 0.0,
6239        cost_cache_read: 0.5,
6240        cost_cache_write: 0.0,
6241        context_window: 272000,
6242        max_tokens: 128000,
6243    },
6244];
6245
6246/// opencode models (35 entries)
6247static OPENCODE_MODELS: &[ModelEntry] = &[
6248    ModelEntry {
6249        id: "big-pickle",
6250        name: "Big Pickle",
6251        api: Api::AnthropicMessages,
6252        provider: "opencode",
6253        reasoning: true,
6254        input: &[InputModality::Text],
6255        cost_input: 0.0,
6256        cost_output: 0.0,
6257        cost_cache_read: 0.0,
6258        cost_cache_write: 0.0,
6259        context_window: 200000,
6260        max_tokens: 128000,
6261    },
6262    ModelEntry {
6263        id: "claude-haiku-4-5",
6264        name: "Claude Haiku 4.5",
6265        api: Api::AnthropicMessages,
6266        provider: "opencode",
6267        reasoning: true,
6268        input: &[InputModality::Text, InputModality::Image],
6269        cost_input: 0.0,
6270        cost_output: 0.0,
6271        cost_cache_read: 0.1,
6272        cost_cache_write: 1.25,
6273        context_window: 200000,
6274        max_tokens: 64000,
6275    },
6276    ModelEntry {
6277        id: "claude-opus-4-1",
6278        name: "Claude Opus 4.1",
6279        api: Api::AnthropicMessages,
6280        provider: "opencode",
6281        reasoning: true,
6282        input: &[InputModality::Text, InputModality::Image],
6283        cost_input: 0.0,
6284        cost_output: 0.0,
6285        cost_cache_read: 1.5,
6286        cost_cache_write: 18.75,
6287        context_window: 200000,
6288        max_tokens: 32000,
6289    },
6290    ModelEntry {
6291        id: "claude-opus-4-5",
6292        name: "Claude Opus 4.5",
6293        api: Api::AnthropicMessages,
6294        provider: "opencode",
6295        reasoning: true,
6296        input: &[InputModality::Text, InputModality::Image],
6297        cost_input: 0.0,
6298        cost_output: 0.0,
6299        cost_cache_read: 0.5,
6300        cost_cache_write: 6.25,
6301        context_window: 200000,
6302        max_tokens: 64000,
6303    },
6304    ModelEntry {
6305        id: "claude-opus-4-7",
6306        name: "Claude Opus 4.7",
6307        api: Api::AnthropicMessages,
6308        provider: "opencode",
6309        reasoning: true,
6310        input: &[InputModality::Text, InputModality::Image],
6311        cost_input: 0.0,
6312        cost_output: 0.0,
6313        cost_cache_read: 0.5,
6314        cost_cache_write: 6.25,
6315        context_window: 1000000,
6316        max_tokens: 128000,
6317    },
6318    ModelEntry {
6319        id: "claude-sonnet-4",
6320        name: "Claude Sonnet 4",
6321        api: Api::AnthropicMessages,
6322        provider: "opencode",
6323        reasoning: true,
6324        input: &[InputModality::Text, InputModality::Image],
6325        cost_input: 0.0,
6326        cost_output: 0.0,
6327        cost_cache_read: 0.3,
6328        cost_cache_write: 3.75,
6329        context_window: 200000,
6330        max_tokens: 64000,
6331    },
6332    ModelEntry {
6333        id: "claude-sonnet-4-5",
6334        name: "Claude Sonnet 4.5",
6335        api: Api::AnthropicMessages,
6336        provider: "opencode",
6337        reasoning: true,
6338        input: &[InputModality::Text, InputModality::Image],
6339        cost_input: 0.0,
6340        cost_output: 0.0,
6341        cost_cache_read: 0.3,
6342        cost_cache_write: 3.75,
6343        context_window: 200000,
6344        max_tokens: 64000,
6345    },
6346    ModelEntry {
6347        id: "claude-sonnet-4-6",
6348        name: "Claude Sonnet 4.6",
6349        api: Api::AnthropicMessages,
6350        provider: "opencode",
6351        reasoning: true,
6352        input: &[InputModality::Text, InputModality::Image],
6353        cost_input: 0.0,
6354        cost_output: 0.0,
6355        cost_cache_read: 0.3,
6356        cost_cache_write: 3.75,
6357        context_window: 1000000,
6358        max_tokens: 64000,
6359    },
6360    ModelEntry {
6361        id: "gemini-3.1-pro",
6362        name: "Gemini 3.1 Pro Preview",
6363        api: Api::GoogleGenerativeAi,
6364        provider: "opencode",
6365        reasoning: true,
6366        input: &[InputModality::Text, InputModality::Image],
6367        cost_input: 0.0,
6368        cost_output: 0.0,
6369        cost_cache_read: 0.2,
6370        cost_cache_write: 0.0,
6371        context_window: 1048576,
6372        max_tokens: 65536,
6373    },
6374    ModelEntry {
6375        id: "glm-5",
6376        name: "GLM-5",
6377        api: Api::OpenAiCompletions,
6378        provider: "opencode",
6379        reasoning: true,
6380        input: &[InputModality::Text],
6381        cost_input: 0.0,
6382        cost_output: 0.0,
6383        cost_cache_read: 0.2,
6384        cost_cache_write: 0.0,
6385        context_window: 204800,
6386        max_tokens: 131072,
6387    },
6388    ModelEntry {
6389        id: "glm-5.1",
6390        name: "GLM-5.1",
6391        api: Api::OpenAiCompletions,
6392        provider: "opencode",
6393        reasoning: true,
6394        input: &[InputModality::Text],
6395        cost_input: 0.0,
6396        cost_output: 0.0,
6397        cost_cache_read: 0.26,
6398        cost_cache_write: 0.0,
6399        context_window: 204800,
6400        max_tokens: 131072,
6401    },
6402    ModelEntry {
6403        id: "gpt-5",
6404        name: "GPT-5",
6405        api: Api::OpenAiResponses,
6406        provider: "opencode",
6407        reasoning: true,
6408        input: &[InputModality::Text, InputModality::Image],
6409        cost_input: 0.0,
6410        cost_output: 0.0,
6411        cost_cache_read: 0.107,
6412        cost_cache_write: 0.0,
6413        context_window: 400000,
6414        max_tokens: 128000,
6415    },
6416    ModelEntry {
6417        id: "gpt-5-nano",
6418        name: "GPT-5 Nano",
6419        api: Api::OpenAiResponses,
6420        provider: "opencode",
6421        reasoning: true,
6422        input: &[InputModality::Text, InputModality::Image],
6423        cost_input: 0.0,
6424        cost_output: 0.0,
6425        cost_cache_read: 0.0,
6426        cost_cache_write: 0.0,
6427        context_window: 400000,
6428        max_tokens: 128000,
6429    },
6430    ModelEntry {
6431        id: "gpt-5.1",
6432        name: "GPT-5.1",
6433        api: Api::OpenAiResponses,
6434        provider: "opencode",
6435        reasoning: true,
6436        input: &[InputModality::Text, InputModality::Image],
6437        cost_input: 0.0,
6438        cost_output: 0.0,
6439        cost_cache_read: 0.107,
6440        cost_cache_write: 0.0,
6441        context_window: 400000,
6442        max_tokens: 128000,
6443    },
6444    ModelEntry {
6445        id: "gpt-5.1-codex",
6446        name: "GPT-5.1 Codex",
6447        api: Api::OpenAiResponses,
6448        provider: "opencode",
6449        reasoning: true,
6450        input: &[InputModality::Text, InputModality::Image],
6451        cost_input: 0.0,
6452        cost_output: 0.0,
6453        cost_cache_read: 0.107,
6454        cost_cache_write: 0.0,
6455        context_window: 400000,
6456        max_tokens: 128000,
6457    },
6458    ModelEntry {
6459        id: "gpt-5.1-codex-mini",
6460        name: "GPT-5.1 Codex Mini",
6461        api: Api::OpenAiResponses,
6462        provider: "opencode",
6463        reasoning: true,
6464        input: &[InputModality::Text, InputModality::Image],
6465        cost_input: 0.0,
6466        cost_output: 0.0,
6467        cost_cache_read: 0.025,
6468        cost_cache_write: 0.0,
6469        context_window: 400000,
6470        max_tokens: 128000,
6471    },
6472    ModelEntry {
6473        id: "gpt-5.2",
6474        name: "GPT-5.2",
6475        api: Api::OpenAiResponses,
6476        provider: "opencode",
6477        reasoning: true,
6478        input: &[InputModality::Text, InputModality::Image],
6479        cost_input: 0.0,
6480        cost_output: 0.0,
6481        cost_cache_read: 0.175,
6482        cost_cache_write: 0.0,
6483        context_window: 400000,
6484        max_tokens: 128000,
6485    },
6486    ModelEntry {
6487        id: "gpt-5.2-codex",
6488        name: "GPT-5.2 Codex",
6489        api: Api::OpenAiResponses,
6490        provider: "opencode",
6491        reasoning: true,
6492        input: &[InputModality::Text, InputModality::Image],
6493        cost_input: 0.0,
6494        cost_output: 0.0,
6495        cost_cache_read: 0.175,
6496        cost_cache_write: 0.0,
6497        context_window: 400000,
6498        max_tokens: 128000,
6499    },
6500    ModelEntry {
6501        id: "gpt-5.3-codex",
6502        name: "GPT-5.3 Codex",
6503        api: Api::OpenAiResponses,
6504        provider: "opencode",
6505        reasoning: true,
6506        input: &[InputModality::Text, InputModality::Image],
6507        cost_input: 0.0,
6508        cost_output: 0.0,
6509        cost_cache_read: 0.175,
6510        cost_cache_write: 0.0,
6511        context_window: 400000,
6512        max_tokens: 128000,
6513    },
6514    ModelEntry {
6515        id: "gpt-5.4-mini",
6516        name: "GPT-5.4 Mini",
6517        api: Api::OpenAiResponses,
6518        provider: "opencode",
6519        reasoning: true,
6520        input: &[InputModality::Text, InputModality::Image],
6521        cost_input: 0.0,
6522        cost_output: 0.0,
6523        cost_cache_read: 0.075,
6524        cost_cache_write: 0.0,
6525        context_window: 400000,
6526        max_tokens: 128000,
6527    },
6528    ModelEntry {
6529        id: "gpt-5.4-nano",
6530        name: "GPT-5.4 Nano",
6531        api: Api::OpenAiResponses,
6532        provider: "opencode",
6533        reasoning: true,
6534        input: &[InputModality::Text, InputModality::Image],
6535        cost_input: 0.0,
6536        cost_output: 0.0,
6537        cost_cache_read: 0.02,
6538        cost_cache_write: 0.0,
6539        context_window: 400000,
6540        max_tokens: 128000,
6541    },
6542    ModelEntry {
6543        id: "gpt-5.4-pro",
6544        name: "GPT-5.4 Pro",
6545        api: Api::OpenAiResponses,
6546        provider: "opencode",
6547        reasoning: true,
6548        input: &[InputModality::Text, InputModality::Image],
6549        cost_input: 0.0,
6550        cost_output: 0.0,
6551        cost_cache_read: 30.0,
6552        cost_cache_write: 0.0,
6553        context_window: 1050000,
6554        max_tokens: 128000,
6555    },
6556    ModelEntry {
6557        id: "gpt-5.5",
6558        name: "GPT-5.5",
6559        api: Api::OpenAiResponses,
6560        provider: "opencode",
6561        reasoning: true,
6562        input: &[InputModality::Text, InputModality::Image],
6563        cost_input: 0.0,
6564        cost_output: 0.0,
6565        cost_cache_read: 0.5,
6566        cost_cache_write: 0.0,
6567        context_window: 1050000,
6568        max_tokens: 128000,
6569    },
6570    ModelEntry {
6571        id: "hy3-preview-free",
6572        name: "Hy3 preview Free",
6573        api: Api::OpenAiCompletions,
6574        provider: "opencode",
6575        reasoning: true,
6576        input: &[InputModality::Text],
6577        cost_input: 0.0,
6578        cost_output: 0.0,
6579        cost_cache_read: 0.0,
6580        cost_cache_write: 0.0,
6581        context_window: 256000,
6582        max_tokens: 64000,
6583    },
6584    ModelEntry {
6585        id: "kimi-k2.5",
6586        name: "Kimi K2.5",
6587        api: Api::OpenAiCompletions,
6588        provider: "opencode",
6589        reasoning: true,
6590        input: &[InputModality::Text, InputModality::Image],
6591        cost_input: 0.0,
6592        cost_output: 0.0,
6593        cost_cache_read: 0.08,
6594        cost_cache_write: 0.0,
6595        context_window: 262144,
6596        max_tokens: 65536,
6597    },
6598    ModelEntry {
6599        id: "kimi-k2.6",
6600        name: "Kimi K2.6",
6601        api: Api::OpenAiCompletions,
6602        provider: "opencode",
6603        reasoning: true,
6604        input: &[InputModality::Text, InputModality::Image],
6605        cost_input: 0.0,
6606        cost_output: 0.0,
6607        cost_cache_read: 0.16,
6608        cost_cache_write: 0.0,
6609        context_window: 262144,
6610        max_tokens: 65536,
6611    },
6612    ModelEntry {
6613        id: "minimax-m2.5",
6614        name: "MiniMax M2.5",
6615        api: Api::OpenAiCompletions,
6616        provider: "opencode",
6617        reasoning: true,
6618        input: &[InputModality::Text],
6619        cost_input: 0.0,
6620        cost_output: 0.0,
6621        cost_cache_read: 0.06,
6622        cost_cache_write: 0.0,
6623        context_window: 204800,
6624        max_tokens: 131072,
6625    },
6626    ModelEntry {
6627        id: "minimax-m2.7",
6628        name: "MiniMax M2.7",
6629        api: Api::OpenAiCompletions,
6630        provider: "opencode",
6631        reasoning: true,
6632        input: &[InputModality::Text],
6633        cost_input: 0.0,
6634        cost_output: 0.0,
6635        cost_cache_read: 0.06,
6636        cost_cache_write: 0.0,
6637        context_window: 204800,
6638        max_tokens: 131072,
6639    },
6640    ModelEntry {
6641        id: "nemotron-3-super-free",
6642        name: "Nemotron 3 Super Free",
6643        api: Api::OpenAiCompletions,
6644        provider: "opencode",
6645        reasoning: true,
6646        input: &[InputModality::Text],
6647        cost_input: 0.0,
6648        cost_output: 0.0,
6649        cost_cache_read: 0.0,
6650        cost_cache_write: 0.0,
6651        context_window: 204800,
6652        max_tokens: 128000,
6653    },
6654    ModelEntry {
6655        id: "qwen3.5-plus",
6656        name: "Qwen3.5 Plus",
6657        api: Api::AnthropicMessages,
6658        provider: "opencode",
6659        reasoning: true,
6660        input: &[InputModality::Text, InputModality::Image],
6661        cost_input: 0.0,
6662        cost_output: 0.0,
6663        cost_cache_read: 0.02,
6664        cost_cache_write: 0.25,
6665        context_window: 262144,
6666        max_tokens: 65536,
6667    },
6668    ModelEntry {
6669        id: "deepseek-v4-flash-free",
6670        name: "DeepSeek V4 Flash Free",
6671        api: Api::OpenAiCompletions,
6672        provider: "opencode",
6673        reasoning: true,
6674        input: &[InputModality::Text],
6675        cost_input: 0.0,
6676        cost_output: 0.0,
6677        cost_cache_read: 0.0,
6678        cost_cache_write: 0.0,
6679        context_window: 200000,
6680        max_tokens: 128000,
6681    },
6682    ModelEntry {
6683        id: "gemini-3-flash",
6684        name: "Gemini 3 Flash",
6685        api: Api::GoogleGenerativeAi,
6686        provider: "opencode",
6687        reasoning: true,
6688        input: &[InputModality::Text, InputModality::Image],
6689        cost_input: 0.5,
6690        cost_output: 3.0,
6691        cost_cache_read: 0.05,
6692        cost_cache_write: 0.0,
6693        context_window: 1048576,
6694        max_tokens: 65536,
6695    },
6696    ModelEntry {
6697        id: "gemini-3.5-flash",
6698        name: "Gemini 3.5 Flash",
6699        api: Api::GoogleGenerativeAi,
6700        provider: "opencode",
6701        reasoning: true,
6702        input: &[InputModality::Text, InputModality::Image],
6703        cost_input: 1.5,
6704        cost_output: 9.0,
6705        cost_cache_read: 0.15,
6706        cost_cache_write: 0.0,
6707        context_window: 1048576,
6708        max_tokens: 65536,
6709    },
6710    ModelEntry {
6711        id: "grok-build-0.1",
6712        name: "Grok Build 0.1",
6713        api: Api::OpenAiCompletions,
6714        provider: "opencode",
6715        reasoning: true,
6716        input: &[InputModality::Text, InputModality::Image],
6717        cost_input: 1.0,
6718        cost_output: 2.0,
6719        cost_cache_read: 0.2,
6720        cost_cache_write: 0.0,
6721        context_window: 256000,
6722        max_tokens: 256000,
6723    },
6724    ModelEntry {
6725        id: "mimo-v2.5-free",
6726        name: "MiMo V2.5 Free",
6727        api: Api::OpenAiCompletions,
6728        provider: "opencode",
6729        reasoning: true,
6730        input: &[InputModality::Text, InputModality::Image],
6731        cost_input: 0.0,
6732        cost_output: 0.0,
6733        cost_cache_read: 0.0,
6734        cost_cache_write: 0.0,
6735        context_window: 1000000,
6736        max_tokens: 128000,
6737    },
6738];
6739
6740/// opencode-go models (15 entries)
6741static OPENCODE_GO_MODELS: &[ModelEntry] = &[
6742    ModelEntry {
6743        id: "deepseek-v4-flash",
6744        name: "DeepSeek V4 Flash",
6745        api: Api::OpenAiCompletions,
6746        provider: "opencode-go",
6747        reasoning: true,
6748        input: &[InputModality::Text],
6749        cost_input: 0.0,
6750        cost_output: 0.0,
6751        cost_cache_read: 0.0028,
6752        cost_cache_write: 0.0,
6753        context_window: 1000000,
6754        max_tokens: 384000,
6755    },
6756    ModelEntry {
6757        id: "deepseek-v4-pro",
6758        name: "DeepSeek V4 Pro",
6759        api: Api::OpenAiCompletions,
6760        provider: "opencode-go",
6761        reasoning: true,
6762        input: &[InputModality::Text],
6763        cost_input: 0.0,
6764        cost_output: 0.0,
6765        cost_cache_read: 0.0145,
6766        cost_cache_write: 0.0,
6767        context_window: 1000000,
6768        max_tokens: 384000,
6769    },
6770    ModelEntry {
6771        id: "glm-5",
6772        name: "GLM-5",
6773        api: Api::OpenAiCompletions,
6774        provider: "opencode-go",
6775        reasoning: true,
6776        input: &[InputModality::Text],
6777        cost_input: 0.0,
6778        cost_output: 0.0,
6779        cost_cache_read: 0.2,
6780        cost_cache_write: 0.0,
6781        context_window: 202752,
6782        max_tokens: 32768,
6783    },
6784    ModelEntry {
6785        id: "glm-5.1",
6786        name: "GLM-5.1",
6787        api: Api::OpenAiCompletions,
6788        provider: "opencode-go",
6789        reasoning: true,
6790        input: &[InputModality::Text],
6791        cost_input: 0.0,
6792        cost_output: 0.0,
6793        cost_cache_read: 0.26,
6794        cost_cache_write: 0.0,
6795        context_window: 202752,
6796        max_tokens: 32768,
6797    },
6798    ModelEntry {
6799        id: "kimi-k2.5",
6800        name: "Kimi K2.5",
6801        api: Api::OpenAiCompletions,
6802        provider: "opencode-go",
6803        reasoning: true,
6804        input: &[InputModality::Text, InputModality::Image],
6805        cost_input: 0.0,
6806        cost_output: 0.0,
6807        cost_cache_read: 0.1,
6808        cost_cache_write: 0.0,
6809        context_window: 262144,
6810        max_tokens: 65536,
6811    },
6812    ModelEntry {
6813        id: "kimi-k2.6",
6814        name: "Kimi K2.6 (3x limits)",
6815        api: Api::OpenAiCompletions,
6816        provider: "opencode-go",
6817        reasoning: true,
6818        input: &[InputModality::Text, InputModality::Image],
6819        cost_input: 0.0,
6820        cost_output: 0.0,
6821        cost_cache_read: 0.054,
6822        cost_cache_write: 0.0,
6823        context_window: 262144,
6824        max_tokens: 65536,
6825    },
6826    ModelEntry {
6827        id: "mimo-v2-omni",
6828        name: "MiMo V2 Omni",
6829        api: Api::OpenAiCompletions,
6830        provider: "opencode-go",
6831        reasoning: true,
6832        input: &[InputModality::Text, InputModality::Image],
6833        cost_input: 0.0,
6834        cost_output: 0.0,
6835        cost_cache_read: 0.08,
6836        cost_cache_write: 0.0,
6837        context_window: 262144,
6838        max_tokens: 128000,
6839    },
6840    ModelEntry {
6841        id: "mimo-v2-pro",
6842        name: "MiMo V2 Pro",
6843        api: Api::OpenAiCompletions,
6844        provider: "opencode-go",
6845        reasoning: true,
6846        input: &[InputModality::Text],
6847        cost_input: 0.0,
6848        cost_output: 0.0,
6849        cost_cache_read: 0.2,
6850        cost_cache_write: 0.0,
6851        context_window: 1048576,
6852        max_tokens: 128000,
6853    },
6854    ModelEntry {
6855        id: "mimo-v2.5",
6856        name: "MiMo V2.5",
6857        api: Api::OpenAiCompletions,
6858        provider: "opencode-go",
6859        reasoning: true,
6860        input: &[InputModality::Text, InputModality::Image],
6861        cost_input: 0.0,
6862        cost_output: 0.0,
6863        cost_cache_read: 0.08,
6864        cost_cache_write: 0.0,
6865        context_window: 1000000,
6866        max_tokens: 128000,
6867    },
6868    ModelEntry {
6869        id: "mimo-v2.5-pro",
6870        name: "MiMo V2.5 Pro",
6871        api: Api::OpenAiCompletions,
6872        provider: "opencode-go",
6873        reasoning: true,
6874        input: &[InputModality::Text],
6875        cost_input: 0.0,
6876        cost_output: 0.0,
6877        cost_cache_read: 0.2,
6878        cost_cache_write: 0.0,
6879        context_window: 1048576,
6880        max_tokens: 128000,
6881    },
6882    ModelEntry {
6883        id: "minimax-m2.5",
6884        name: "MiniMax M2.5",
6885        api: Api::OpenAiCompletions,
6886        provider: "opencode-go",
6887        reasoning: true,
6888        input: &[InputModality::Text],
6889        cost_input: 0.0,
6890        cost_output: 0.0,
6891        cost_cache_read: 0.03,
6892        cost_cache_write: 0.0,
6893        context_window: 204800,
6894        max_tokens: 65536,
6895    },
6896    ModelEntry {
6897        id: "minimax-m2.7",
6898        name: "MiniMax M2.7",
6899        api: Api::AnthropicMessages,
6900        provider: "opencode-go",
6901        reasoning: true,
6902        input: &[InputModality::Text],
6903        cost_input: 0.0,
6904        cost_output: 0.0,
6905        cost_cache_read: 0.06,
6906        cost_cache_write: 0.0,
6907        context_window: 204800,
6908        max_tokens: 131072,
6909    },
6910    ModelEntry {
6911        id: "qwen3.5-plus",
6912        name: "Qwen3.5 Plus",
6913        api: Api::AnthropicMessages,
6914        provider: "opencode-go",
6915        reasoning: true,
6916        input: &[InputModality::Text, InputModality::Image],
6917        cost_input: 0.0,
6918        cost_output: 0.0,
6919        cost_cache_read: 0.02,
6920        cost_cache_write: 0.25,
6921        context_window: 262144,
6922        max_tokens: 65536,
6923    },
6924    ModelEntry {
6925        id: "qwen3.6-plus",
6926        name: "Qwen3.6 Plus",
6927        api: Api::AnthropicMessages,
6928        provider: "opencode-go",
6929        reasoning: true,
6930        input: &[InputModality::Text, InputModality::Image],
6931        cost_input: 0.0,
6932        cost_output: 0.0,
6933        cost_cache_read: 0.05,
6934        cost_cache_write: 0.625,
6935        context_window: 262144,
6936        max_tokens: 65536,
6937    },
6938    ModelEntry {
6939        id: "qwen3.7-max",
6940        name: "Qwen3.7 Max",
6941        api: Api::AnthropicMessages,
6942        provider: "opencode-go",
6943        reasoning: true,
6944        input: &[InputModality::Text],
6945        cost_input: 2.5,
6946        cost_output: 7.5,
6947        cost_cache_read: 0.5,
6948        cost_cache_write: 3.125,
6949        context_window: 1000000,
6950        max_tokens: 65536,
6951    },
6952];
6953
6954/// openrouter models (257 entries)
6955static OPENROUTER_MODELS: &[ModelEntry] = &[
6956    ModelEntry {
6957        id: "ai21/jamba-large-1.7",
6958        name: "AI21: Jamba Large 1.7",
6959        api: Api::OpenAiCompletions,
6960        provider: "openrouter",
6961        reasoning: false,
6962        input: &[InputModality::Text],
6963        cost_input: 0.0,
6964        cost_output: 0.0,
6965        cost_cache_read: 0.0,
6966        cost_cache_write: 0.0,
6967        context_window: 256000,
6968        max_tokens: 4096,
6969    },
6970    ModelEntry {
6971        id: "amazon/nova-lite-v1",
6972        name: "Amazon: Nova Lite 1.0",
6973        api: Api::OpenAiCompletions,
6974        provider: "openrouter",
6975        reasoning: false,
6976        input: &[InputModality::Text, InputModality::Image],
6977        cost_input: 0.0,
6978        cost_output: 0.0,
6979        cost_cache_read: 0.0,
6980        cost_cache_write: 0.0,
6981        context_window: 300000,
6982        max_tokens: 5120,
6983    },
6984    ModelEntry {
6985        id: "anthropic/claude-3.5-haiku",
6986        name: "Anthropic: Claude 3.5 Haiku",
6987        api: Api::OpenAiCompletions,
6988        provider: "openrouter",
6989        reasoning: false,
6990        input: &[InputModality::Text, InputModality::Image],
6991        cost_input: 0.0,
6992        cost_output: 0.0,
6993        cost_cache_read: 0.08,
6994        cost_cache_write: 1.0,
6995        context_window: 200000,
6996        max_tokens: 8192,
6997    },
6998    ModelEntry {
6999        id: "anthropic/claude-opus-4",
7000        name: "Anthropic: Claude Opus 4",
7001        api: Api::OpenAiCompletions,
7002        provider: "openrouter",
7003        reasoning: true,
7004        input: &[InputModality::Text, InputModality::Image],
7005        cost_input: 0.0,
7006        cost_output: 0.0,
7007        cost_cache_read: 1.5,
7008        cost_cache_write: 18.75,
7009        context_window: 200000,
7010        max_tokens: 32000,
7011    },
7012    ModelEntry {
7013        id: "anthropic/claude-opus-4.7",
7014        name: "Anthropic: Claude Opus 4.7",
7015        api: Api::OpenAiCompletions,
7016        provider: "openrouter",
7017        reasoning: true,
7018        input: &[InputModality::Text, InputModality::Image],
7019        cost_input: 0.0,
7020        cost_output: 0.0,
7021        cost_cache_read: 0.5,
7022        cost_cache_write: 6.25,
7023        context_window: 1000000,
7024        max_tokens: 128000,
7025    },
7026    ModelEntry {
7027        id: "arcee-ai/trinity-large-preview",
7028        name: "Arcee AI: Trinity Large Preview",
7029        api: Api::OpenAiCompletions,
7030        provider: "openrouter",
7031        reasoning: false,
7032        input: &[InputModality::Text],
7033        cost_input: 0.0,
7034        cost_output: 0.0,
7035        cost_cache_read: 0.0,
7036        cost_cache_write: 0.0,
7037        context_window: 131000,
7038        max_tokens: 4096,
7039    },
7040    ModelEntry {
7041        id: "baidu/ernie-4.5-21b-a3b",
7042        name: "Baidu: ERNIE 4.5 21B A3B",
7043        api: Api::OpenAiCompletions,
7044        provider: "openrouter",
7045        reasoning: false,
7046        input: &[InputModality::Text],
7047        cost_input: 0.0,
7048        cost_output: 0.0,
7049        cost_cache_read: 0.0,
7050        cost_cache_write: 0.0,
7051        context_window: 120000,
7052        max_tokens: 8000,
7053    },
7054    ModelEntry {
7055        id: "bytedance-seed/seed-2.0-lite",
7056        name: "ByteDance Seed: Seed-2.0-Lite",
7057        api: Api::OpenAiCompletions,
7058        provider: "openrouter",
7059        reasoning: true,
7060        input: &[InputModality::Text, InputModality::Image],
7061        cost_input: 0.0,
7062        cost_output: 0.0,
7063        cost_cache_read: 0.0,
7064        cost_cache_write: 0.0,
7065        context_window: 262144,
7066        max_tokens: 131072,
7067    },
7068    ModelEntry {
7069        id: "deepseek/deepseek-chat-v3-0324",
7070        name: "DeepSeek: DeepSeek V3 0324",
7071        api: Api::OpenAiCompletions,
7072        provider: "openrouter",
7073        reasoning: false,
7074        input: &[InputModality::Text],
7075        cost_input: 0.0,
7076        cost_output: 0.0,
7077        cost_cache_read: 0.135,
7078        cost_cache_write: 0.0,
7079        context_window: 163840,
7080        max_tokens: 16384,
7081    },
7082    ModelEntry {
7083        id: "deepseek/deepseek-v3.1-terminus",
7084        name: "DeepSeek: DeepSeek V3.1 Terminus",
7085        api: Api::OpenAiCompletions,
7086        provider: "openrouter",
7087        reasoning: true,
7088        input: &[InputModality::Text],
7089        cost_input: 0.0,
7090        cost_output: 0.0,
7091        cost_cache_read: 0.13,
7092        cost_cache_write: 0.0,
7093        context_window: 163840,
7094        max_tokens: 32768,
7095    },
7096    ModelEntry {
7097        id: "essentialai/rnj-1-instruct",
7098        name: "EssentialAI: Rnj 1 Instruct",
7099        api: Api::OpenAiCompletions,
7100        provider: "openrouter",
7101        reasoning: false,
7102        input: &[InputModality::Text],
7103        cost_input: 0.0,
7104        cost_output: 0.0,
7105        cost_cache_read: 0.0,
7106        cost_cache_write: 0.0,
7107        context_window: 32768,
7108        max_tokens: 4096,
7109    },
7110    ModelEntry {
7111        id: "google/gemini-2.5-flash-lite-preview-09-2025",
7112        name: "Google: Gemini 2.5 Flash Lite Preview 09-2025",
7113        api: Api::OpenAiCompletions,
7114        provider: "openrouter",
7115        reasoning: true,
7116        input: &[InputModality::Text, InputModality::Image],
7117        cost_input: 0.0,
7118        cost_output: 0.0,
7119        cost_cache_read: 0.01,
7120        cost_cache_write: 0.08333333333333334,
7121        context_window: 1048576,
7122        max_tokens: 65535,
7123    },
7124    ModelEntry {
7125        id: "google/gemini-3-flash-preview",
7126        name: "Google: Gemini 3 Flash Preview",
7127        api: Api::OpenAiCompletions,
7128        provider: "openrouter",
7129        reasoning: true,
7130        input: &[InputModality::Text, InputModality::Image],
7131        cost_input: 0.0,
7132        cost_output: 0.0,
7133        cost_cache_read: 0.05,
7134        cost_cache_write: 0.08333333333333334,
7135        context_window: 1048576,
7136        max_tokens: 65536,
7137    },
7138    ModelEntry {
7139        id: "google/gemma-3-27b-it",
7140        name: "Google: Gemma 3 27B",
7141        api: Api::OpenAiCompletions,
7142        provider: "openrouter",
7143        reasoning: false,
7144        input: &[InputModality::Text, InputModality::Image],
7145        cost_input: 0.0,
7146        cost_output: 0.0,
7147        cost_cache_read: 0.0,
7148        cost_cache_write: 0.0,
7149        context_window: 131072,
7150        max_tokens: 16384,
7151    },
7152    ModelEntry {
7153        id: "google/gemma-4-31b-it:free",
7154        name: "Google: Gemma 4 31B (free)",
7155        api: Api::OpenAiCompletions,
7156        provider: "openrouter",
7157        reasoning: true,
7158        input: &[InputModality::Text, InputModality::Image],
7159        cost_input: 0.0,
7160        cost_output: 0.0,
7161        cost_cache_read: 0.0,
7162        cost_cache_write: 0.0,
7163        context_window: 262144,
7164        max_tokens: 32768,
7165    },
7166    ModelEntry {
7167        id: "kwaipilot/kat-coder-pro-v2",
7168        name: "Kwaipilot: KAT-Coder-Pro V2",
7169        api: Api::OpenAiCompletions,
7170        provider: "openrouter",
7171        reasoning: false,
7172        input: &[InputModality::Text],
7173        cost_input: 0.0,
7174        cost_output: 0.0,
7175        cost_cache_read: 0.06,
7176        cost_cache_write: 0.0,
7177        context_window: 256000,
7178        max_tokens: 80000,
7179    },
7180    ModelEntry {
7181        id: "meta-llama/llama-3.3-70b-instruct",
7182        name: "Meta: Llama 3.3 70B Instruct",
7183        api: Api::OpenAiCompletions,
7184        provider: "openrouter",
7185        reasoning: false,
7186        input: &[InputModality::Text],
7187        cost_input: 0.0,
7188        cost_output: 0.0,
7189        cost_cache_read: 0.0,
7190        cost_cache_write: 0.0,
7191        context_window: 131072,
7192        max_tokens: 16384,
7193    },
7194    ModelEntry {
7195        id: "minimax/minimax-m2.1",
7196        name: "MiniMax: MiniMax M2.1",
7197        api: Api::OpenAiCompletions,
7198        provider: "openrouter",
7199        reasoning: true,
7200        input: &[InputModality::Text],
7201        cost_input: 0.0,
7202        cost_output: 0.0,
7203        cost_cache_read: 0.03,
7204        cost_cache_write: 0.0,
7205        context_window: 196608,
7206        max_tokens: 196608,
7207    },
7208    ModelEntry {
7209        id: "mistralai/codestral-2508",
7210        name: "Mistral: Codestral 2508",
7211        api: Api::OpenAiCompletions,
7212        provider: "openrouter",
7213        reasoning: false,
7214        input: &[InputModality::Text],
7215        cost_input: 0.0,
7216        cost_output: 0.0,
7217        cost_cache_read: 0.03,
7218        cost_cache_write: 0.0,
7219        context_window: 256000,
7220        max_tokens: 4096,
7221    },
7222    ModelEntry {
7223        id: "mistralai/ministral-3b-2512",
7224        name: "Mistral: Ministral 3 3B 2512",
7225        api: Api::OpenAiCompletions,
7226        provider: "openrouter",
7227        reasoning: false,
7228        input: &[InputModality::Text, InputModality::Image],
7229        cost_input: 0.0,
7230        cost_output: 0.0,
7231        cost_cache_read: 0.01,
7232        cost_cache_write: 0.0,
7233        context_window: 131072,
7234        max_tokens: 4096,
7235    },
7236    ModelEntry {
7237        id: "mistralai/mistral-large-2512",
7238        name: "Mistral: Mistral Large 3 2512",
7239        api: Api::OpenAiCompletions,
7240        provider: "openrouter",
7241        reasoning: false,
7242        input: &[InputModality::Text, InputModality::Image],
7243        cost_input: 0.0,
7244        cost_output: 0.0,
7245        cost_cache_read: 0.05,
7246        cost_cache_write: 0.0,
7247        context_window: 262144,
7248        max_tokens: 4096,
7249    },
7250    ModelEntry {
7251        id: "mistralai/mistral-saba",
7252        name: "Mistral: Saba",
7253        api: Api::OpenAiCompletions,
7254        provider: "openrouter",
7255        reasoning: false,
7256        input: &[InputModality::Text],
7257        cost_input: 0.0,
7258        cost_output: 0.0,
7259        cost_cache_read: 0.02,
7260        cost_cache_write: 0.0,
7261        context_window: 32768,
7262        max_tokens: 4096,
7263    },
7264    ModelEntry {
7265        id: "mistralai/pixtral-large-2411",
7266        name: "Mistral: Pixtral Large 2411",
7267        api: Api::OpenAiCompletions,
7268        provider: "openrouter",
7269        reasoning: false,
7270        input: &[InputModality::Text, InputModality::Image],
7271        cost_input: 0.0,
7272        cost_output: 0.0,
7273        cost_cache_read: 0.2,
7274        cost_cache_write: 0.0,
7275        context_window: 131072,
7276        max_tokens: 4096,
7277    },
7278    ModelEntry {
7279        id: "moonshotai/kimi-k2-thinking",
7280        name: "MoonshotAI: Kimi K2 Thinking",
7281        api: Api::OpenAiCompletions,
7282        provider: "openrouter",
7283        reasoning: true,
7284        input: &[InputModality::Text],
7285        cost_input: 0.0,
7286        cost_output: 0.0,
7287        cost_cache_read: 0.15,
7288        cost_cache_write: 0.0,
7289        context_window: 262144,
7290        max_tokens: 262144,
7291    },
7292    ModelEntry {
7293        id: "nvidia/llama-3.3-nemotron-super-49b-v1.5",
7294        name: "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5",
7295        api: Api::OpenAiCompletions,
7296        provider: "openrouter",
7297        reasoning: true,
7298        input: &[InputModality::Text],
7299        cost_input: 0.0,
7300        cost_output: 0.0,
7301        cost_cache_read: 0.0,
7302        cost_cache_write: 0.0,
7303        context_window: 131072,
7304        max_tokens: 16384,
7305    },
7306    ModelEntry {
7307        id: "nvidia/nemotron-3-super-120b-a12b",
7308        name: "NVIDIA: Nemotron 3 Super",
7309        api: Api::OpenAiCompletions,
7310        provider: "openrouter",
7311        reasoning: true,
7312        input: &[InputModality::Text],
7313        cost_input: 0.0,
7314        cost_output: 0.0,
7315        cost_cache_read: 0.0,
7316        cost_cache_write: 0.0,
7317        context_window: 262144,
7318        max_tokens: 4096,
7319    },
7320    ModelEntry {
7321        id: "openai/gpt-3.5-turbo",
7322        name: "OpenAI: GPT-3.5 Turbo",
7323        api: Api::OpenAiCompletions,
7324        provider: "openrouter",
7325        reasoning: false,
7326        input: &[InputModality::Text],
7327        cost_input: 0.0,
7328        cost_output: 0.0,
7329        cost_cache_read: 0.0,
7330        cost_cache_write: 0.0,
7331        context_window: 16385,
7332        max_tokens: 4096,
7333    },
7334    ModelEntry {
7335        id: "openai/gpt-4-0314",
7336        name: "OpenAI: GPT-4 (older v0314)",
7337        api: Api::OpenAiCompletions,
7338        provider: "openrouter",
7339        reasoning: false,
7340        input: &[InputModality::Text],
7341        cost_input: 0.0,
7342        cost_output: 0.0,
7343        cost_cache_read: 0.0,
7344        cost_cache_write: 0.0,
7345        context_window: 8191,
7346        max_tokens: 4096,
7347    },
7348    ModelEntry {
7349        id: "openai/gpt-4.1-mini",
7350        name: "OpenAI: GPT-4.1 Mini",
7351        api: Api::OpenAiCompletions,
7352        provider: "openrouter",
7353        reasoning: false,
7354        input: &[InputModality::Text, InputModality::Image],
7355        cost_input: 0.0,
7356        cost_output: 0.0,
7357        cost_cache_read: 0.1,
7358        cost_cache_write: 0.0,
7359        context_window: 1047576,
7360        max_tokens: 32768,
7361    },
7362    ModelEntry {
7363        id: "openai/gpt-4o-2024-08-06",
7364        name: "OpenAI: GPT-4o (2024-08-06)",
7365        api: Api::OpenAiCompletions,
7366        provider: "openrouter",
7367        reasoning: false,
7368        input: &[InputModality::Text, InputModality::Image],
7369        cost_input: 0.0,
7370        cost_output: 0.0,
7371        cost_cache_read: 1.25,
7372        cost_cache_write: 0.0,
7373        context_window: 128000,
7374        max_tokens: 16384,
7375    },
7376    ModelEntry {
7377        id: "openai/gpt-5",
7378        name: "OpenAI: GPT-5",
7379        api: Api::OpenAiCompletions,
7380        provider: "openrouter",
7381        reasoning: true,
7382        input: &[InputModality::Text, InputModality::Image],
7383        cost_input: 0.0,
7384        cost_output: 0.0,
7385        cost_cache_read: 0.125,
7386        cost_cache_write: 0.0,
7387        context_window: 400000,
7388        max_tokens: 128000,
7389    },
7390    ModelEntry {
7391        id: "openai/gpt-5.1",
7392        name: "OpenAI: GPT-5.1",
7393        api: Api::OpenAiCompletions,
7394        provider: "openrouter",
7395        reasoning: true,
7396        input: &[InputModality::Text, InputModality::Image],
7397        cost_input: 0.0,
7398        cost_output: 0.0,
7399        cost_cache_read: 0.13,
7400        cost_cache_write: 0.0,
7401        context_window: 400000,
7402        max_tokens: 128000,
7403    },
7404    ModelEntry {
7405        id: "openai/gpt-5.1-codex-mini",
7406        name: "OpenAI: GPT-5.1-Codex-Mini",
7407        api: Api::OpenAiCompletions,
7408        provider: "openrouter",
7409        reasoning: true,
7410        input: &[InputModality::Text, InputModality::Image],
7411        cost_input: 0.0,
7412        cost_output: 0.0,
7413        cost_cache_read: 0.03,
7414        cost_cache_write: 0.0,
7415        context_window: 400000,
7416        max_tokens: 128000,
7417    },
7418    ModelEntry {
7419        id: "openai/gpt-5.3-chat",
7420        name: "OpenAI: GPT-5.3 Chat",
7421        api: Api::OpenAiCompletions,
7422        provider: "openrouter",
7423        reasoning: false,
7424        input: &[InputModality::Text, InputModality::Image],
7425        cost_input: 0.0,
7426        cost_output: 0.0,
7427        cost_cache_read: 0.175,
7428        cost_cache_write: 0.0,
7429        context_window: 128000,
7430        max_tokens: 16384,
7431    },
7432    ModelEntry {
7433        id: "openai/gpt-5.4-nano",
7434        name: "OpenAI: GPT-5.4 Nano",
7435        api: Api::OpenAiCompletions,
7436        provider: "openrouter",
7437        reasoning: true,
7438        input: &[InputModality::Text, InputModality::Image],
7439        cost_input: 0.0,
7440        cost_output: 0.0,
7441        cost_cache_read: 0.02,
7442        cost_cache_write: 0.0,
7443        context_window: 400000,
7444        max_tokens: 128000,
7445    },
7446    ModelEntry {
7447        id: "openai/gpt-audio-mini",
7448        name: "OpenAI: GPT Audio Mini",
7449        api: Api::OpenAiCompletions,
7450        provider: "openrouter",
7451        reasoning: false,
7452        input: &[InputModality::Text],
7453        cost_input: 0.0,
7454        cost_output: 0.0,
7455        cost_cache_read: 0.0,
7456        cost_cache_write: 0.0,
7457        context_window: 128000,
7458        max_tokens: 16384,
7459    },
7460    ModelEntry {
7461        id: "openai/gpt-oss-20b:free",
7462        name: "OpenAI: gpt-oss-20b (free)",
7463        api: Api::OpenAiCompletions,
7464        provider: "openrouter",
7465        reasoning: true,
7466        input: &[InputModality::Text],
7467        cost_input: 0.0,
7468        cost_output: 0.0,
7469        cost_cache_read: 0.0,
7470        cost_cache_write: 0.0,
7471        context_window: 131072,
7472        max_tokens: 8192,
7473    },
7474    ModelEntry {
7475        id: "openai/o3-mini",
7476        name: "OpenAI: o3 Mini",
7477        api: Api::OpenAiCompletions,
7478        provider: "openrouter",
7479        reasoning: true,
7480        input: &[InputModality::Text],
7481        cost_input: 0.0,
7482        cost_output: 0.0,
7483        cost_cache_read: 0.55,
7484        cost_cache_write: 0.0,
7485        context_window: 200000,
7486        max_tokens: 100000,
7487    },
7488    ModelEntry {
7489        id: "openai/o4-mini-deep-research",
7490        name: "OpenAI: o4 Mini Deep Research",
7491        api: Api::OpenAiCompletions,
7492        provider: "openrouter",
7493        reasoning: true,
7494        input: &[InputModality::Text, InputModality::Image],
7495        cost_input: 0.0,
7496        cost_output: 0.0,
7497        cost_cache_read: 0.5,
7498        cost_cache_write: 0.0,
7499        context_window: 200000,
7500        max_tokens: 100000,
7501    },
7502    ModelEntry {
7503        id: "poolside/laguna-m.1:free",
7504        name: "Poolside: Laguna M.1 (free)",
7505        api: Api::OpenAiCompletions,
7506        provider: "openrouter",
7507        reasoning: true,
7508        input: &[InputModality::Text],
7509        cost_input: 0.0,
7510        cost_output: 0.0,
7511        cost_cache_read: 0.0,
7512        cost_cache_write: 0.0,
7513        context_window: 131072,
7514        max_tokens: 8192,
7515    },
7516    ModelEntry {
7517        id: "qwen/qwen-max",
7518        name: "Qwen: Qwen-Max ",
7519        api: Api::OpenAiCompletions,
7520        provider: "openrouter",
7521        reasoning: false,
7522        input: &[InputModality::Text],
7523        cost_input: 0.0,
7524        cost_output: 0.0,
7525        cost_cache_read: 0.208,
7526        cost_cache_write: 0.0,
7527        context_window: 32768,
7528        max_tokens: 8192,
7529    },
7530    ModelEntry {
7531        id: "qwen/qwen-turbo",
7532        name: "Qwen: Qwen-Turbo",
7533        api: Api::OpenAiCompletions,
7534        provider: "openrouter",
7535        reasoning: false,
7536        input: &[InputModality::Text],
7537        cost_input: 0.0,
7538        cost_output: 0.0,
7539        cost_cache_read: 0.006500000000000001,
7540        cost_cache_write: 0.0,
7541        context_window: 131072,
7542        max_tokens: 8192,
7543    },
7544    ModelEntry {
7545        id: "qwen/qwen3-235b-a22b-thinking-2507",
7546        name: "Qwen: Qwen3 235B A22B Thinking 2507",
7547        api: Api::OpenAiCompletions,
7548        provider: "openrouter",
7549        reasoning: true,
7550        input: &[InputModality::Text],
7551        cost_input: 0.0,
7552        cost_output: 0.0,
7553        cost_cache_read: 0.0,
7554        cost_cache_write: 0.0,
7555        context_window: 131072,
7556        max_tokens: 4096,
7557    },
7558    ModelEntry {
7559        id: "qwen/qwen3-32b",
7560        name: "Qwen: Qwen3 32B",
7561        api: Api::OpenAiCompletions,
7562        provider: "openrouter",
7563        reasoning: true,
7564        input: &[InputModality::Text],
7565        cost_input: 0.0,
7566        cost_output: 0.0,
7567        cost_cache_read: 0.04,
7568        cost_cache_write: 0.0,
7569        context_window: 40960,
7570        max_tokens: 40960,
7571    },
7572    ModelEntry {
7573        id: "qwen/qwen3-coder-next",
7574        name: "Qwen: Qwen3 Coder Next",
7575        api: Api::OpenAiCompletions,
7576        provider: "openrouter",
7577        reasoning: false,
7578        input: &[InputModality::Text],
7579        cost_input: 0.0,
7580        cost_output: 0.0,
7581        cost_cache_read: 0.07,
7582        cost_cache_write: 0.0,
7583        context_window: 262144,
7584        max_tokens: 262144,
7585    },
7586    ModelEntry {
7587        id: "qwen/qwen3-max-thinking",
7588        name: "Qwen: Qwen3 Max Thinking",
7589        api: Api::OpenAiCompletions,
7590        provider: "openrouter",
7591        reasoning: true,
7592        input: &[InputModality::Text],
7593        cost_input: 0.0,
7594        cost_output: 0.0,
7595        cost_cache_read: 0.0,
7596        cost_cache_write: 0.0,
7597        context_window: 262144,
7598        max_tokens: 32768,
7599    },
7600    ModelEntry {
7601        id: "qwen/qwen3-vl-235b-a22b-thinking",
7602        name: "Qwen: Qwen3 VL 235B A22B Thinking",
7603        api: Api::OpenAiCompletions,
7604        provider: "openrouter",
7605        reasoning: true,
7606        input: &[InputModality::Text, InputModality::Image],
7607        cost_input: 0.0,
7608        cost_output: 0.0,
7609        cost_cache_read: 0.0,
7610        cost_cache_write: 0.0,
7611        context_window: 131072,
7612        max_tokens: 32768,
7613    },
7614    ModelEntry {
7615        id: "qwen/qwen3-vl-8b-instruct",
7616        name: "Qwen: Qwen3 VL 8B Instruct",
7617        api: Api::OpenAiCompletions,
7618        provider: "openrouter",
7619        reasoning: false,
7620        input: &[InputModality::Text, InputModality::Image],
7621        cost_input: 0.0,
7622        cost_output: 0.0,
7623        cost_cache_read: 0.0,
7624        cost_cache_write: 0.0,
7625        context_window: 131072,
7626        max_tokens: 32768,
7627    },
7628    ModelEntry {
7629        id: "qwen/qwen3.5-397b-a17b",
7630        name: "Qwen: Qwen3.5 397B A17B",
7631        api: Api::OpenAiCompletions,
7632        provider: "openrouter",
7633        reasoning: true,
7634        input: &[InputModality::Text, InputModality::Image],
7635        cost_input: 0.0,
7636        cost_output: 0.0,
7637        cost_cache_read: 0.195,
7638        cost_cache_write: 0.0,
7639        context_window: 262144,
7640        max_tokens: 65536,
7641    },
7642    ModelEntry {
7643        id: "qwen/qwen3.5-plus-20260420",
7644        name: "Qwen: Qwen3.5 Plus 2026-04-20",
7645        api: Api::OpenAiCompletions,
7646        provider: "openrouter",
7647        reasoning: true,
7648        input: &[InputModality::Text, InputModality::Image],
7649        cost_input: 0.0,
7650        cost_output: 0.0,
7651        cost_cache_read: 0.0,
7652        cost_cache_write: 0.0,
7653        context_window: 1000000,
7654        max_tokens: 65536,
7655    },
7656    ModelEntry {
7657        id: "rekaai/reka-edge",
7658        name: "Reka Edge",
7659        api: Api::OpenAiCompletions,
7660        provider: "openrouter",
7661        reasoning: false,
7662        input: &[InputModality::Text, InputModality::Image],
7663        cost_input: 0.0,
7664        cost_output: 0.0,
7665        cost_cache_read: 0.0,
7666        cost_cache_write: 0.0,
7667        context_window: 16384,
7668        max_tokens: 16384,
7669    },
7670    ModelEntry {
7671        id: "tencent/hy3-preview:free",
7672        name: "Tencent: Hy3 preview (free)",
7673        api: Api::OpenAiCompletions,
7674        provider: "openrouter",
7675        reasoning: true,
7676        input: &[InputModality::Text],
7677        cost_input: 0.0,
7678        cost_output: 0.0,
7679        cost_cache_read: 0.0,
7680        cost_cache_write: 0.0,
7681        context_window: 262144,
7682        max_tokens: 262144,
7683    },
7684    ModelEntry {
7685        id: "upstage/solar-pro-3",
7686        name: "Upstage: Solar Pro 3",
7687        api: Api::OpenAiCompletions,
7688        provider: "openrouter",
7689        reasoning: true,
7690        input: &[InputModality::Text],
7691        cost_input: 0.0,
7692        cost_output: 0.0,
7693        cost_cache_read: 0.015,
7694        cost_cache_write: 0.0,
7695        context_window: 128000,
7696        max_tokens: 4096,
7697    },
7698    ModelEntry {
7699        id: "x-ai/grok-4",
7700        name: "xAI: Grok 4",
7701        api: Api::OpenAiCompletions,
7702        provider: "openrouter",
7703        reasoning: true,
7704        input: &[InputModality::Text, InputModality::Image],
7705        cost_input: 0.0,
7706        cost_output: 0.0,
7707        cost_cache_read: 0.75,
7708        cost_cache_write: 0.0,
7709        context_window: 256000,
7710        max_tokens: 4096,
7711    },
7712    ModelEntry {
7713        id: "x-ai/grok-4.3",
7714        name: "xAI: Grok 4.3",
7715        api: Api::OpenAiCompletions,
7716        provider: "openrouter",
7717        reasoning: true,
7718        input: &[InputModality::Text, InputModality::Image],
7719        cost_input: 0.0,
7720        cost_output: 0.0,
7721        cost_cache_read: 0.2,
7722        cost_cache_write: 0.0,
7723        context_window: 1000000,
7724        max_tokens: 4096,
7725    },
7726    ModelEntry {
7727        id: "xiaomi/mimo-v2.5",
7728        name: "Xiaomi: MiMo-V2.5",
7729        api: Api::OpenAiCompletions,
7730        provider: "openrouter",
7731        reasoning: true,
7732        input: &[InputModality::Text, InputModality::Image],
7733        cost_input: 0.0,
7734        cost_output: 0.0,
7735        cost_cache_read: 0.08,
7736        cost_cache_write: 0.0,
7737        context_window: 1048576,
7738        max_tokens: 131072,
7739    },
7740    ModelEntry {
7741        id: "z-ai/glm-4.5-air",
7742        name: "Z.ai: GLM 4.5 Air",
7743        api: Api::OpenAiCompletions,
7744        provider: "openrouter",
7745        reasoning: true,
7746        input: &[InputModality::Text],
7747        cost_input: 0.0,
7748        cost_output: 0.0,
7749        cost_cache_read: 0.025,
7750        cost_cache_write: 0.0,
7751        context_window: 131072,
7752        max_tokens: 98304,
7753    },
7754    ModelEntry {
7755        id: "z-ai/glm-4.7",
7756        name: "Z.ai: GLM 4.7",
7757        api: Api::OpenAiCompletions,
7758        provider: "openrouter",
7759        reasoning: true,
7760        input: &[InputModality::Text],
7761        cost_input: 0.0,
7762        cost_output: 0.0,
7763        cost_cache_read: 0.0,
7764        cost_cache_write: 0.0,
7765        context_window: 202752,
7766        max_tokens: 4096,
7767    },
7768    ModelEntry {
7769        id: "z-ai/glm-5.1",
7770        name: "Z.ai: GLM 5.1",
7771        api: Api::OpenAiCompletions,
7772        provider: "openrouter",
7773        reasoning: true,
7774        input: &[InputModality::Text],
7775        cost_input: 0.0,
7776        cost_output: 0.0,
7777        cost_cache_read: 0.5249999999999999,
7778        cost_cache_write: 0.0,
7779        context_window: 202752,
7780        max_tokens: 65535,
7781    },
7782    ModelEntry {
7783        id: "~google/gemini-flash-latest",
7784        name: "Google Gemini Flash Latest",
7785        api: Api::OpenAiCompletions,
7786        provider: "openrouter",
7787        reasoning: true,
7788        input: &[InputModality::Text, InputModality::Image],
7789        cost_input: 0.0,
7790        cost_output: 0.0,
7791        cost_cache_read: 0.05,
7792        cost_cache_write: 0.08333333333333334,
7793        context_window: 1048576,
7794        max_tokens: 65536,
7795    },
7796    ModelEntry {
7797        id: "amazon/nova-2-lite-v1",
7798        name: "Amazon: Nova 2 Lite",
7799        api: Api::OpenAiCompletions,
7800        provider: "openrouter",
7801        reasoning: true,
7802        input: &[InputModality::Text, InputModality::Image],
7803        cost_input: 0.3,
7804        cost_output: 2.5,
7805        cost_cache_read: 0.0,
7806        cost_cache_write: 0.0,
7807        context_window: 1000000,
7808        max_tokens: 65535,
7809    },
7810    ModelEntry {
7811        id: "amazon/nova-micro-v1",
7812        name: "Amazon: Nova Micro 1.0",
7813        api: Api::OpenAiCompletions,
7814        provider: "openrouter",
7815        reasoning: false,
7816        input: &[InputModality::Text],
7817        cost_input: 0.035,
7818        cost_output: 0.14,
7819        cost_cache_read: 0.0,
7820        cost_cache_write: 0.0,
7821        context_window: 128000,
7822        max_tokens: 5120,
7823    },
7824    ModelEntry {
7825        id: "amazon/nova-premier-v1",
7826        name: "Amazon: Nova Premier 1.0",
7827        api: Api::OpenAiCompletions,
7828        provider: "openrouter",
7829        reasoning: false,
7830        input: &[InputModality::Text, InputModality::Image],
7831        cost_input: 2.5,
7832        cost_output: 12.5,
7833        cost_cache_read: 0.625,
7834        cost_cache_write: 0.0,
7835        context_window: 1000000,
7836        max_tokens: 32000,
7837    },
7838    ModelEntry {
7839        id: "amazon/nova-pro-v1",
7840        name: "Amazon: Nova Pro 1.0",
7841        api: Api::OpenAiCompletions,
7842        provider: "openrouter",
7843        reasoning: false,
7844        input: &[InputModality::Text, InputModality::Image],
7845        cost_input: 0.7999999999999999,
7846        cost_output: 3.1999999999999997,
7847        cost_cache_read: 0.0,
7848        cost_cache_write: 0.0,
7849        context_window: 300000,
7850        max_tokens: 5120,
7851    },
7852    ModelEntry {
7853        id: "anthropic/claude-3-haiku",
7854        name: "Anthropic: Claude 3 Haiku",
7855        api: Api::OpenAiCompletions,
7856        provider: "openrouter",
7857        reasoning: false,
7858        input: &[InputModality::Text, InputModality::Image],
7859        cost_input: 0.25,
7860        cost_output: 1.25,
7861        cost_cache_read: 0.03,
7862        cost_cache_write: 0.3,
7863        context_window: 200000,
7864        max_tokens: 4096,
7865    },
7866    ModelEntry {
7867        id: "anthropic/claude-opus-4.1",
7868        name: "Anthropic: Claude Opus 4.1",
7869        api: Api::OpenAiCompletions,
7870        provider: "openrouter",
7871        reasoning: true,
7872        input: &[InputModality::Text, InputModality::Image],
7873        cost_input: 15.0,
7874        cost_output: 75.0,
7875        cost_cache_read: 1.5,
7876        cost_cache_write: 18.75,
7877        context_window: 200000,
7878        max_tokens: 32000,
7879    },
7880    ModelEntry {
7881        id: "anthropic/claude-opus-4.5",
7882        name: "Anthropic: Claude Opus 4.5",
7883        api: Api::OpenAiCompletions,
7884        provider: "openrouter",
7885        reasoning: true,
7886        input: &[InputModality::Text, InputModality::Image],
7887        cost_input: 5.0,
7888        cost_output: 25.0,
7889        cost_cache_read: 0.5,
7890        cost_cache_write: 6.25,
7891        context_window: 200000,
7892        max_tokens: 64000,
7893    },
7894    ModelEntry {
7895        id: "anthropic/claude-opus-4.6",
7896        name: "Anthropic: Claude Opus 4.6",
7897        api: Api::OpenAiCompletions,
7898        provider: "openrouter",
7899        reasoning: true,
7900        input: &[InputModality::Text, InputModality::Image],
7901        cost_input: 5.0,
7902        cost_output: 25.0,
7903        cost_cache_read: 0.5,
7904        cost_cache_write: 6.25,
7905        context_window: 1000000,
7906        max_tokens: 128000,
7907    },
7908    ModelEntry {
7909        id: "anthropic/claude-opus-4.6-fast",
7910        name: "Anthropic: Claude Opus 4.6 (Fast)",
7911        api: Api::OpenAiCompletions,
7912        provider: "openrouter",
7913        reasoning: true,
7914        input: &[InputModality::Text, InputModality::Image],
7915        cost_input: 30.0,
7916        cost_output: 150.0,
7917        cost_cache_read: 3.0,
7918        cost_cache_write: 37.5,
7919        context_window: 1000000,
7920        max_tokens: 128000,
7921    },
7922    ModelEntry {
7923        id: "anthropic/claude-opus-4.7-fast",
7924        name: "Anthropic: Claude Opus 4.7 (Fast)",
7925        api: Api::OpenAiCompletions,
7926        provider: "openrouter",
7927        reasoning: true,
7928        input: &[InputModality::Text, InputModality::Image],
7929        cost_input: 30.0,
7930        cost_output: 150.0,
7931        cost_cache_read: 3.0,
7932        cost_cache_write: 37.5,
7933        context_window: 1000000,
7934        max_tokens: 128000,
7935    },
7936    ModelEntry {
7937        id: "anthropic/claude-sonnet-4.5",
7938        name: "Anthropic: Claude Sonnet 4.5",
7939        api: Api::OpenAiCompletions,
7940        provider: "openrouter",
7941        reasoning: true,
7942        input: &[InputModality::Text, InputModality::Image],
7943        cost_input: 3.0,
7944        cost_output: 15.0,
7945        cost_cache_read: 0.3,
7946        cost_cache_write: 3.75,
7947        context_window: 1000000,
7948        max_tokens: 64000,
7949    },
7950    ModelEntry {
7951        id: "anthropic/claude-sonnet-4.6",
7952        name: "Anthropic: Claude Sonnet 4.6",
7953        api: Api::OpenAiCompletions,
7954        provider: "openrouter",
7955        reasoning: true,
7956        input: &[InputModality::Text, InputModality::Image],
7957        cost_input: 3.0,
7958        cost_output: 15.0,
7959        cost_cache_read: 0.3,
7960        cost_cache_write: 3.75,
7961        context_window: 1000000,
7962        max_tokens: 128000,
7963    },
7964    ModelEntry {
7965        id: "arcee-ai/trinity-large-thinking",
7966        name: "Arcee AI: Trinity Large Thinking",
7967        api: Api::OpenAiCompletions,
7968        provider: "openrouter",
7969        reasoning: true,
7970        input: &[InputModality::Text],
7971        cost_input: 0.22,
7972        cost_output: 0.85,
7973        cost_cache_read: 0.06,
7974        cost_cache_write: 0.0,
7975        context_window: 262144,
7976        max_tokens: 262144,
7977    },
7978    ModelEntry {
7979        id: "arcee-ai/trinity-mini",
7980        name: "Arcee AI: Trinity Mini",
7981        api: Api::OpenAiCompletions,
7982        provider: "openrouter",
7983        reasoning: true,
7984        input: &[InputModality::Text],
7985        cost_input: 0.045,
7986        cost_output: 0.15,
7987        cost_cache_read: 0.0,
7988        cost_cache_write: 0.0,
7989        context_window: 131072,
7990        max_tokens: 131072,
7991    },
7992    ModelEntry {
7993        id: "arcee-ai/virtuoso-large",
7994        name: "Arcee AI: Virtuoso Large",
7995        api: Api::OpenAiCompletions,
7996        provider: "openrouter",
7997        reasoning: false,
7998        input: &[InputModality::Text],
7999        cost_input: 0.75,
8000        cost_output: 1.2,
8001        cost_cache_read: 0.0,
8002        cost_cache_write: 0.0,
8003        context_window: 131072,
8004        max_tokens: 64000,
8005    },
8006    ModelEntry {
8007        id: "auto",
8008        name: "Auto",
8009        api: Api::OpenAiCompletions,
8010        provider: "openrouter",
8011        reasoning: true,
8012        input: &[InputModality::Text, InputModality::Image],
8013        cost_input: 0.0,
8014        cost_output: 0.0,
8015        cost_cache_read: 0.0,
8016        cost_cache_write: 0.0,
8017        context_window: 2000000,
8018        max_tokens: 30000,
8019    },
8020    ModelEntry {
8021        id: "baidu/ernie-4.5-vl-28b-a3b",
8022        name: "Baidu: ERNIE 4.5 VL 28B A3B",
8023        api: Api::OpenAiCompletions,
8024        provider: "openrouter",
8025        reasoning: true,
8026        input: &[InputModality::Text, InputModality::Image],
8027        cost_input: 0.14,
8028        cost_output: 0.56,
8029        cost_cache_read: 0.0,
8030        cost_cache_write: 0.0,
8031        context_window: 131072,
8032        max_tokens: 8000,
8033    },
8034    ModelEntry {
8035        id: "bytedance-seed/seed-1.6",
8036        name: "ByteDance Seed: Seed 1.6",
8037        api: Api::OpenAiCompletions,
8038        provider: "openrouter",
8039        reasoning: true,
8040        input: &[InputModality::Text, InputModality::Image],
8041        cost_input: 0.25,
8042        cost_output: 2.0,
8043        cost_cache_read: 0.0,
8044        cost_cache_write: 0.0,
8045        context_window: 262144,
8046        max_tokens: 32768,
8047    },
8048    ModelEntry {
8049        id: "bytedance-seed/seed-1.6-flash",
8050        name: "ByteDance Seed: Seed 1.6 Flash",
8051        api: Api::OpenAiCompletions,
8052        provider: "openrouter",
8053        reasoning: true,
8054        input: &[InputModality::Text, InputModality::Image],
8055        cost_input: 0.075,
8056        cost_output: 0.3,
8057        cost_cache_read: 0.0,
8058        cost_cache_write: 0.0,
8059        context_window: 262144,
8060        max_tokens: 32768,
8061    },
8062    ModelEntry {
8063        id: "bytedance-seed/seed-2.0-mini",
8064        name: "ByteDance Seed: Seed-2.0-Mini",
8065        api: Api::OpenAiCompletions,
8066        provider: "openrouter",
8067        reasoning: true,
8068        input: &[InputModality::Text, InputModality::Image],
8069        cost_input: 0.09999999999999999,
8070        cost_output: 0.39999999999999997,
8071        cost_cache_read: 0.0,
8072        cost_cache_write: 0.0,
8073        context_window: 262144,
8074        max_tokens: 131072,
8075    },
8076    ModelEntry {
8077        id: "cohere/command-r-08-2024",
8078        name: "Cohere: Command R (08-2024)",
8079        api: Api::OpenAiCompletions,
8080        provider: "openrouter",
8081        reasoning: false,
8082        input: &[InputModality::Text],
8083        cost_input: 0.15,
8084        cost_output: 0.6,
8085        cost_cache_read: 0.0,
8086        cost_cache_write: 0.0,
8087        context_window: 128000,
8088        max_tokens: 4000,
8089    },
8090    ModelEntry {
8091        id: "cohere/command-r-plus-08-2024",
8092        name: "Cohere: Command R+ (08-2024)",
8093        api: Api::OpenAiCompletions,
8094        provider: "openrouter",
8095        reasoning: false,
8096        input: &[InputModality::Text],
8097        cost_input: 2.5,
8098        cost_output: 10.0,
8099        cost_cache_read: 0.0,
8100        cost_cache_write: 0.0,
8101        context_window: 128000,
8102        max_tokens: 4000,
8103    },
8104    ModelEntry {
8105        id: "deepseek/deepseek-chat",
8106        name: "DeepSeek: DeepSeek V3",
8107        api: Api::OpenAiCompletions,
8108        provider: "openrouter",
8109        reasoning: false,
8110        input: &[InputModality::Text],
8111        cost_input: 0.2288,
8112        cost_output: 0.9144,
8113        cost_cache_read: 0.0,
8114        cost_cache_write: 0.0,
8115        context_window: 131072,
8116        max_tokens: 16000,
8117    },
8118    ModelEntry {
8119        id: "deepseek/deepseek-chat-v3.1",
8120        name: "DeepSeek: DeepSeek V3.1",
8121        api: Api::OpenAiCompletions,
8122        provider: "openrouter",
8123        reasoning: true,
8124        input: &[InputModality::Text],
8125        cost_input: 0.21,
8126        cost_output: 0.7899999999999999,
8127        cost_cache_read: 0.13,
8128        cost_cache_write: 0.0,
8129        context_window: 163840,
8130        max_tokens: 32768,
8131    },
8132    ModelEntry {
8133        id: "deepseek/deepseek-r1",
8134        name: "DeepSeek: R1",
8135        api: Api::OpenAiCompletions,
8136        provider: "openrouter",
8137        reasoning: true,
8138        input: &[InputModality::Text],
8139        cost_input: 0.7,
8140        cost_output: 2.5,
8141        cost_cache_read: 0.0,
8142        cost_cache_write: 0.0,
8143        context_window: 163840,
8144        max_tokens: 16000,
8145    },
8146    ModelEntry {
8147        id: "deepseek/deepseek-r1-0528",
8148        name: "DeepSeek: R1 0528",
8149        api: Api::OpenAiCompletions,
8150        provider: "openrouter",
8151        reasoning: true,
8152        input: &[InputModality::Text],
8153        cost_input: 0.5,
8154        cost_output: 2.1500000000000004,
8155        cost_cache_read: 0.35,
8156        cost_cache_write: 0.0,
8157        context_window: 163840,
8158        max_tokens: 32768,
8159    },
8160    ModelEntry {
8161        id: "deepseek/deepseek-v3.2-exp",
8162        name: "DeepSeek: DeepSeek V3.2 Exp",
8163        api: Api::OpenAiCompletions,
8164        provider: "openrouter",
8165        reasoning: true,
8166        input: &[InputModality::Text],
8167        cost_input: 0.27,
8168        cost_output: 0.41,
8169        cost_cache_read: 0.0,
8170        cost_cache_write: 0.0,
8171        context_window: 163840,
8172        max_tokens: 65536,
8173    },
8174    ModelEntry {
8175        id: "deepseek/deepseek-v4-flash",
8176        name: "DeepSeek: DeepSeek V4 Flash",
8177        api: Api::OpenAiCompletions,
8178        provider: "openrouter",
8179        reasoning: true,
8180        input: &[InputModality::Text],
8181        cost_input: 0.09999999999999999,
8182        cost_output: 0.19999999999999998,
8183        cost_cache_read: 0.02,
8184        cost_cache_write: 0.0,
8185        context_window: 1048576,
8186        max_tokens: 16384,
8187    },
8188    ModelEntry {
8189        id: "deepseek/deepseek-v4-flash:free",
8190        name: "DeepSeek: DeepSeek V4 Flash (free)",
8191        api: Api::OpenAiCompletions,
8192        provider: "openrouter",
8193        reasoning: true,
8194        input: &[InputModality::Text],
8195        cost_input: 0.0,
8196        cost_output: 0.0,
8197        cost_cache_read: 0.0,
8198        cost_cache_write: 0.0,
8199        context_window: 1048576,
8200        max_tokens: 384000,
8201    },
8202    ModelEntry {
8203        id: "deepseek/deepseek-v4-pro",
8204        name: "DeepSeek: DeepSeek V4 Pro",
8205        api: Api::OpenAiCompletions,
8206        provider: "openrouter",
8207        reasoning: true,
8208        input: &[InputModality::Text],
8209        cost_input: 0.435,
8210        cost_output: 0.87,
8211        cost_cache_read: 0.003625,
8212        cost_cache_write: 0.0,
8213        context_window: 1048576,
8214        max_tokens: 384000,
8215    },
8216    ModelEntry {
8217        id: "google/gemini-2.0-flash-001",
8218        name: "Google: Gemini 2.0 Flash",
8219        api: Api::OpenAiCompletions,
8220        provider: "openrouter",
8221        reasoning: false,
8222        input: &[InputModality::Text, InputModality::Image],
8223        cost_input: 0.09999999999999999,
8224        cost_output: 0.39999999999999997,
8225        cost_cache_read: 0.024999999999999998,
8226        cost_cache_write: 0.08333333333333334,
8227        context_window: 1000000,
8228        max_tokens: 8192,
8229    },
8230    ModelEntry {
8231        id: "google/gemini-2.0-flash-lite-001",
8232        name: "Google: Gemini 2.0 Flash Lite",
8233        api: Api::OpenAiCompletions,
8234        provider: "openrouter",
8235        reasoning: false,
8236        input: &[InputModality::Text, InputModality::Image],
8237        cost_input: 0.075,
8238        cost_output: 0.3,
8239        cost_cache_read: 0.0,
8240        cost_cache_write: 0.0,
8241        context_window: 1048576,
8242        max_tokens: 8192,
8243    },
8244    ModelEntry {
8245        id: "google/gemini-2.5-flash",
8246        name: "Google: Gemini 2.5 Flash",
8247        api: Api::OpenAiCompletions,
8248        provider: "openrouter",
8249        reasoning: true,
8250        input: &[InputModality::Text, InputModality::Image],
8251        cost_input: 0.3,
8252        cost_output: 2.5,
8253        cost_cache_read: 0.03,
8254        cost_cache_write: 0.08333333333333334,
8255        context_window: 1048576,
8256        max_tokens: 65535,
8257    },
8258    ModelEntry {
8259        id: "google/gemini-2.5-flash-lite",
8260        name: "Google: Gemini 2.5 Flash Lite",
8261        api: Api::OpenAiCompletions,
8262        provider: "openrouter",
8263        reasoning: true,
8264        input: &[InputModality::Text, InputModality::Image],
8265        cost_input: 0.09999999999999999,
8266        cost_output: 0.39999999999999997,
8267        cost_cache_read: 0.01,
8268        cost_cache_write: 0.08333333333333334,
8269        context_window: 1048576,
8270        max_tokens: 65535,
8271    },
8272    ModelEntry {
8273        id: "google/gemini-2.5-pro",
8274        name: "Google: Gemini 2.5 Pro",
8275        api: Api::OpenAiCompletions,
8276        provider: "openrouter",
8277        reasoning: true,
8278        input: &[InputModality::Text, InputModality::Image],
8279        cost_input: 1.25,
8280        cost_output: 10.0,
8281        cost_cache_read: 0.125,
8282        cost_cache_write: 0.375,
8283        context_window: 1048576,
8284        max_tokens: 65536,
8285    },
8286    ModelEntry {
8287        id: "google/gemini-2.5-pro-preview",
8288        name: "Google: Gemini 2.5 Pro Preview 06-05",
8289        api: Api::OpenAiCompletions,
8290        provider: "openrouter",
8291        reasoning: true,
8292        input: &[InputModality::Text, InputModality::Image],
8293        cost_input: 1.25,
8294        cost_output: 10.0,
8295        cost_cache_read: 0.125,
8296        cost_cache_write: 0.375,
8297        context_window: 1048576,
8298        max_tokens: 65536,
8299    },
8300    ModelEntry {
8301        id: "google/gemini-2.5-pro-preview-05-06",
8302        name: "Google: Gemini 2.5 Pro Preview 05-06",
8303        api: Api::OpenAiCompletions,
8304        provider: "openrouter",
8305        reasoning: true,
8306        input: &[InputModality::Text, InputModality::Image],
8307        cost_input: 1.25,
8308        cost_output: 10.0,
8309        cost_cache_read: 0.125,
8310        cost_cache_write: 0.375,
8311        context_window: 1048576,
8312        max_tokens: 65535,
8313    },
8314    ModelEntry {
8315        id: "google/gemini-3.1-flash-lite",
8316        name: "Google: Gemini 3.1 Flash Lite",
8317        api: Api::OpenAiCompletions,
8318        provider: "openrouter",
8319        reasoning: true,
8320        input: &[InputModality::Text, InputModality::Image],
8321        cost_input: 0.25,
8322        cost_output: 1.5,
8323        cost_cache_read: 0.024999999999999998,
8324        cost_cache_write: 0.08333333333333334,
8325        context_window: 1048576,
8326        max_tokens: 65536,
8327    },
8328    ModelEntry {
8329        id: "google/gemini-3.1-flash-lite-preview",
8330        name: "Google: Gemini 3.1 Flash Lite Preview",
8331        api: Api::OpenAiCompletions,
8332        provider: "openrouter",
8333        reasoning: true,
8334        input: &[InputModality::Text, InputModality::Image],
8335        cost_input: 0.25,
8336        cost_output: 1.5,
8337        cost_cache_read: 0.024999999999999998,
8338        cost_cache_write: 0.08333333333333334,
8339        context_window: 1048576,
8340        max_tokens: 65536,
8341    },
8342    ModelEntry {
8343        id: "google/gemini-3.1-pro-preview",
8344        name: "Google: Gemini 3.1 Pro Preview",
8345        api: Api::OpenAiCompletions,
8346        provider: "openrouter",
8347        reasoning: true,
8348        input: &[InputModality::Text, InputModality::Image],
8349        cost_input: 2.0,
8350        cost_output: 12.0,
8351        cost_cache_read: 0.19999999999999998,
8352        cost_cache_write: 0.375,
8353        context_window: 1048576,
8354        max_tokens: 65536,
8355    },
8356    ModelEntry {
8357        id: "google/gemini-3.1-pro-preview-customtools",
8358        name: "Google: Gemini 3.1 Pro Preview Custom Tools",
8359        api: Api::OpenAiCompletions,
8360        provider: "openrouter",
8361        reasoning: true,
8362        input: &[InputModality::Text, InputModality::Image],
8363        cost_input: 2.0,
8364        cost_output: 12.0,
8365        cost_cache_read: 0.19999999999999998,
8366        cost_cache_write: 0.375,
8367        context_window: 1048756,
8368        max_tokens: 65536,
8369    },
8370    ModelEntry {
8371        id: "google/gemini-3.5-flash",
8372        name: "Google: Gemini 3.5 Flash",
8373        api: Api::OpenAiCompletions,
8374        provider: "openrouter",
8375        reasoning: true,
8376        input: &[InputModality::Text, InputModality::Image],
8377        cost_input: 1.5,
8378        cost_output: 9.0,
8379        cost_cache_read: 0.15,
8380        cost_cache_write: 0.08333333333333334,
8381        context_window: 1048576,
8382        max_tokens: 65536,
8383    },
8384    ModelEntry {
8385        id: "google/gemma-3-12b-it",
8386        name: "Google: Gemma 3 12B",
8387        api: Api::OpenAiCompletions,
8388        provider: "openrouter",
8389        reasoning: false,
8390        input: &[InputModality::Text, InputModality::Image],
8391        cost_input: 0.04,
8392        cost_output: 0.13,
8393        cost_cache_read: 0.0,
8394        cost_cache_write: 0.0,
8395        context_window: 131072,
8396        max_tokens: 16384,
8397    },
8398    ModelEntry {
8399        id: "google/gemma-4-26b-a4b-it",
8400        name: "Google: Gemma 4 26B A4B ",
8401        api: Api::OpenAiCompletions,
8402        provider: "openrouter",
8403        reasoning: true,
8404        input: &[InputModality::Text, InputModality::Image],
8405        cost_input: 0.06,
8406        cost_output: 0.33,
8407        cost_cache_read: 0.0,
8408        cost_cache_write: 0.0,
8409        context_window: 262144,
8410        max_tokens: 4096,
8411    },
8412    ModelEntry {
8413        id: "google/gemma-4-26b-a4b-it:free",
8414        name: "Google: Gemma 4 26B A4B  (free)",
8415        api: Api::OpenAiCompletions,
8416        provider: "openrouter",
8417        reasoning: true,
8418        input: &[InputModality::Text, InputModality::Image],
8419        cost_input: 0.0,
8420        cost_output: 0.0,
8421        cost_cache_read: 0.0,
8422        cost_cache_write: 0.0,
8423        context_window: 262144,
8424        max_tokens: 32768,
8425    },
8426    ModelEntry {
8427        id: "google/gemma-4-31b-it",
8428        name: "Google: Gemma 4 31B",
8429        api: Api::OpenAiCompletions,
8430        provider: "openrouter",
8431        reasoning: true,
8432        input: &[InputModality::Text, InputModality::Image],
8433        cost_input: 0.12,
8434        cost_output: 0.37,
8435        cost_cache_read: 0.0,
8436        cost_cache_write: 0.0,
8437        context_window: 262144,
8438        max_tokens: 16384,
8439    },
8440    ModelEntry {
8441        id: "ibm-granite/granite-4.1-8b",
8442        name: "IBM: Granite 4.1 8B",
8443        api: Api::OpenAiCompletions,
8444        provider: "openrouter",
8445        reasoning: false,
8446        input: &[InputModality::Text],
8447        cost_input: 0.049999999999999996,
8448        cost_output: 0.09999999999999999,
8449        cost_cache_read: 0.049999999999999996,
8450        cost_cache_write: 0.0,
8451        context_window: 131072,
8452        max_tokens: 131072,
8453    },
8454    ModelEntry {
8455        id: "inception/mercury-2",
8456        name: "Inception: Mercury 2",
8457        api: Api::OpenAiCompletions,
8458        provider: "openrouter",
8459        reasoning: true,
8460        input: &[InputModality::Text],
8461        cost_input: 0.25,
8462        cost_output: 0.75,
8463        cost_cache_read: 0.024999999999999998,
8464        cost_cache_write: 0.0,
8465        context_window: 128000,
8466        max_tokens: 50000,
8467    },
8468    ModelEntry {
8469        id: "inclusionai/ling-2.6-1t",
8470        name: "inclusionAI: Ling-2.6-1T",
8471        api: Api::OpenAiCompletions,
8472        provider: "openrouter",
8473        reasoning: false,
8474        input: &[InputModality::Text],
8475        cost_input: 0.075,
8476        cost_output: 0.625,
8477        cost_cache_read: 0.015,
8478        cost_cache_write: 0.0,
8479        context_window: 262144,
8480        max_tokens: 32768,
8481    },
8482    ModelEntry {
8483        id: "inclusionai/ling-2.6-flash",
8484        name: "inclusionAI: Ling-2.6-flash",
8485        api: Api::OpenAiCompletions,
8486        provider: "openrouter",
8487        reasoning: false,
8488        input: &[InputModality::Text],
8489        cost_input: 0.01,
8490        cost_output: 0.03,
8491        cost_cache_read: 0.002,
8492        cost_cache_write: 0.0,
8493        context_window: 262144,
8494        max_tokens: 32768,
8495    },
8496    ModelEntry {
8497        id: "inclusionai/ring-2.6-1t",
8498        name: "inclusionAI: Ring-2.6-1T",
8499        api: Api::OpenAiCompletions,
8500        provider: "openrouter",
8501        reasoning: true,
8502        input: &[InputModality::Text],
8503        cost_input: 0.075,
8504        cost_output: 0.625,
8505        cost_cache_read: 0.015,
8506        cost_cache_write: 0.0,
8507        context_window: 262144,
8508        max_tokens: 65536,
8509    },
8510    ModelEntry {
8511        id: "meta-llama/llama-3.1-70b-instruct",
8512        name: "Meta: Llama 3.1 70B Instruct",
8513        api: Api::OpenAiCompletions,
8514        provider: "openrouter",
8515        reasoning: false,
8516        input: &[InputModality::Text],
8517        cost_input: 0.39999999999999997,
8518        cost_output: 0.39999999999999997,
8519        cost_cache_read: 0.0,
8520        cost_cache_write: 0.0,
8521        context_window: 131072,
8522        max_tokens: 16384,
8523    },
8524    ModelEntry {
8525        id: "meta-llama/llama-3.1-8b-instruct",
8526        name: "Meta: Llama 3.1 8B Instruct",
8527        api: Api::OpenAiCompletions,
8528        provider: "openrouter",
8529        reasoning: false,
8530        input: &[InputModality::Text],
8531        cost_input: 0.02,
8532        cost_output: 0.049999999999999996,
8533        cost_cache_read: 0.0,
8534        cost_cache_write: 0.0,
8535        context_window: 131072,
8536        max_tokens: 16384,
8537    },
8538    ModelEntry {
8539        id: "meta-llama/llama-3.3-70b-instruct:free",
8540        name: "Meta: Llama 3.3 70B Instruct (free)",
8541        api: Api::OpenAiCompletions,
8542        provider: "openrouter",
8543        reasoning: false,
8544        input: &[InputModality::Text],
8545        cost_input: 0.0,
8546        cost_output: 0.0,
8547        cost_cache_read: 0.0,
8548        cost_cache_write: 0.0,
8549        context_window: 131072,
8550        max_tokens: 4096,
8551    },
8552    ModelEntry {
8553        id: "meta-llama/llama-4-scout",
8554        name: "Meta: Llama 4 Scout",
8555        api: Api::OpenAiCompletions,
8556        provider: "openrouter",
8557        reasoning: false,
8558        input: &[InputModality::Text, InputModality::Image],
8559        cost_input: 0.08,
8560        cost_output: 0.3,
8561        cost_cache_read: 0.0,
8562        cost_cache_write: 0.0,
8563        context_window: 10000000,
8564        max_tokens: 16384,
8565    },
8566    ModelEntry {
8567        id: "minimax/minimax-m1",
8568        name: "MiniMax: MiniMax M1",
8569        api: Api::OpenAiCompletions,
8570        provider: "openrouter",
8571        reasoning: true,
8572        input: &[InputModality::Text],
8573        cost_input: 0.39999999999999997,
8574        cost_output: 2.2,
8575        cost_cache_read: 0.0,
8576        cost_cache_write: 0.0,
8577        context_window: 1000000,
8578        max_tokens: 40000,
8579    },
8580    ModelEntry {
8581        id: "minimax/minimax-m2",
8582        name: "MiniMax: MiniMax M2",
8583        api: Api::OpenAiCompletions,
8584        provider: "openrouter",
8585        reasoning: true,
8586        input: &[InputModality::Text],
8587        cost_input: 0.255,
8588        cost_output: 1.0,
8589        cost_cache_read: 0.03,
8590        cost_cache_write: 0.0,
8591        context_window: 204800,
8592        max_tokens: 196608,
8593    },
8594    ModelEntry {
8595        id: "minimax/minimax-m2.5",
8596        name: "MiniMax: MiniMax M2.5",
8597        api: Api::OpenAiCompletions,
8598        provider: "openrouter",
8599        reasoning: true,
8600        input: &[InputModality::Text],
8601        cost_input: 0.15,
8602        cost_output: 1.15,
8603        cost_cache_read: 0.0,
8604        cost_cache_write: 0.0,
8605        context_window: 204800,
8606        max_tokens: 196608,
8607    },
8608    ModelEntry {
8609        id: "minimax/minimax-m2.5:free",
8610        name: "MiniMax: MiniMax M2.5 (free)",
8611        api: Api::OpenAiCompletions,
8612        provider: "openrouter",
8613        reasoning: true,
8614        input: &[InputModality::Text],
8615        cost_input: 0.0,
8616        cost_output: 0.0,
8617        cost_cache_read: 0.0,
8618        cost_cache_write: 0.0,
8619        context_window: 262144,
8620        max_tokens: 8192,
8621    },
8622    ModelEntry {
8623        id: "minimax/minimax-m2.7",
8624        name: "MiniMax: MiniMax M2.7",
8625        api: Api::OpenAiCompletions,
8626        provider: "openrouter",
8627        reasoning: true,
8628        input: &[InputModality::Text],
8629        cost_input: 0.27899999999999997,
8630        cost_output: 1.2,
8631        cost_cache_read: 0.0,
8632        cost_cache_write: 0.0,
8633        context_window: 204800,
8634        max_tokens: 131072,
8635    },
8636    ModelEntry {
8637        id: "mistralai/devstral-2512",
8638        name: "Mistral: Devstral 2 2512",
8639        api: Api::OpenAiCompletions,
8640        provider: "openrouter",
8641        reasoning: false,
8642        input: &[InputModality::Text],
8643        cost_input: 0.39999999999999997,
8644        cost_output: 2.0,
8645        cost_cache_read: 0.04,
8646        cost_cache_write: 0.0,
8647        context_window: 262144,
8648        max_tokens: 4096,
8649    },
8650    ModelEntry {
8651        id: "mistralai/devstral-medium",
8652        name: "Mistral: Devstral Medium",
8653        api: Api::OpenAiCompletions,
8654        provider: "openrouter",
8655        reasoning: false,
8656        input: &[InputModality::Text],
8657        cost_input: 0.39999999999999997,
8658        cost_output: 2.0,
8659        cost_cache_read: 0.04,
8660        cost_cache_write: 0.0,
8661        context_window: 131072,
8662        max_tokens: 4096,
8663    },
8664    ModelEntry {
8665        id: "mistralai/devstral-small",
8666        name: "Mistral: Devstral Small 1.1",
8667        api: Api::OpenAiCompletions,
8668        provider: "openrouter",
8669        reasoning: false,
8670        input: &[InputModality::Text],
8671        cost_input: 0.09999999999999999,
8672        cost_output: 0.3,
8673        cost_cache_read: 0.01,
8674        cost_cache_write: 0.0,
8675        context_window: 131072,
8676        max_tokens: 4096,
8677    },
8678    ModelEntry {
8679        id: "mistralai/ministral-14b-2512",
8680        name: "Mistral: Ministral 3 14B 2512",
8681        api: Api::OpenAiCompletions,
8682        provider: "openrouter",
8683        reasoning: false,
8684        input: &[InputModality::Text, InputModality::Image],
8685        cost_input: 0.19999999999999998,
8686        cost_output: 0.19999999999999998,
8687        cost_cache_read: 0.02,
8688        cost_cache_write: 0.0,
8689        context_window: 262144,
8690        max_tokens: 4096,
8691    },
8692    ModelEntry {
8693        id: "mistralai/ministral-8b-2512",
8694        name: "Mistral: Ministral 3 8B 2512",
8695        api: Api::OpenAiCompletions,
8696        provider: "openrouter",
8697        reasoning: false,
8698        input: &[InputModality::Text, InputModality::Image],
8699        cost_input: 0.15,
8700        cost_output: 0.15,
8701        cost_cache_read: 0.015,
8702        cost_cache_write: 0.0,
8703        context_window: 262144,
8704        max_tokens: 4096,
8705    },
8706    ModelEntry {
8707        id: "mistralai/mistral-large",
8708        name: "Mistral Large",
8709        api: Api::OpenAiCompletions,
8710        provider: "openrouter",
8711        reasoning: false,
8712        input: &[InputModality::Text],
8713        cost_input: 2.0,
8714        cost_output: 6.0,
8715        cost_cache_read: 0.19999999999999998,
8716        cost_cache_write: 0.0,
8717        context_window: 128000,
8718        max_tokens: 4096,
8719    },
8720    ModelEntry {
8721        id: "mistralai/mistral-large-2407",
8722        name: "Mistral Large 2407",
8723        api: Api::OpenAiCompletions,
8724        provider: "openrouter",
8725        reasoning: false,
8726        input: &[InputModality::Text],
8727        cost_input: 2.0,
8728        cost_output: 6.0,
8729        cost_cache_read: 0.19999999999999998,
8730        cost_cache_write: 0.0,
8731        context_window: 131072,
8732        max_tokens: 4096,
8733    },
8734    ModelEntry {
8735        id: "mistralai/mistral-large-2411",
8736        name: "Mistral Large 2411",
8737        api: Api::OpenAiCompletions,
8738        provider: "openrouter",
8739        reasoning: false,
8740        input: &[InputModality::Text],
8741        cost_input: 2.0,
8742        cost_output: 6.0,
8743        cost_cache_read: 0.19999999999999998,
8744        cost_cache_write: 0.0,
8745        context_window: 131072,
8746        max_tokens: 4096,
8747    },
8748    ModelEntry {
8749        id: "mistralai/mistral-medium-3",
8750        name: "Mistral: Mistral Medium 3",
8751        api: Api::OpenAiCompletions,
8752        provider: "openrouter",
8753        reasoning: false,
8754        input: &[InputModality::Text, InputModality::Image],
8755        cost_input: 0.39999999999999997,
8756        cost_output: 2.0,
8757        cost_cache_read: 0.04,
8758        cost_cache_write: 0.0,
8759        context_window: 131072,
8760        max_tokens: 4096,
8761    },
8762    ModelEntry {
8763        id: "mistralai/mistral-medium-3-5",
8764        name: "Mistral: Mistral Medium 3.5",
8765        api: Api::OpenAiCompletions,
8766        provider: "openrouter",
8767        reasoning: true,
8768        input: &[InputModality::Text, InputModality::Image],
8769        cost_input: 1.5,
8770        cost_output: 7.5,
8771        cost_cache_read: 0.0,
8772        cost_cache_write: 0.0,
8773        context_window: 262144,
8774        max_tokens: 4096,
8775    },
8776    ModelEntry {
8777        id: "mistralai/mistral-medium-3.1",
8778        name: "Mistral: Mistral Medium 3.1",
8779        api: Api::OpenAiCompletions,
8780        provider: "openrouter",
8781        reasoning: false,
8782        input: &[InputModality::Text, InputModality::Image],
8783        cost_input: 0.39999999999999997,
8784        cost_output: 2.0,
8785        cost_cache_read: 0.04,
8786        cost_cache_write: 0.0,
8787        context_window: 131072,
8788        max_tokens: 4096,
8789    },
8790    ModelEntry {
8791        id: "mistralai/mistral-nemo",
8792        name: "Mistral: Mistral Nemo",
8793        api: Api::OpenAiCompletions,
8794        provider: "openrouter",
8795        reasoning: false,
8796        input: &[InputModality::Text],
8797        cost_input: 0.02,
8798        cost_output: 0.03,
8799        cost_cache_read: 0.0,
8800        cost_cache_write: 0.0,
8801        context_window: 131072,
8802        max_tokens: 4096,
8803    },
8804    ModelEntry {
8805        id: "mistralai/mistral-small-2603",
8806        name: "Mistral: Mistral Small 4",
8807        api: Api::OpenAiCompletions,
8808        provider: "openrouter",
8809        reasoning: true,
8810        input: &[InputModality::Text, InputModality::Image],
8811        cost_input: 0.15,
8812        cost_output: 0.6,
8813        cost_cache_read: 0.015,
8814        cost_cache_write: 0.0,
8815        context_window: 262144,
8816        max_tokens: 4096,
8817    },
8818    ModelEntry {
8819        id: "mistralai/mistral-small-3.2-24b-instruct",
8820        name: "Mistral: Mistral Small 3.2 24B",
8821        api: Api::OpenAiCompletions,
8822        provider: "openrouter",
8823        reasoning: false,
8824        input: &[InputModality::Text, InputModality::Image],
8825        cost_input: 0.075,
8826        cost_output: 0.19999999999999998,
8827        cost_cache_read: 0.0,
8828        cost_cache_write: 0.0,
8829        context_window: 128000,
8830        max_tokens: 16384,
8831    },
8832    ModelEntry {
8833        id: "mistralai/mixtral-8x22b-instruct",
8834        name: "Mistral: Mixtral 8x22B Instruct",
8835        api: Api::OpenAiCompletions,
8836        provider: "openrouter",
8837        reasoning: false,
8838        input: &[InputModality::Text],
8839        cost_input: 2.0,
8840        cost_output: 6.0,
8841        cost_cache_read: 0.19999999999999998,
8842        cost_cache_write: 0.0,
8843        context_window: 65536,
8844        max_tokens: 4096,
8845    },
8846    ModelEntry {
8847        id: "mistralai/voxtral-small-24b-2507",
8848        name: "Mistral: Voxtral Small 24B 2507",
8849        api: Api::OpenAiCompletions,
8850        provider: "openrouter",
8851        reasoning: false,
8852        input: &[InputModality::Text],
8853        cost_input: 0.09999999999999999,
8854        cost_output: 0.3,
8855        cost_cache_read: 0.01,
8856        cost_cache_write: 0.0,
8857        context_window: 32000,
8858        max_tokens: 4096,
8859    },
8860    ModelEntry {
8861        id: "moonshotai/kimi-k2-0905",
8862        name: "MoonshotAI: Kimi K2 0905",
8863        api: Api::OpenAiCompletions,
8864        provider: "openrouter",
8865        reasoning: false,
8866        input: &[InputModality::Text],
8867        cost_input: 0.6,
8868        cost_output: 2.5,
8869        cost_cache_read: 0.0,
8870        cost_cache_write: 0.0,
8871        context_window: 262144,
8872        max_tokens: 262144,
8873    },
8874    ModelEntry {
8875        id: "moonshotai/kimi-k2.6",
8876        name: "MoonshotAI: Kimi K2.6",
8877        api: Api::OpenAiCompletions,
8878        provider: "openrouter",
8879        reasoning: true,
8880        input: &[InputModality::Text, InputModality::Image],
8881        cost_input: 0.73,
8882        cost_output: 3.49,
8883        cost_cache_read: 0.25,
8884        cost_cache_write: 0.0,
8885        context_window: 262144,
8886        max_tokens: 262142,
8887    },
8888    ModelEntry {
8889        id: "moonshotai/kimi-k2.6:free",
8890        name: "MoonshotAI: Kimi K2.6 (free)",
8891        api: Api::OpenAiCompletions,
8892        provider: "openrouter",
8893        reasoning: true,
8894        input: &[InputModality::Text, InputModality::Image],
8895        cost_input: 0.0,
8896        cost_output: 0.0,
8897        cost_cache_read: 0.0,
8898        cost_cache_write: 0.0,
8899        context_window: 262144,
8900        max_tokens: 4096,
8901    },
8902    ModelEntry {
8903        id: "nex-agi/deepseek-v3.1-nex-n1",
8904        name: "Nex AGI: DeepSeek V3.1 Nex N1",
8905        api: Api::OpenAiCompletions,
8906        provider: "openrouter",
8907        reasoning: false,
8908        input: &[InputModality::Text],
8909        cost_input: 0.135,
8910        cost_output: 0.5,
8911        cost_cache_read: 0.0,
8912        cost_cache_write: 0.0,
8913        context_window: 131072,
8914        max_tokens: 163840,
8915    },
8916    ModelEntry {
8917        id: "nvidia/nemotron-3-nano-30b-a3b",
8918        name: "NVIDIA: Nemotron 3 Nano 30B A3B",
8919        api: Api::OpenAiCompletions,
8920        provider: "openrouter",
8921        reasoning: true,
8922        input: &[InputModality::Text],
8923        cost_input: 0.049999999999999996,
8924        cost_output: 0.19999999999999998,
8925        cost_cache_read: 0.0,
8926        cost_cache_write: 0.0,
8927        context_window: 262144,
8928        max_tokens: 228000,
8929    },
8930    ModelEntry {
8931        id: "nvidia/nemotron-3-nano-30b-a3b:free",
8932        name: "NVIDIA: Nemotron 3 Nano 30B A3B (free)",
8933        api: Api::OpenAiCompletions,
8934        provider: "openrouter",
8935        reasoning: true,
8936        input: &[InputModality::Text],
8937        cost_input: 0.0,
8938        cost_output: 0.0,
8939        cost_cache_read: 0.0,
8940        cost_cache_write: 0.0,
8941        context_window: 256000,
8942        max_tokens: 4096,
8943    },
8944    ModelEntry {
8945        id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
8946        name: "NVIDIA: Nemotron 3 Nano Omni (free)",
8947        api: Api::OpenAiCompletions,
8948        provider: "openrouter",
8949        reasoning: true,
8950        input: &[InputModality::Text, InputModality::Image],
8951        cost_input: 0.0,
8952        cost_output: 0.0,
8953        cost_cache_read: 0.0,
8954        cost_cache_write: 0.0,
8955        context_window: 256000,
8956        max_tokens: 65536,
8957    },
8958    ModelEntry {
8959        id: "nvidia/nemotron-3-super-120b-a12b:free",
8960        name: "NVIDIA: Nemotron 3 Super (free)",
8961        api: Api::OpenAiCompletions,
8962        provider: "openrouter",
8963        reasoning: true,
8964        input: &[InputModality::Text],
8965        cost_input: 0.0,
8966        cost_output: 0.0,
8967        cost_cache_read: 0.0,
8968        cost_cache_write: 0.0,
8969        context_window: 1000000,
8970        max_tokens: 262144,
8971    },
8972    ModelEntry {
8973        id: "nvidia/nemotron-nano-12b-v2-vl:free",
8974        name: "NVIDIA: Nemotron Nano 12B 2 VL (free)",
8975        api: Api::OpenAiCompletions,
8976        provider: "openrouter",
8977        reasoning: true,
8978        input: &[InputModality::Text, InputModality::Image],
8979        cost_input: 0.0,
8980        cost_output: 0.0,
8981        cost_cache_read: 0.0,
8982        cost_cache_write: 0.0,
8983        context_window: 128000,
8984        max_tokens: 128000,
8985    },
8986    ModelEntry {
8987        id: "nvidia/nemotron-nano-9b-v2",
8988        name: "NVIDIA: Nemotron Nano 9B V2",
8989        api: Api::OpenAiCompletions,
8990        provider: "openrouter",
8991        reasoning: true,
8992        input: &[InputModality::Text],
8993        cost_input: 0.04,
8994        cost_output: 0.16,
8995        cost_cache_read: 0.0,
8996        cost_cache_write: 0.0,
8997        context_window: 131072,
8998        max_tokens: 16384,
8999    },
9000    ModelEntry {
9001        id: "nvidia/nemotron-nano-9b-v2:free",
9002        name: "NVIDIA: Nemotron Nano 9B V2 (free)",
9003        api: Api::OpenAiCompletions,
9004        provider: "openrouter",
9005        reasoning: true,
9006        input: &[InputModality::Text],
9007        cost_input: 0.0,
9008        cost_output: 0.0,
9009        cost_cache_read: 0.0,
9010        cost_cache_write: 0.0,
9011        context_window: 128000,
9012        max_tokens: 4096,
9013    },
9014    ModelEntry {
9015        id: "openai/gpt-3.5-turbo-0613",
9016        name: "OpenAI: GPT-3.5 Turbo (older v0613)",
9017        api: Api::OpenAiCompletions,
9018        provider: "openrouter",
9019        reasoning: false,
9020        input: &[InputModality::Text],
9021        cost_input: 1.0,
9022        cost_output: 2.0,
9023        cost_cache_read: 0.0,
9024        cost_cache_write: 0.0,
9025        context_window: 4095,
9026        max_tokens: 4096,
9027    },
9028    ModelEntry {
9029        id: "openai/gpt-3.5-turbo-16k",
9030        name: "OpenAI: GPT-3.5 Turbo 16k",
9031        api: Api::OpenAiCompletions,
9032        provider: "openrouter",
9033        reasoning: false,
9034        input: &[InputModality::Text],
9035        cost_input: 3.0,
9036        cost_output: 4.0,
9037        cost_cache_read: 0.0,
9038        cost_cache_write: 0.0,
9039        context_window: 16385,
9040        max_tokens: 4096,
9041    },
9042    ModelEntry {
9043        id: "openai/gpt-4",
9044        name: "OpenAI: GPT-4",
9045        api: Api::OpenAiCompletions,
9046        provider: "openrouter",
9047        reasoning: false,
9048        input: &[InputModality::Text],
9049        cost_input: 30.0,
9050        cost_output: 60.0,
9051        cost_cache_read: 0.0,
9052        cost_cache_write: 0.0,
9053        context_window: 8191,
9054        max_tokens: 4096,
9055    },
9056    ModelEntry {
9057        id: "openai/gpt-4-1106-preview",
9058        name: "OpenAI: GPT-4 Turbo (older v1106)",
9059        api: Api::OpenAiCompletions,
9060        provider: "openrouter",
9061        reasoning: false,
9062        input: &[InputModality::Text],
9063        cost_input: 10.0,
9064        cost_output: 30.0,
9065        cost_cache_read: 0.0,
9066        cost_cache_write: 0.0,
9067        context_window: 128000,
9068        max_tokens: 4096,
9069    },
9070    ModelEntry {
9071        id: "openai/gpt-4-turbo",
9072        name: "OpenAI: GPT-4 Turbo",
9073        api: Api::OpenAiCompletions,
9074        provider: "openrouter",
9075        reasoning: false,
9076        input: &[InputModality::Text, InputModality::Image],
9077        cost_input: 10.0,
9078        cost_output: 30.0,
9079        cost_cache_read: 0.0,
9080        cost_cache_write: 0.0,
9081        context_window: 128000,
9082        max_tokens: 4096,
9083    },
9084    ModelEntry {
9085        id: "openai/gpt-4-turbo-preview",
9086        name: "OpenAI: GPT-4 Turbo Preview",
9087        api: Api::OpenAiCompletions,
9088        provider: "openrouter",
9089        reasoning: false,
9090        input: &[InputModality::Text],
9091        cost_input: 10.0,
9092        cost_output: 30.0,
9093        cost_cache_read: 0.0,
9094        cost_cache_write: 0.0,
9095        context_window: 128000,
9096        max_tokens: 4096,
9097    },
9098    ModelEntry {
9099        id: "openai/gpt-4.1",
9100        name: "OpenAI: GPT-4.1",
9101        api: Api::OpenAiCompletions,
9102        provider: "openrouter",
9103        reasoning: false,
9104        input: &[InputModality::Text, InputModality::Image],
9105        cost_input: 2.0,
9106        cost_output: 8.0,
9107        cost_cache_read: 0.5,
9108        cost_cache_write: 0.0,
9109        context_window: 1047576,
9110        max_tokens: 4096,
9111    },
9112    ModelEntry {
9113        id: "openai/gpt-4.1-nano",
9114        name: "OpenAI: GPT-4.1 Nano",
9115        api: Api::OpenAiCompletions,
9116        provider: "openrouter",
9117        reasoning: false,
9118        input: &[InputModality::Text, InputModality::Image],
9119        cost_input: 0.09999999999999999,
9120        cost_output: 0.39999999999999997,
9121        cost_cache_read: 0.024999999999999998,
9122        cost_cache_write: 0.0,
9123        context_window: 1047576,
9124        max_tokens: 32768,
9125    },
9126    ModelEntry {
9127        id: "openai/gpt-4o",
9128        name: "OpenAI: GPT-4o",
9129        api: Api::OpenAiCompletions,
9130        provider: "openrouter",
9131        reasoning: false,
9132        input: &[InputModality::Text, InputModality::Image],
9133        cost_input: 2.5,
9134        cost_output: 10.0,
9135        cost_cache_read: 0.0,
9136        cost_cache_write: 0.0,
9137        context_window: 128000,
9138        max_tokens: 16384,
9139    },
9140    ModelEntry {
9141        id: "openai/gpt-4o-2024-05-13",
9142        name: "OpenAI: GPT-4o (2024-05-13)",
9143        api: Api::OpenAiCompletions,
9144        provider: "openrouter",
9145        reasoning: false,
9146        input: &[InputModality::Text, InputModality::Image],
9147        cost_input: 5.0,
9148        cost_output: 15.0,
9149        cost_cache_read: 0.0,
9150        cost_cache_write: 0.0,
9151        context_window: 128000,
9152        max_tokens: 4096,
9153    },
9154    ModelEntry {
9155        id: "openai/gpt-4o-2024-11-20",
9156        name: "OpenAI: GPT-4o (2024-11-20)",
9157        api: Api::OpenAiCompletions,
9158        provider: "openrouter",
9159        reasoning: false,
9160        input: &[InputModality::Text, InputModality::Image],
9161        cost_input: 2.5,
9162        cost_output: 10.0,
9163        cost_cache_read: 1.25,
9164        cost_cache_write: 0.0,
9165        context_window: 128000,
9166        max_tokens: 16384,
9167    },
9168    ModelEntry {
9169        id: "openai/gpt-4o-audio-preview",
9170        name: "OpenAI: GPT-4o Audio",
9171        api: Api::OpenAiCompletions,
9172        provider: "openrouter",
9173        reasoning: false,
9174        input: &[InputModality::Text],
9175        cost_input: 2.5,
9176        cost_output: 10.0,
9177        cost_cache_read: 0.0,
9178        cost_cache_write: 0.0,
9179        context_window: 128000,
9180        max_tokens: 16384,
9181    },
9182    ModelEntry {
9183        id: "openai/gpt-4o-mini",
9184        name: "OpenAI: GPT-4o-mini",
9185        api: Api::OpenAiCompletions,
9186        provider: "openrouter",
9187        reasoning: false,
9188        input: &[InputModality::Text, InputModality::Image],
9189        cost_input: 0.15,
9190        cost_output: 0.6,
9191        cost_cache_read: 0.075,
9192        cost_cache_write: 0.0,
9193        context_window: 128000,
9194        max_tokens: 16384,
9195    },
9196    ModelEntry {
9197        id: "openai/gpt-4o-mini-2024-07-18",
9198        name: "OpenAI: GPT-4o-mini (2024-07-18)",
9199        api: Api::OpenAiCompletions,
9200        provider: "openrouter",
9201        reasoning: false,
9202        input: &[InputModality::Text, InputModality::Image],
9203        cost_input: 0.15,
9204        cost_output: 0.6,
9205        cost_cache_read: 0.075,
9206        cost_cache_write: 0.0,
9207        context_window: 128000,
9208        max_tokens: 16384,
9209    },
9210    ModelEntry {
9211        id: "openai/gpt-5-codex",
9212        name: "OpenAI: GPT-5 Codex",
9213        api: Api::OpenAiCompletions,
9214        provider: "openrouter",
9215        reasoning: true,
9216        input: &[InputModality::Text, InputModality::Image],
9217        cost_input: 1.25,
9218        cost_output: 10.0,
9219        cost_cache_read: 0.125,
9220        cost_cache_write: 0.0,
9221        context_window: 400000,
9222        max_tokens: 128000,
9223    },
9224    ModelEntry {
9225        id: "openai/gpt-5-mini",
9226        name: "OpenAI: GPT-5 Mini",
9227        api: Api::OpenAiCompletions,
9228        provider: "openrouter",
9229        reasoning: true,
9230        input: &[InputModality::Text, InputModality::Image],
9231        cost_input: 0.25,
9232        cost_output: 2.0,
9233        cost_cache_read: 0.024999999999999998,
9234        cost_cache_write: 0.0,
9235        context_window: 400000,
9236        max_tokens: 128000,
9237    },
9238    ModelEntry {
9239        id: "openai/gpt-5-nano",
9240        name: "OpenAI: GPT-5 Nano",
9241        api: Api::OpenAiCompletions,
9242        provider: "openrouter",
9243        reasoning: true,
9244        input: &[InputModality::Text, InputModality::Image],
9245        cost_input: 0.049999999999999996,
9246        cost_output: 0.39999999999999997,
9247        cost_cache_read: 0.01,
9248        cost_cache_write: 0.0,
9249        context_window: 400000,
9250        max_tokens: 4096,
9251    },
9252    ModelEntry {
9253        id: "openai/gpt-5-pro",
9254        name: "OpenAI: GPT-5 Pro",
9255        api: Api::OpenAiCompletions,
9256        provider: "openrouter",
9257        reasoning: true,
9258        input: &[InputModality::Text, InputModality::Image],
9259        cost_input: 15.0,
9260        cost_output: 120.0,
9261        cost_cache_read: 0.0,
9262        cost_cache_write: 0.0,
9263        context_window: 400000,
9264        max_tokens: 128000,
9265    },
9266    ModelEntry {
9267        id: "openai/gpt-5.1-chat",
9268        name: "OpenAI: GPT-5.1 Chat",
9269        api: Api::OpenAiCompletions,
9270        provider: "openrouter",
9271        reasoning: false,
9272        input: &[InputModality::Text, InputModality::Image],
9273        cost_input: 1.25,
9274        cost_output: 10.0,
9275        cost_cache_read: 0.13,
9276        cost_cache_write: 0.0,
9277        context_window: 128000,
9278        max_tokens: 32000,
9279    },
9280    ModelEntry {
9281        id: "openai/gpt-5.1-codex",
9282        name: "OpenAI: GPT-5.1-Codex",
9283        api: Api::OpenAiCompletions,
9284        provider: "openrouter",
9285        reasoning: true,
9286        input: &[InputModality::Text, InputModality::Image],
9287        cost_input: 1.25,
9288        cost_output: 10.0,
9289        cost_cache_read: 0.13,
9290        cost_cache_write: 0.0,
9291        context_window: 400000,
9292        max_tokens: 128000,
9293    },
9294    ModelEntry {
9295        id: "openai/gpt-5.2",
9296        name: "OpenAI: GPT-5.2",
9297        api: Api::OpenAiCompletions,
9298        provider: "openrouter",
9299        reasoning: true,
9300        input: &[InputModality::Text, InputModality::Image],
9301        cost_input: 1.75,
9302        cost_output: 14.0,
9303        cost_cache_read: 0.175,
9304        cost_cache_write: 0.0,
9305        context_window: 400000,
9306        max_tokens: 128000,
9307    },
9308    ModelEntry {
9309        id: "openai/gpt-5.2-codex",
9310        name: "OpenAI: GPT-5.2-Codex",
9311        api: Api::OpenAiCompletions,
9312        provider: "openrouter",
9313        reasoning: true,
9314        input: &[InputModality::Text, InputModality::Image],
9315        cost_input: 1.75,
9316        cost_output: 14.0,
9317        cost_cache_read: 0.175,
9318        cost_cache_write: 0.0,
9319        context_window: 400000,
9320        max_tokens: 128000,
9321    },
9322    ModelEntry {
9323        id: "openai/gpt-5.2-pro",
9324        name: "OpenAI: GPT-5.2 Pro",
9325        api: Api::OpenAiCompletions,
9326        provider: "openrouter",
9327        reasoning: true,
9328        input: &[InputModality::Text, InputModality::Image],
9329        cost_input: 21.0,
9330        cost_output: 168.0,
9331        cost_cache_read: 0.0,
9332        cost_cache_write: 0.0,
9333        context_window: 400000,
9334        max_tokens: 128000,
9335    },
9336    ModelEntry {
9337        id: "openai/gpt-5.3-codex",
9338        name: "OpenAI: GPT-5.3-Codex",
9339        api: Api::OpenAiCompletions,
9340        provider: "openrouter",
9341        reasoning: true,
9342        input: &[InputModality::Text, InputModality::Image],
9343        cost_input: 1.75,
9344        cost_output: 14.0,
9345        cost_cache_read: 0.175,
9346        cost_cache_write: 0.0,
9347        context_window: 400000,
9348        max_tokens: 128000,
9349    },
9350    ModelEntry {
9351        id: "openai/gpt-5.4",
9352        name: "OpenAI: GPT-5.4",
9353        api: Api::OpenAiCompletions,
9354        provider: "openrouter",
9355        reasoning: true,
9356        input: &[InputModality::Text, InputModality::Image],
9357        cost_input: 2.5,
9358        cost_output: 15.0,
9359        cost_cache_read: 0.25,
9360        cost_cache_write: 0.0,
9361        context_window: 1050000,
9362        max_tokens: 128000,
9363    },
9364    ModelEntry {
9365        id: "openai/gpt-5.4-pro",
9366        name: "OpenAI: GPT-5.4 Pro",
9367        api: Api::OpenAiCompletions,
9368        provider: "openrouter",
9369        reasoning: true,
9370        input: &[InputModality::Text, InputModality::Image],
9371        cost_input: 30.0,
9372        cost_output: 180.0,
9373        cost_cache_read: 0.0,
9374        cost_cache_write: 0.0,
9375        context_window: 1050000,
9376        max_tokens: 128000,
9377    },
9378    ModelEntry {
9379        id: "openai/gpt-5.5",
9380        name: "OpenAI: GPT-5.5",
9381        api: Api::OpenAiCompletions,
9382        provider: "openrouter",
9383        reasoning: true,
9384        input: &[InputModality::Text, InputModality::Image],
9385        cost_input: 5.0,
9386        cost_output: 30.0,
9387        cost_cache_read: 0.5,
9388        cost_cache_write: 0.0,
9389        context_window: 1050000,
9390        max_tokens: 128000,
9391    },
9392    ModelEntry {
9393        id: "openai/gpt-5.5-pro",
9394        name: "OpenAI: GPT-5.5 Pro",
9395        api: Api::OpenAiCompletions,
9396        provider: "openrouter",
9397        reasoning: true,
9398        input: &[InputModality::Text, InputModality::Image],
9399        cost_input: 30.0,
9400        cost_output: 180.0,
9401        cost_cache_read: 0.0,
9402        cost_cache_write: 0.0,
9403        context_window: 1050000,
9404        max_tokens: 128000,
9405    },
9406    ModelEntry {
9407        id: "openai/gpt-audio",
9408        name: "OpenAI: GPT Audio",
9409        api: Api::OpenAiCompletions,
9410        provider: "openrouter",
9411        reasoning: false,
9412        input: &[InputModality::Text],
9413        cost_input: 2.5,
9414        cost_output: 10.0,
9415        cost_cache_read: 0.0,
9416        cost_cache_write: 0.0,
9417        context_window: 128000,
9418        max_tokens: 16384,
9419    },
9420    ModelEntry {
9421        id: "openai/gpt-chat-latest",
9422        name: "OpenAI: GPT Chat Latest",
9423        api: Api::OpenAiCompletions,
9424        provider: "openrouter",
9425        reasoning: false,
9426        input: &[InputModality::Text, InputModality::Image],
9427        cost_input: 5.0,
9428        cost_output: 30.0,
9429        cost_cache_read: 0.5,
9430        cost_cache_write: 0.0,
9431        context_window: 400000,
9432        max_tokens: 128000,
9433    },
9434    ModelEntry {
9435        id: "openai/gpt-oss-120b:free",
9436        name: "OpenAI: gpt-oss-120b (free)",
9437        api: Api::OpenAiCompletions,
9438        provider: "openrouter",
9439        reasoning: true,
9440        input: &[InputModality::Text],
9441        cost_input: 0.0,
9442        cost_output: 0.0,
9443        cost_cache_read: 0.0,
9444        cost_cache_write: 0.0,
9445        context_window: 131072,
9446        max_tokens: 131072,
9447    },
9448    ModelEntry {
9449        id: "openai/o1",
9450        name: "OpenAI: o1",
9451        api: Api::OpenAiCompletions,
9452        provider: "openrouter",
9453        reasoning: true,
9454        input: &[InputModality::Text, InputModality::Image],
9455        cost_input: 15.0,
9456        cost_output: 60.0,
9457        cost_cache_read: 7.5,
9458        cost_cache_write: 0.0,
9459        context_window: 200000,
9460        max_tokens: 100000,
9461    },
9462    ModelEntry {
9463        id: "openai/o3",
9464        name: "OpenAI: o3",
9465        api: Api::OpenAiCompletions,
9466        provider: "openrouter",
9467        reasoning: true,
9468        input: &[InputModality::Text, InputModality::Image],
9469        cost_input: 2.0,
9470        cost_output: 8.0,
9471        cost_cache_read: 0.5,
9472        cost_cache_write: 0.0,
9473        context_window: 200000,
9474        max_tokens: 100000,
9475    },
9476    ModelEntry {
9477        id: "openai/o3-deep-research",
9478        name: "OpenAI: o3 Deep Research",
9479        api: Api::OpenAiCompletions,
9480        provider: "openrouter",
9481        reasoning: true,
9482        input: &[InputModality::Text, InputModality::Image],
9483        cost_input: 10.0,
9484        cost_output: 40.0,
9485        cost_cache_read: 2.5,
9486        cost_cache_write: 0.0,
9487        context_window: 200000,
9488        max_tokens: 100000,
9489    },
9490    ModelEntry {
9491        id: "openai/o3-mini-high",
9492        name: "OpenAI: o3 Mini High",
9493        api: Api::OpenAiCompletions,
9494        provider: "openrouter",
9495        reasoning: true,
9496        input: &[InputModality::Text],
9497        cost_input: 1.1,
9498        cost_output: 4.4,
9499        cost_cache_read: 0.55,
9500        cost_cache_write: 0.0,
9501        context_window: 200000,
9502        max_tokens: 100000,
9503    },
9504    ModelEntry {
9505        id: "openai/o3-pro",
9506        name: "OpenAI: o3 Pro",
9507        api: Api::OpenAiCompletions,
9508        provider: "openrouter",
9509        reasoning: true,
9510        input: &[InputModality::Text, InputModality::Image],
9511        cost_input: 20.0,
9512        cost_output: 80.0,
9513        cost_cache_read: 0.0,
9514        cost_cache_write: 0.0,
9515        context_window: 200000,
9516        max_tokens: 100000,
9517    },
9518    ModelEntry {
9519        id: "openai/o4-mini",
9520        name: "OpenAI: o4 Mini",
9521        api: Api::OpenAiCompletions,
9522        provider: "openrouter",
9523        reasoning: true,
9524        input: &[InputModality::Text, InputModality::Image],
9525        cost_input: 1.1,
9526        cost_output: 4.4,
9527        cost_cache_read: 0.275,
9528        cost_cache_write: 0.0,
9529        context_window: 200000,
9530        max_tokens: 100000,
9531    },
9532    ModelEntry {
9533        id: "openai/o4-mini-high",
9534        name: "OpenAI: o4 Mini High",
9535        api: Api::OpenAiCompletions,
9536        provider: "openrouter",
9537        reasoning: true,
9538        input: &[InputModality::Text, InputModality::Image],
9539        cost_input: 1.1,
9540        cost_output: 4.4,
9541        cost_cache_read: 0.275,
9542        cost_cache_write: 0.0,
9543        context_window: 200000,
9544        max_tokens: 100000,
9545    },
9546    ModelEntry {
9547        id: "openrouter/auto",
9548        name: "Auto Router",
9549        api: Api::OpenAiCompletions,
9550        provider: "openrouter",
9551        reasoning: true,
9552        input: &[InputModality::Text, InputModality::Image],
9553        cost_input: -1000000.0,
9554        cost_output: -1000000.0,
9555        cost_cache_read: 0.0,
9556        cost_cache_write: 0.0,
9557        context_window: 2000000,
9558        max_tokens: 4096,
9559    },
9560    ModelEntry {
9561        id: "openrouter/free",
9562        name: "Free Models Router",
9563        api: Api::OpenAiCompletions,
9564        provider: "openrouter",
9565        reasoning: true,
9566        input: &[InputModality::Text, InputModality::Image],
9567        cost_input: 0.0,
9568        cost_output: 0.0,
9569        cost_cache_read: 0.0,
9570        cost_cache_write: 0.0,
9571        context_window: 200000,
9572        max_tokens: 4096,
9573    },
9574    ModelEntry {
9575        id: "openrouter/owl-alpha",
9576        name: "Owl Alpha",
9577        api: Api::OpenAiCompletions,
9578        provider: "openrouter",
9579        reasoning: false,
9580        input: &[InputModality::Text],
9581        cost_input: 0.0,
9582        cost_output: 0.0,
9583        cost_cache_read: 0.0,
9584        cost_cache_write: 0.0,
9585        context_window: 1048756,
9586        max_tokens: 262144,
9587    },
9588    ModelEntry {
9589        id: "poolside/laguna-xs.2:free",
9590        name: "Poolside: Laguna XS.2 (free)",
9591        api: Api::OpenAiCompletions,
9592        provider: "openrouter",
9593        reasoning: true,
9594        input: &[InputModality::Text],
9595        cost_input: 0.0,
9596        cost_output: 0.0,
9597        cost_cache_read: 0.0,
9598        cost_cache_write: 0.0,
9599        context_window: 262144,
9600        max_tokens: 32768,
9601    },
9602    ModelEntry {
9603        id: "prime-intellect/intellect-3",
9604        name: "Prime Intellect: INTELLECT-3",
9605        api: Api::OpenAiCompletions,
9606        provider: "openrouter",
9607        reasoning: true,
9608        input: &[InputModality::Text],
9609        cost_input: 0.19999999999999998,
9610        cost_output: 1.1,
9611        cost_cache_read: 0.0,
9612        cost_cache_write: 0.0,
9613        context_window: 131072,
9614        max_tokens: 131072,
9615    },
9616    ModelEntry {
9617        id: "qwen/qwen-2.5-72b-instruct",
9618        name: "Qwen2.5 72B Instruct",
9619        api: Api::OpenAiCompletions,
9620        provider: "openrouter",
9621        reasoning: false,
9622        input: &[InputModality::Text],
9623        cost_input: 0.36,
9624        cost_output: 0.39999999999999997,
9625        cost_cache_read: 0.0,
9626        cost_cache_write: 0.0,
9627        context_window: 131072,
9628        max_tokens: 16384,
9629    },
9630    ModelEntry {
9631        id: "qwen/qwen-2.5-7b-instruct",
9632        name: "Qwen: Qwen2.5 7B Instruct",
9633        api: Api::OpenAiCompletions,
9634        provider: "openrouter",
9635        reasoning: false,
9636        input: &[InputModality::Text],
9637        cost_input: 0.04,
9638        cost_output: 0.09999999999999999,
9639        cost_cache_read: 0.0,
9640        cost_cache_write: 0.0,
9641        context_window: 131072,
9642        max_tokens: 32768,
9643    },
9644    ModelEntry {
9645        id: "qwen/qwen-plus",
9646        name: "Qwen: Qwen-Plus",
9647        api: Api::OpenAiCompletions,
9648        provider: "openrouter",
9649        reasoning: false,
9650        input: &[InputModality::Text],
9651        cost_input: 0.26,
9652        cost_output: 0.78,
9653        cost_cache_read: 0.052000000000000005,
9654        cost_cache_write: 0.325,
9655        context_window: 1000000,
9656        max_tokens: 32768,
9657    },
9658    ModelEntry {
9659        id: "qwen/qwen-plus-2025-07-28",
9660        name: "Qwen: Qwen Plus 0728",
9661        api: Api::OpenAiCompletions,
9662        provider: "openrouter",
9663        reasoning: false,
9664        input: &[InputModality::Text],
9665        cost_input: 0.26,
9666        cost_output: 0.78,
9667        cost_cache_read: 0.0,
9668        cost_cache_write: 0.0,
9669        context_window: 1000000,
9670        max_tokens: 32768,
9671    },
9672    ModelEntry {
9673        id: "qwen/qwen-plus-2025-07-28:thinking",
9674        name: "Qwen: Qwen Plus 0728 (thinking)",
9675        api: Api::OpenAiCompletions,
9676        provider: "openrouter",
9677        reasoning: true,
9678        input: &[InputModality::Text],
9679        cost_input: 0.26,
9680        cost_output: 0.78,
9681        cost_cache_read: 0.0,
9682        cost_cache_write: 0.325,
9683        context_window: 1000000,
9684        max_tokens: 32768,
9685    },
9686    ModelEntry {
9687        id: "qwen/qwen3-14b",
9688        name: "Qwen: Qwen3 14B",
9689        api: Api::OpenAiCompletions,
9690        provider: "openrouter",
9691        reasoning: true,
9692        input: &[InputModality::Text],
9693        cost_input: 0.09999999999999999,
9694        cost_output: 0.24,
9695        cost_cache_read: 0.0,
9696        cost_cache_write: 0.0,
9697        context_window: 131702,
9698        max_tokens: 40960,
9699    },
9700    ModelEntry {
9701        id: "qwen/qwen3-235b-a22b",
9702        name: "Qwen: Qwen3 235B A22B",
9703        api: Api::OpenAiCompletions,
9704        provider: "openrouter",
9705        reasoning: true,
9706        input: &[InputModality::Text],
9707        cost_input: 0.45499999999999996,
9708        cost_output: 1.8199999999999998,
9709        cost_cache_read: 0.0,
9710        cost_cache_write: 0.0,
9711        context_window: 131072,
9712        max_tokens: 8192,
9713    },
9714    ModelEntry {
9715        id: "qwen/qwen3-235b-a22b-2507",
9716        name: "Qwen: Qwen3 235B A22B Instruct 2507",
9717        api: Api::OpenAiCompletions,
9718        provider: "openrouter",
9719        reasoning: false,
9720        input: &[InputModality::Text],
9721        cost_input: 0.071,
9722        cost_output: 0.09999999999999999,
9723        cost_cache_read: 0.0,
9724        cost_cache_write: 0.0,
9725        context_window: 262144,
9726        max_tokens: 16384,
9727    },
9728    ModelEntry {
9729        id: "qwen/qwen3-30b-a3b",
9730        name: "Qwen: Qwen3 30B A3B",
9731        api: Api::OpenAiCompletions,
9732        provider: "openrouter",
9733        reasoning: true,
9734        input: &[InputModality::Text],
9735        cost_input: 0.09,
9736        cost_output: 0.44999999999999996,
9737        cost_cache_read: 0.0,
9738        cost_cache_write: 0.0,
9739        context_window: 131072,
9740        max_tokens: 20000,
9741    },
9742    ModelEntry {
9743        id: "qwen/qwen3-30b-a3b-instruct-2507",
9744        name: "Qwen: Qwen3 30B A3B Instruct 2507",
9745        api: Api::OpenAiCompletions,
9746        provider: "openrouter",
9747        reasoning: false,
9748        input: &[InputModality::Text],
9749        cost_input: 0.09,
9750        cost_output: 0.3,
9751        cost_cache_read: 0.0,
9752        cost_cache_write: 0.0,
9753        context_window: 262144,
9754        max_tokens: 262144,
9755    },
9756    ModelEntry {
9757        id: "qwen/qwen3-30b-a3b-thinking-2507",
9758        name: "Qwen: Qwen3 30B A3B Thinking 2507",
9759        api: Api::OpenAiCompletions,
9760        provider: "openrouter",
9761        reasoning: true,
9762        input: &[InputModality::Text],
9763        cost_input: 0.08,
9764        cost_output: 0.39999999999999997,
9765        cost_cache_read: 0.08,
9766        cost_cache_write: 0.0,
9767        context_window: 131072,
9768        max_tokens: 131072,
9769    },
9770    ModelEntry {
9771        id: "qwen/qwen3-8b",
9772        name: "Qwen: Qwen3 8B",
9773        api: Api::OpenAiCompletions,
9774        provider: "openrouter",
9775        reasoning: true,
9776        input: &[InputModality::Text],
9777        cost_input: 0.049999999999999996,
9778        cost_output: 0.39999999999999997,
9779        cost_cache_read: 0.049999999999999996,
9780        cost_cache_write: 0.0,
9781        context_window: 131072,
9782        max_tokens: 8192,
9783    },
9784    ModelEntry {
9785        id: "qwen/qwen3-coder",
9786        name: "Qwen: Qwen3 Coder 480B A35B",
9787        api: Api::OpenAiCompletions,
9788        provider: "openrouter",
9789        reasoning: false,
9790        input: &[InputModality::Text],
9791        cost_input: 0.22,
9792        cost_output: 1.7999999999999998,
9793        cost_cache_read: 0.0,
9794        cost_cache_write: 0.0,
9795        context_window: 1048576,
9796        max_tokens: 65536,
9797    },
9798    ModelEntry {
9799        id: "qwen/qwen3-coder-30b-a3b-instruct",
9800        name: "Qwen: Qwen3 Coder 30B A3B Instruct",
9801        api: Api::OpenAiCompletions,
9802        provider: "openrouter",
9803        reasoning: false,
9804        input: &[InputModality::Text],
9805        cost_input: 0.07,
9806        cost_output: 0.27,
9807        cost_cache_read: 0.0,
9808        cost_cache_write: 0.0,
9809        context_window: 160000,
9810        max_tokens: 32768,
9811    },
9812    ModelEntry {
9813        id: "qwen/qwen3-coder-flash",
9814        name: "Qwen: Qwen3 Coder Flash",
9815        api: Api::OpenAiCompletions,
9816        provider: "openrouter",
9817        reasoning: false,
9818        input: &[InputModality::Text],
9819        cost_input: 0.195,
9820        cost_output: 0.975,
9821        cost_cache_read: 0.039,
9822        cost_cache_write: 0.24375,
9823        context_window: 1000000,
9824        max_tokens: 65536,
9825    },
9826    ModelEntry {
9827        id: "qwen/qwen3-coder-plus",
9828        name: "Qwen: Qwen3 Coder Plus",
9829        api: Api::OpenAiCompletions,
9830        provider: "openrouter",
9831        reasoning: false,
9832        input: &[InputModality::Text],
9833        cost_input: 0.65,
9834        cost_output: 3.25,
9835        cost_cache_read: 0.13,
9836        cost_cache_write: 0.8125,
9837        context_window: 1000000,
9838        max_tokens: 65536,
9839    },
9840    ModelEntry {
9841        id: "qwen/qwen3-coder:free",
9842        name: "Qwen: Qwen3 Coder 480B A35B (free)",
9843        api: Api::OpenAiCompletions,
9844        provider: "openrouter",
9845        reasoning: false,
9846        input: &[InputModality::Text],
9847        cost_input: 0.0,
9848        cost_output: 0.0,
9849        cost_cache_read: 0.0,
9850        cost_cache_write: 0.0,
9851        context_window: 1048576,
9852        max_tokens: 262000,
9853    },
9854    ModelEntry {
9855        id: "qwen/qwen3-max",
9856        name: "Qwen: Qwen3 Max",
9857        api: Api::OpenAiCompletions,
9858        provider: "openrouter",
9859        reasoning: false,
9860        input: &[InputModality::Text],
9861        cost_input: 0.78,
9862        cost_output: 3.9,
9863        cost_cache_read: 0.156,
9864        cost_cache_write: 0.975,
9865        context_window: 262144,
9866        max_tokens: 32768,
9867    },
9868    ModelEntry {
9869        id: "qwen/qwen3-next-80b-a3b-instruct",
9870        name: "Qwen: Qwen3 Next 80B A3B Instruct",
9871        api: Api::OpenAiCompletions,
9872        provider: "openrouter",
9873        reasoning: false,
9874        input: &[InputModality::Text],
9875        cost_input: 0.09,
9876        cost_output: 1.1,
9877        cost_cache_read: 0.0,
9878        cost_cache_write: 0.0,
9879        context_window: 262144,
9880        max_tokens: 16384,
9881    },
9882    ModelEntry {
9883        id: "qwen/qwen3-next-80b-a3b-instruct:free",
9884        name: "Qwen: Qwen3 Next 80B A3B Instruct (free)",
9885        api: Api::OpenAiCompletions,
9886        provider: "openrouter",
9887        reasoning: false,
9888        input: &[InputModality::Text],
9889        cost_input: 0.0,
9890        cost_output: 0.0,
9891        cost_cache_read: 0.0,
9892        cost_cache_write: 0.0,
9893        context_window: 262144,
9894        max_tokens: 4096,
9895    },
9896    ModelEntry {
9897        id: "qwen/qwen3-next-80b-a3b-thinking",
9898        name: "Qwen: Qwen3 Next 80B A3B Thinking",
9899        api: Api::OpenAiCompletions,
9900        provider: "openrouter",
9901        reasoning: true,
9902        input: &[InputModality::Text],
9903        cost_input: 0.0975,
9904        cost_output: 0.78,
9905        cost_cache_read: 0.0,
9906        cost_cache_write: 0.0,
9907        context_window: 262144,
9908        max_tokens: 32768,
9909    },
9910    ModelEntry {
9911        id: "qwen/qwen3-vl-235b-a22b-instruct",
9912        name: "Qwen: Qwen3 VL 235B A22B Instruct",
9913        api: Api::OpenAiCompletions,
9914        provider: "openrouter",
9915        reasoning: false,
9916        input: &[InputModality::Text, InputModality::Image],
9917        cost_input: 0.19999999999999998,
9918        cost_output: 0.88,
9919        cost_cache_read: 0.11,
9920        cost_cache_write: 0.0,
9921        context_window: 262144,
9922        max_tokens: 16384,
9923    },
9924    ModelEntry {
9925        id: "qwen/qwen3-vl-30b-a3b-instruct",
9926        name: "Qwen: Qwen3 VL 30B A3B Instruct",
9927        api: Api::OpenAiCompletions,
9928        provider: "openrouter",
9929        reasoning: false,
9930        input: &[InputModality::Text, InputModality::Image],
9931        cost_input: 0.13,
9932        cost_output: 0.52,
9933        cost_cache_read: 0.0,
9934        cost_cache_write: 0.0,
9935        context_window: 262144,
9936        max_tokens: 32768,
9937    },
9938    ModelEntry {
9939        id: "qwen/qwen3-vl-30b-a3b-thinking",
9940        name: "Qwen: Qwen3 VL 30B A3B Thinking",
9941        api: Api::OpenAiCompletions,
9942        provider: "openrouter",
9943        reasoning: true,
9944        input: &[InputModality::Text, InputModality::Image],
9945        cost_input: 0.13,
9946        cost_output: 1.56,
9947        cost_cache_read: 0.0,
9948        cost_cache_write: 0.0,
9949        context_window: 131072,
9950        max_tokens: 32768,
9951    },
9952    ModelEntry {
9953        id: "qwen/qwen3-vl-32b-instruct",
9954        name: "Qwen: Qwen3 VL 32B Instruct",
9955        api: Api::OpenAiCompletions,
9956        provider: "openrouter",
9957        reasoning: false,
9958        input: &[InputModality::Text, InputModality::Image],
9959        cost_input: 0.10400000000000001,
9960        cost_output: 0.41600000000000004,
9961        cost_cache_read: 0.0,
9962        cost_cache_write: 0.0,
9963        context_window: 262144,
9964        max_tokens: 32768,
9965    },
9966    ModelEntry {
9967        id: "qwen/qwen3-vl-8b-thinking",
9968        name: "Qwen: Qwen3 VL 8B Thinking",
9969        api: Api::OpenAiCompletions,
9970        provider: "openrouter",
9971        reasoning: true,
9972        input: &[InputModality::Text, InputModality::Image],
9973        cost_input: 0.117,
9974        cost_output: 1.365,
9975        cost_cache_read: 0.0,
9976        cost_cache_write: 0.0,
9977        context_window: 256000,
9978        max_tokens: 32768,
9979    },
9980    ModelEntry {
9981        id: "qwen/qwen3.5-122b-a10b",
9982        name: "Qwen: Qwen3.5-122B-A10B",
9983        api: Api::OpenAiCompletions,
9984        provider: "openrouter",
9985        reasoning: true,
9986        input: &[InputModality::Text, InputModality::Image],
9987        cost_input: 0.26,
9988        cost_output: 2.08,
9989        cost_cache_read: 0.0,
9990        cost_cache_write: 0.0,
9991        context_window: 262144,
9992        max_tokens: 262144,
9993    },
9994    ModelEntry {
9995        id: "qwen/qwen3.5-27b",
9996        name: "Qwen: Qwen3.5-27B",
9997        api: Api::OpenAiCompletions,
9998        provider: "openrouter",
9999        reasoning: true,
10000        input: &[InputModality::Text, InputModality::Image],
10001        cost_input: 0.195,
10002        cost_output: 1.56,
10003        cost_cache_read: 0.0,
10004        cost_cache_write: 0.0,
10005        context_window: 262144,
10006        max_tokens: 65536,
10007    },
10008    ModelEntry {
10009        id: "qwen/qwen3.5-35b-a3b",
10010        name: "Qwen: Qwen3.5-35B-A3B",
10011        api: Api::OpenAiCompletions,
10012        provider: "openrouter",
10013        reasoning: true,
10014        input: &[InputModality::Text, InputModality::Image],
10015        cost_input: 0.13899999999999998,
10016        cost_output: 1.0,
10017        cost_cache_read: 0.0,
10018        cost_cache_write: 0.0,
10019        context_window: 262144,
10020        max_tokens: 4096,
10021    },
10022    ModelEntry {
10023        id: "qwen/qwen3.5-9b",
10024        name: "Qwen: Qwen3.5-9B",
10025        api: Api::OpenAiCompletions,
10026        provider: "openrouter",
10027        reasoning: true,
10028        input: &[InputModality::Text, InputModality::Image],
10029        cost_input: 0.04,
10030        cost_output: 0.15,
10031        cost_cache_read: 0.0,
10032        cost_cache_write: 0.0,
10033        context_window: 262144,
10034        max_tokens: 81920,
10035    },
10036    ModelEntry {
10037        id: "qwen/qwen3.5-flash-02-23",
10038        name: "Qwen: Qwen3.5-Flash",
10039        api: Api::OpenAiCompletions,
10040        provider: "openrouter",
10041        reasoning: true,
10042        input: &[InputModality::Text, InputModality::Image],
10043        cost_input: 0.065,
10044        cost_output: 0.26,
10045        cost_cache_read: 0.0,
10046        cost_cache_write: 0.0,
10047        context_window: 1000000,
10048        max_tokens: 65536,
10049    },
10050    ModelEntry {
10051        id: "qwen/qwen3.5-plus-02-15",
10052        name: "Qwen: Qwen3.5 Plus 2026-02-15",
10053        api: Api::OpenAiCompletions,
10054        provider: "openrouter",
10055        reasoning: true,
10056        input: &[InputModality::Text, InputModality::Image],
10057        cost_input: 0.26,
10058        cost_output: 1.56,
10059        cost_cache_read: 0.0,
10060        cost_cache_write: 0.0,
10061        context_window: 1000000,
10062        max_tokens: 65536,
10063    },
10064    ModelEntry {
10065        id: "qwen/qwen3.6-27b",
10066        name: "Qwen: Qwen3.6 27B",
10067        api: Api::OpenAiCompletions,
10068        provider: "openrouter",
10069        reasoning: true,
10070        input: &[InputModality::Text, InputModality::Image],
10071        cost_input: 0.29,
10072        cost_output: 3.1999999999999997,
10073        cost_cache_read: 0.0,
10074        cost_cache_write: 0.0,
10075        context_window: 262144,
10076        max_tokens: 262140,
10077    },
10078    ModelEntry {
10079        id: "qwen/qwen3.6-35b-a3b",
10080        name: "Qwen: Qwen3.6 35B A3B",
10081        api: Api::OpenAiCompletions,
10082        provider: "openrouter",
10083        reasoning: true,
10084        input: &[InputModality::Text, InputModality::Image],
10085        cost_input: 0.14,
10086        cost_output: 1.0,
10087        cost_cache_read: 0.0,
10088        cost_cache_write: 0.0,
10089        context_window: 262144,
10090        max_tokens: 262140,
10091    },
10092    ModelEntry {
10093        id: "qwen/qwen3.6-flash",
10094        name: "Qwen: Qwen3.6 Flash",
10095        api: Api::OpenAiCompletions,
10096        provider: "openrouter",
10097        reasoning: true,
10098        input: &[InputModality::Text, InputModality::Image],
10099        cost_input: 0.1875,
10100        cost_output: 1.125,
10101        cost_cache_read: 0.0,
10102        cost_cache_write: 0.234375,
10103        context_window: 1000000,
10104        max_tokens: 65536,
10105    },
10106    ModelEntry {
10107        id: "qwen/qwen3.6-max-preview",
10108        name: "Qwen: Qwen3.6 Max Preview",
10109        api: Api::OpenAiCompletions,
10110        provider: "openrouter",
10111        reasoning: true,
10112        input: &[InputModality::Text],
10113        cost_input: 1.04,
10114        cost_output: 6.24,
10115        cost_cache_read: 0.0,
10116        cost_cache_write: 1.3,
10117        context_window: 262144,
10118        max_tokens: 65536,
10119    },
10120    ModelEntry {
10121        id: "qwen/qwen3.6-plus",
10122        name: "Qwen: Qwen3.6 Plus",
10123        api: Api::OpenAiCompletions,
10124        provider: "openrouter",
10125        reasoning: true,
10126        input: &[InputModality::Text, InputModality::Image],
10127        cost_input: 0.325,
10128        cost_output: 1.95,
10129        cost_cache_read: 0.0,
10130        cost_cache_write: 0.40625,
10131        context_window: 1000000,
10132        max_tokens: 65536,
10133    },
10134    ModelEntry {
10135        id: "qwen/qwen3.7-max",
10136        name: "Qwen: Qwen3.7 Max",
10137        api: Api::OpenAiCompletions,
10138        provider: "openrouter",
10139        reasoning: true,
10140        input: &[InputModality::Text],
10141        cost_input: 1.25,
10142        cost_output: 3.75,
10143        cost_cache_read: 0.25,
10144        cost_cache_write: 1.5625,
10145        context_window: 1000000,
10146        max_tokens: 65536,
10147    },
10148    ModelEntry {
10149        id: "relace/relace-search",
10150        name: "Relace: Relace Search",
10151        api: Api::OpenAiCompletions,
10152        provider: "openrouter",
10153        reasoning: false,
10154        input: &[InputModality::Text],
10155        cost_input: 1.0,
10156        cost_output: 3.0,
10157        cost_cache_read: 0.0,
10158        cost_cache_write: 0.0,
10159        context_window: 256000,
10160        max_tokens: 128000,
10161    },
10162    ModelEntry {
10163        id: "sao10k/l3-euryale-70b",
10164        name: "Sao10k: Llama 3 Euryale 70B v2.1",
10165        api: Api::OpenAiCompletions,
10166        provider: "openrouter",
10167        reasoning: false,
10168        input: &[InputModality::Text],
10169        cost_input: 1.48,
10170        cost_output: 1.48,
10171        cost_cache_read: 0.0,
10172        cost_cache_write: 0.0,
10173        context_window: 8192,
10174        max_tokens: 8192,
10175    },
10176    ModelEntry {
10177        id: "sao10k/l3.1-euryale-70b",
10178        name: "Sao10K: Llama 3.1 Euryale 70B v2.2",
10179        api: Api::OpenAiCompletions,
10180        provider: "openrouter",
10181        reasoning: false,
10182        input: &[InputModality::Text],
10183        cost_input: 0.85,
10184        cost_output: 0.85,
10185        cost_cache_read: 0.0,
10186        cost_cache_write: 0.0,
10187        context_window: 131072,
10188        max_tokens: 16384,
10189    },
10190    ModelEntry {
10191        id: "stepfun/step-3.5-flash",
10192        name: "StepFun: Step 3.5 Flash",
10193        api: Api::OpenAiCompletions,
10194        provider: "openrouter",
10195        reasoning: true,
10196        input: &[InputModality::Text],
10197        cost_input: 0.09,
10198        cost_output: 0.3,
10199        cost_cache_read: 0.02,
10200        cost_cache_write: 0.0,
10201        context_window: 262144,
10202        max_tokens: 16384,
10203    },
10204    ModelEntry {
10205        id: "tencent/hy3-preview",
10206        name: "Tencent: Hy3 preview",
10207        api: Api::OpenAiCompletions,
10208        provider: "openrouter",
10209        reasoning: true,
10210        input: &[InputModality::Text],
10211        cost_input: 0.063,
10212        cost_output: 0.21,
10213        cost_cache_read: 0.020999999999999998,
10214        cost_cache_write: 0.0,
10215        context_window: 262144,
10216        max_tokens: 4096,
10217    },
10218    ModelEntry {
10219        id: "thedrummer/rocinante-12b",
10220        name: "TheDrummer: Rocinante 12B",
10221        api: Api::OpenAiCompletions,
10222        provider: "openrouter",
10223        reasoning: false,
10224        input: &[InputModality::Text],
10225        cost_input: 0.16999999999999998,
10226        cost_output: 0.43,
10227        cost_cache_read: 0.0,
10228        cost_cache_write: 0.0,
10229        context_window: 32768,
10230        max_tokens: 32768,
10231    },
10232    ModelEntry {
10233        id: "thedrummer/unslopnemo-12b",
10234        name: "TheDrummer: UnslopNemo 12B",
10235        api: Api::OpenAiCompletions,
10236        provider: "openrouter",
10237        reasoning: false,
10238        input: &[InputModality::Text],
10239        cost_input: 0.39999999999999997,
10240        cost_output: 0.39999999999999997,
10241        cost_cache_read: 0.0,
10242        cost_cache_write: 0.0,
10243        context_window: 32768,
10244        max_tokens: 32768,
10245    },
10246    ModelEntry {
10247        id: "x-ai/grok-4.20",
10248        name: "xAI: Grok 4.20",
10249        api: Api::OpenAiCompletions,
10250        provider: "openrouter",
10251        reasoning: true,
10252        input: &[InputModality::Text, InputModality::Image],
10253        cost_input: 1.25,
10254        cost_output: 2.5,
10255        cost_cache_read: 0.19999999999999998,
10256        cost_cache_write: 0.0,
10257        context_window: 2000000,
10258        max_tokens: 4096,
10259    },
10260    ModelEntry {
10261        id: "x-ai/grok-build-0.1",
10262        name: "xAI: Grok Build 0.1",
10263        api: Api::OpenAiCompletions,
10264        provider: "openrouter",
10265        reasoning: true,
10266        input: &[InputModality::Text, InputModality::Image],
10267        cost_input: 1.0,
10268        cost_output: 2.0,
10269        cost_cache_read: 0.19999999999999998,
10270        cost_cache_write: 0.0,
10271        context_window: 256000,
10272        max_tokens: 4096,
10273    },
10274    ModelEntry {
10275        id: "xiaomi/mimo-v2-omni",
10276        name: "Xiaomi: MiMo-V2-Omni",
10277        api: Api::OpenAiCompletions,
10278        provider: "openrouter",
10279        reasoning: true,
10280        input: &[InputModality::Text, InputModality::Image],
10281        cost_input: 0.39999999999999997,
10282        cost_output: 2.0,
10283        cost_cache_read: 0.08,
10284        cost_cache_write: 0.0,
10285        context_window: 262144,
10286        max_tokens: 65536,
10287    },
10288    ModelEntry {
10289        id: "xiaomi/mimo-v2-pro",
10290        name: "Xiaomi: MiMo-V2-Pro",
10291        api: Api::OpenAiCompletions,
10292        provider: "openrouter",
10293        reasoning: true,
10294        input: &[InputModality::Text],
10295        cost_input: 1.0,
10296        cost_output: 3.0,
10297        cost_cache_read: 0.19999999999999998,
10298        cost_cache_write: 0.0,
10299        context_window: 1048576,
10300        max_tokens: 131072,
10301    },
10302    ModelEntry {
10303        id: "xiaomi/mimo-v2.5-pro",
10304        name: "Xiaomi: MiMo-V2.5-Pro",
10305        api: Api::OpenAiCompletions,
10306        provider: "openrouter",
10307        reasoning: true,
10308        input: &[InputModality::Text],
10309        cost_input: 0.435,
10310        cost_output: 0.87,
10311        cost_cache_read: 0.0036,
10312        cost_cache_write: 0.0,
10313        context_window: 1048576,
10314        max_tokens: 131072,
10315    },
10316    ModelEntry {
10317        id: "z-ai/glm-4-32b",
10318        name: "Z.ai: GLM 4 32B ",
10319        api: Api::OpenAiCompletions,
10320        provider: "openrouter",
10321        reasoning: false,
10322        input: &[InputModality::Text],
10323        cost_input: 0.09999999999999999,
10324        cost_output: 0.09999999999999999,
10325        cost_cache_read: 0.0,
10326        cost_cache_write: 0.0,
10327        context_window: 128000,
10328        max_tokens: 4096,
10329    },
10330    ModelEntry {
10331        id: "z-ai/glm-4.5",
10332        name: "Z.ai: GLM 4.5",
10333        api: Api::OpenAiCompletions,
10334        provider: "openrouter",
10335        reasoning: true,
10336        input: &[InputModality::Text],
10337        cost_input: 0.6,
10338        cost_output: 2.2,
10339        cost_cache_read: 0.11,
10340        cost_cache_write: 0.0,
10341        context_window: 131072,
10342        max_tokens: 98304,
10343    },
10344    ModelEntry {
10345        id: "z-ai/glm-4.5-air:free",
10346        name: "Z.ai: GLM 4.5 Air (free)",
10347        api: Api::OpenAiCompletions,
10348        provider: "openrouter",
10349        reasoning: true,
10350        input: &[InputModality::Text],
10351        cost_input: 0.0,
10352        cost_output: 0.0,
10353        cost_cache_read: 0.0,
10354        cost_cache_write: 0.0,
10355        context_window: 131072,
10356        max_tokens: 96000,
10357    },
10358    ModelEntry {
10359        id: "z-ai/glm-4.5v",
10360        name: "Z.ai: GLM 4.5V",
10361        api: Api::OpenAiCompletions,
10362        provider: "openrouter",
10363        reasoning: true,
10364        input: &[InputModality::Text, InputModality::Image],
10365        cost_input: 0.6,
10366        cost_output: 1.7999999999999998,
10367        cost_cache_read: 0.11,
10368        cost_cache_write: 0.0,
10369        context_window: 65536,
10370        max_tokens: 16384,
10371    },
10372    ModelEntry {
10373        id: "z-ai/glm-4.6",
10374        name: "Z.ai: GLM 4.6",
10375        api: Api::OpenAiCompletions,
10376        provider: "openrouter",
10377        reasoning: true,
10378        input: &[InputModality::Text],
10379        cost_input: 0.43,
10380        cost_output: 1.74,
10381        cost_cache_read: 0.08,
10382        cost_cache_write: 0.0,
10383        context_window: 202752,
10384        max_tokens: 131072,
10385    },
10386    ModelEntry {
10387        id: "z-ai/glm-4.6v",
10388        name: "Z.ai: GLM 4.6V",
10389        api: Api::OpenAiCompletions,
10390        provider: "openrouter",
10391        reasoning: true,
10392        input: &[InputModality::Text, InputModality::Image],
10393        cost_input: 0.3,
10394        cost_output: 0.8999999999999999,
10395        cost_cache_read: 0.049999999999999996,
10396        cost_cache_write: 0.0,
10397        context_window: 131072,
10398        max_tokens: 24000,
10399    },
10400    ModelEntry {
10401        id: "z-ai/glm-4.7-flash",
10402        name: "Z.ai: GLM 4.7 Flash",
10403        api: Api::OpenAiCompletions,
10404        provider: "openrouter",
10405        reasoning: true,
10406        input: &[InputModality::Text],
10407        cost_input: 0.06,
10408        cost_output: 0.39999999999999997,
10409        cost_cache_read: 0.01,
10410        cost_cache_write: 0.0,
10411        context_window: 202752,
10412        max_tokens: 16384,
10413    },
10414    ModelEntry {
10415        id: "z-ai/glm-5",
10416        name: "Z.ai: GLM 5",
10417        api: Api::OpenAiCompletions,
10418        provider: "openrouter",
10419        reasoning: true,
10420        input: &[InputModality::Text],
10421        cost_input: 0.6,
10422        cost_output: 1.9,
10423        cost_cache_read: 0.119,
10424        cost_cache_write: 0.0,
10425        context_window: 202752,
10426        max_tokens: 4096,
10427    },
10428    ModelEntry {
10429        id: "z-ai/glm-5-turbo",
10430        name: "Z.ai: GLM 5 Turbo",
10431        api: Api::OpenAiCompletions,
10432        provider: "openrouter",
10433        reasoning: true,
10434        input: &[InputModality::Text],
10435        cost_input: 1.2,
10436        cost_output: 4.0,
10437        cost_cache_read: 0.24,
10438        cost_cache_write: 0.0,
10439        context_window: 202752,
10440        max_tokens: 131072,
10441    },
10442    ModelEntry {
10443        id: "z-ai/glm-5v-turbo",
10444        name: "Z.ai: GLM 5V Turbo",
10445        api: Api::OpenAiCompletions,
10446        provider: "openrouter",
10447        reasoning: true,
10448        input: &[InputModality::Text, InputModality::Image],
10449        cost_input: 1.2,
10450        cost_output: 4.0,
10451        cost_cache_read: 0.24,
10452        cost_cache_write: 0.0,
10453        context_window: 202752,
10454        max_tokens: 131072,
10455    },
10456    ModelEntry {
10457        id: "~anthropic/claude-haiku-latest",
10458        name: "Anthropic Claude Haiku Latest",
10459        api: Api::OpenAiCompletions,
10460        provider: "openrouter",
10461        reasoning: true,
10462        input: &[InputModality::Text, InputModality::Image],
10463        cost_input: 1.0,
10464        cost_output: 5.0,
10465        cost_cache_read: 0.09999999999999999,
10466        cost_cache_write: 1.25,
10467        context_window: 200000,
10468        max_tokens: 64000,
10469    },
10470    ModelEntry {
10471        id: "~anthropic/claude-opus-latest",
10472        name: "Anthropic: Claude Opus Latest",
10473        api: Api::OpenAiCompletions,
10474        provider: "openrouter",
10475        reasoning: true,
10476        input: &[InputModality::Text, InputModality::Image],
10477        cost_input: 5.0,
10478        cost_output: 25.0,
10479        cost_cache_read: 0.5,
10480        cost_cache_write: 6.25,
10481        context_window: 1000000,
10482        max_tokens: 128000,
10483    },
10484    ModelEntry {
10485        id: "~anthropic/claude-sonnet-latest",
10486        name: "Anthropic Claude Sonnet Latest",
10487        api: Api::OpenAiCompletions,
10488        provider: "openrouter",
10489        reasoning: true,
10490        input: &[InputModality::Text, InputModality::Image],
10491        cost_input: 3.0,
10492        cost_output: 15.0,
10493        cost_cache_read: 0.3,
10494        cost_cache_write: 3.75,
10495        context_window: 1000000,
10496        max_tokens: 128000,
10497    },
10498    ModelEntry {
10499        id: "~google/gemini-pro-latest",
10500        name: "Google Gemini Pro Latest",
10501        api: Api::OpenAiCompletions,
10502        provider: "openrouter",
10503        reasoning: true,
10504        input: &[InputModality::Text, InputModality::Image],
10505        cost_input: 2.0,
10506        cost_output: 12.0,
10507        cost_cache_read: 0.19999999999999998,
10508        cost_cache_write: 0.375,
10509        context_window: 1048576,
10510        max_tokens: 65536,
10511    },
10512    ModelEntry {
10513        id: "~moonshotai/kimi-latest",
10514        name: "MoonshotAI Kimi Latest",
10515        api: Api::OpenAiCompletions,
10516        provider: "openrouter",
10517        reasoning: true,
10518        input: &[InputModality::Text, InputModality::Image],
10519        cost_input: 0.73,
10520        cost_output: 3.49,
10521        cost_cache_read: 0.25,
10522        cost_cache_write: 0.0,
10523        context_window: 262144,
10524        max_tokens: 262142,
10525    },
10526    ModelEntry {
10527        id: "~openai/gpt-latest",
10528        name: "OpenAI GPT Latest",
10529        api: Api::OpenAiCompletions,
10530        provider: "openrouter",
10531        reasoning: true,
10532        input: &[InputModality::Text, InputModality::Image],
10533        cost_input: 5.0,
10534        cost_output: 30.0,
10535        cost_cache_read: 0.5,
10536        cost_cache_write: 0.0,
10537        context_window: 1050000,
10538        max_tokens: 128000,
10539    },
10540    ModelEntry {
10541        id: "~openai/gpt-mini-latest",
10542        name: "OpenAI GPT Mini Latest",
10543        api: Api::OpenAiCompletions,
10544        provider: "openrouter",
10545        reasoning: true,
10546        input: &[InputModality::Text, InputModality::Image],
10547        cost_input: 0.75,
10548        cost_output: 4.5,
10549        cost_cache_read: 0.075,
10550        cost_cache_write: 0.0,
10551        context_window: 400000,
10552        max_tokens: 128000,
10553    },
10554];
10555
10556/// vercel-ai-gateway models (147 entries)
10557static VERCEL_AI_GATEWAY_MODELS: &[ModelEntry] = &[
10558    ModelEntry {
10559        id: "alibaba/qwen-3-14b",
10560        name: "Qwen3-14B",
10561        api: Api::AnthropicMessages,
10562        provider: "vercel-ai-gateway",
10563        reasoning: true,
10564        input: &[InputModality::Text],
10565        cost_input: 0.0,
10566        cost_output: 0.0,
10567        cost_cache_read: 0.0,
10568        cost_cache_write: 0.0,
10569        context_window: 40960,
10570        max_tokens: 16384,
10571    },
10572    ModelEntry {
10573        id: "alibaba/qwen3-235b-a22b-thinking",
10574        name: "Qwen3 VL 235B A22B Thinking",
10575        api: Api::AnthropicMessages,
10576        provider: "vercel-ai-gateway",
10577        reasoning: true,
10578        input: &[InputModality::Text, InputModality::Image],
10579        cost_input: 0.0,
10580        cost_output: 0.0,
10581        cost_cache_read: 0.0,
10582        cost_cache_write: 0.0,
10583        context_window: 131072,
10584        max_tokens: 32768,
10585    },
10586    ModelEntry {
10587        id: "alibaba/qwen3-max",
10588        name: "Qwen3 Max",
10589        api: Api::AnthropicMessages,
10590        provider: "vercel-ai-gateway",
10591        reasoning: false,
10592        input: &[InputModality::Text],
10593        cost_input: 0.0,
10594        cost_output: 0.0,
10595        cost_cache_read: 0.24,
10596        cost_cache_write: 0.0,
10597        context_window: 262144,
10598        max_tokens: 32768,
10599    },
10600    ModelEntry {
10601        id: "alibaba/qwen3.6-27b",
10602        name: "Qwen 3.6 27B",
10603        api: Api::AnthropicMessages,
10604        provider: "vercel-ai-gateway",
10605        reasoning: true,
10606        input: &[InputModality::Text, InputModality::Image],
10607        cost_input: 0.0,
10608        cost_output: 0.0,
10609        cost_cache_read: 0.0,
10610        cost_cache_write: 0.0,
10611        context_window: 256000,
10612        max_tokens: 256000,
10613    },
10614    ModelEntry {
10615        id: "anthropic/claude-haiku-4.5",
10616        name: "Claude Haiku 4.5",
10617        api: Api::AnthropicMessages,
10618        provider: "vercel-ai-gateway",
10619        reasoning: true,
10620        input: &[InputModality::Text, InputModality::Image],
10621        cost_input: 0.0,
10622        cost_output: 0.0,
10623        cost_cache_read: 0.1,
10624        cost_cache_write: 1.25,
10625        context_window: 200000,
10626        max_tokens: 64000,
10627    },
10628    ModelEntry {
10629        id: "anthropic/claude-sonnet-4",
10630        name: "Claude Sonnet 4",
10631        api: Api::AnthropicMessages,
10632        provider: "vercel-ai-gateway",
10633        reasoning: true,
10634        input: &[InputModality::Text, InputModality::Image],
10635        cost_input: 0.0,
10636        cost_output: 0.0,
10637        cost_cache_read: 0.3,
10638        cost_cache_write: 3.75,
10639        context_window: 1000000,
10640        max_tokens: 64000,
10641    },
10642    ModelEntry {
10643        id: "bytedance/seed-1.6",
10644        name: "Seed 1.6",
10645        api: Api::AnthropicMessages,
10646        provider: "vercel-ai-gateway",
10647        reasoning: true,
10648        input: &[InputModality::Text],
10649        cost_input: 0.0,
10650        cost_output: 0.0,
10651        cost_cache_read: 0.05,
10652        cost_cache_write: 0.0,
10653        context_window: 256000,
10654        max_tokens: 32000,
10655    },
10656    ModelEntry {
10657        id: "deepseek/deepseek-v3.2",
10658        name: "DeepSeek V3.2",
10659        api: Api::AnthropicMessages,
10660        provider: "vercel-ai-gateway",
10661        reasoning: false,
10662        input: &[InputModality::Text],
10663        cost_input: 0.0,
10664        cost_output: 0.0,
10665        cost_cache_read: 0.028,
10666        cost_cache_write: 0.0,
10667        context_window: 128000,
10668        max_tokens: 8000,
10669    },
10670    ModelEntry {
10671        id: "google/gemini-2.0-flash-lite",
10672        name: "Gemini 2.0 Flash Lite",
10673        api: Api::AnthropicMessages,
10674        provider: "vercel-ai-gateway",
10675        reasoning: false,
10676        input: &[InputModality::Text, InputModality::Image],
10677        cost_input: 0.0,
10678        cost_output: 0.0,
10679        cost_cache_read: 0.02,
10680        cost_cache_write: 0.0,
10681        context_window: 1048576,
10682        max_tokens: 8192,
10683    },
10684    ModelEntry {
10685        id: "google/gemini-3-pro-preview",
10686        name: "Gemini 3 Pro Preview",
10687        api: Api::AnthropicMessages,
10688        provider: "vercel-ai-gateway",
10689        reasoning: true,
10690        input: &[InputModality::Text, InputModality::Image],
10691        cost_input: 0.0,
10692        cost_output: 0.0,
10693        cost_cache_read: 0.2,
10694        cost_cache_write: 0.0,
10695        context_window: 1000000,
10696        max_tokens: 64000,
10697    },
10698    ModelEntry {
10699        id: "inception/mercury-coder-small",
10700        name: "Mercury Coder Small Beta",
10701        api: Api::AnthropicMessages,
10702        provider: "vercel-ai-gateway",
10703        reasoning: false,
10704        input: &[InputModality::Text],
10705        cost_input: 0.0,
10706        cost_output: 0.0,
10707        cost_cache_read: 0.0,
10708        cost_cache_write: 0.0,
10709        context_window: 32000,
10710        max_tokens: 16384,
10711    },
10712    ModelEntry {
10713        id: "meta/llama-3.2-11b",
10714        name: "Llama 3.2 11B Vision Instruct",
10715        api: Api::AnthropicMessages,
10716        provider: "vercel-ai-gateway",
10717        reasoning: false,
10718        input: &[InputModality::Text, InputModality::Image],
10719        cost_input: 0.0,
10720        cost_output: 0.0,
10721        cost_cache_read: 0.0,
10722        cost_cache_write: 0.0,
10723        context_window: 128000,
10724        max_tokens: 8192,
10725    },
10726    ModelEntry {
10727        id: "minimax/minimax-m2.1",
10728        name: "MiniMax M2.1",
10729        api: Api::AnthropicMessages,
10730        provider: "vercel-ai-gateway",
10731        reasoning: true,
10732        input: &[InputModality::Text],
10733        cost_input: 0.0,
10734        cost_output: 0.0,
10735        cost_cache_read: 0.03,
10736        cost_cache_write: 0.375,
10737        context_window: 204800,
10738        max_tokens: 131072,
10739    },
10740    ModelEntry {
10741        id: "minimax/minimax-m2.7-highspeed",
10742        name: "MiniMax M2.7 High Speed",
10743        api: Api::AnthropicMessages,
10744        provider: "vercel-ai-gateway",
10745        reasoning: true,
10746        input: &[InputModality::Text, InputModality::Image],
10747        cost_input: 0.0,
10748        cost_output: 0.0,
10749        cost_cache_read: 0.06,
10750        cost_cache_write: 0.375,
10751        context_window: 204800,
10752        max_tokens: 131100,
10753    },
10754    ModelEntry {
10755        id: "mistral/ministral-8b",
10756        name: "Ministral 8B",
10757        api: Api::AnthropicMessages,
10758        provider: "vercel-ai-gateway",
10759        reasoning: false,
10760        input: &[InputModality::Text],
10761        cost_input: 0.0,
10762        cost_output: 0.0,
10763        cost_cache_read: 0.0,
10764        cost_cache_write: 0.0,
10765        context_window: 128000,
10766        max_tokens: 4000,
10767    },
10768    ModelEntry {
10769        id: "moonshotai/kimi-k2",
10770        name: "Kimi K2 Instruct",
10771        api: Api::AnthropicMessages,
10772        provider: "vercel-ai-gateway",
10773        reasoning: false,
10774        input: &[InputModality::Text],
10775        cost_input: 0.0,
10776        cost_output: 0.0,
10777        cost_cache_read: 0.0,
10778        cost_cache_write: 0.0,
10779        context_window: 131072,
10780        max_tokens: 131072,
10781    },
10782    ModelEntry {
10783        id: "moonshotai/kimi-k2.5",
10784        name: "Kimi K2.5",
10785        api: Api::AnthropicMessages,
10786        provider: "vercel-ai-gateway",
10787        reasoning: true,
10788        input: &[InputModality::Text, InputModality::Image],
10789        cost_input: 0.0,
10790        cost_output: 0.0,
10791        cost_cache_read: 0.1,
10792        cost_cache_write: 0.0,
10793        context_window: 262114,
10794        max_tokens: 262114,
10795    },
10796    ModelEntry {
10797        id: "openai/gpt-4.1-mini",
10798        name: "GPT-4.1 mini",
10799        api: Api::AnthropicMessages,
10800        provider: "vercel-ai-gateway",
10801        reasoning: false,
10802        input: &[InputModality::Text, InputModality::Image],
10803        cost_input: 0.0,
10804        cost_output: 0.0,
10805        cost_cache_read: 0.1,
10806        cost_cache_write: 0.0,
10807        context_window: 1047576,
10808        max_tokens: 32768,
10809    },
10810    ModelEntry {
10811        id: "openai/gpt-5-chat",
10812        name: "GPT 5 Chat",
10813        api: Api::AnthropicMessages,
10814        provider: "vercel-ai-gateway",
10815        reasoning: true,
10816        input: &[InputModality::Text, InputModality::Image],
10817        cost_input: 0.0,
10818        cost_output: 0.0,
10819        cost_cache_read: 0.125,
10820        cost_cache_write: 0.0,
10821        context_window: 128000,
10822        max_tokens: 16384,
10823    },
10824    ModelEntry {
10825        id: "openai/gpt-5.1-codex-max",
10826        name: "GPT 5.1 Codex Max",
10827        api: Api::AnthropicMessages,
10828        provider: "vercel-ai-gateway",
10829        reasoning: true,
10830        input: &[InputModality::Text, InputModality::Image],
10831        cost_input: 0.0,
10832        cost_output: 0.0,
10833        cost_cache_read: 0.125,
10834        cost_cache_write: 0.0,
10835        context_window: 400000,
10836        max_tokens: 128000,
10837    },
10838    ModelEntry {
10839        id: "openai/gpt-5.2-chat",
10840        name: "GPT 5.2 Chat",
10841        api: Api::AnthropicMessages,
10842        provider: "vercel-ai-gateway",
10843        reasoning: true,
10844        input: &[InputModality::Text, InputModality::Image],
10845        cost_input: 0.0,
10846        cost_output: 0.0,
10847        cost_cache_read: 0.175,
10848        cost_cache_write: 0.0,
10849        context_window: 128000,
10850        max_tokens: 16384,
10851    },
10852    ModelEntry {
10853        id: "openai/gpt-5.4-mini",
10854        name: "GPT 5.4 Mini",
10855        api: Api::AnthropicMessages,
10856        provider: "vercel-ai-gateway",
10857        reasoning: true,
10858        input: &[InputModality::Text, InputModality::Image],
10859        cost_input: 0.0,
10860        cost_output: 0.0,
10861        cost_cache_read: 0.075,
10862        cost_cache_write: 0.0,
10863        context_window: 400000,
10864        max_tokens: 128000,
10865    },
10866    ModelEntry {
10867        id: "openai/gpt-oss-20b",
10868        name: "GPT OSS 120B",
10869        api: Api::AnthropicMessages,
10870        provider: "vercel-ai-gateway",
10871        reasoning: true,
10872        input: &[InputModality::Text],
10873        cost_input: 0.0,
10874        cost_output: 0.0,
10875        cost_cache_read: 0.0,
10876        cost_cache_write: 0.0,
10877        context_window: 131072,
10878        max_tokens: 8192,
10879    },
10880    ModelEntry {
10881        id: "openai/o3-mini",
10882        name: "o3-mini",
10883        api: Api::AnthropicMessages,
10884        provider: "vercel-ai-gateway",
10885        reasoning: true,
10886        input: &[InputModality::Text],
10887        cost_input: 0.0,
10888        cost_output: 0.0,
10889        cost_cache_read: 0.55,
10890        cost_cache_write: 0.0,
10891        context_window: 200000,
10892        max_tokens: 100000,
10893    },
10894    ModelEntry {
10895        id: "xai/grok-3-fast",
10896        name: "Grok 3 Fast Beta",
10897        api: Api::AnthropicMessages,
10898        provider: "vercel-ai-gateway",
10899        reasoning: false,
10900        input: &[InputModality::Text],
10901        cost_input: 0.0,
10902        cost_output: 0.0,
10903        cost_cache_read: 1.25,
10904        cost_cache_write: 0.0,
10905        context_window: 131072,
10906        max_tokens: 131072,
10907    },
10908    ModelEntry {
10909        id: "xai/grok-4-fast-reasoning",
10910        name: "Grok 4 Fast Reasoning",
10911        api: Api::AnthropicMessages,
10912        provider: "vercel-ai-gateway",
10913        reasoning: true,
10914        input: &[InputModality::Text, InputModality::Image],
10915        cost_input: 0.0,
10916        cost_output: 0.0,
10917        cost_cache_read: 0.05,
10918        cost_cache_write: 0.0,
10919        context_window: 2000000,
10920        max_tokens: 256000,
10921    },
10922    ModelEntry {
10923        id: "xai/grok-4.20-non-reasoning-beta",
10924        name: "Grok 4.20 Beta Non-Reasoning",
10925        api: Api::AnthropicMessages,
10926        provider: "vercel-ai-gateway",
10927        reasoning: false,
10928        input: &[InputModality::Text, InputModality::Image],
10929        cost_input: 0.0,
10930        cost_output: 0.0,
10931        cost_cache_read: 0.2,
10932        cost_cache_write: 0.0,
10933        context_window: 2000000,
10934        max_tokens: 2000000,
10935    },
10936    ModelEntry {
10937        id: "xiaomi/mimo-v2-flash",
10938        name: "MiMo V2 Flash",
10939        api: Api::AnthropicMessages,
10940        provider: "vercel-ai-gateway",
10941        reasoning: true,
10942        input: &[InputModality::Text],
10943        cost_input: 0.0,
10944        cost_output: 0.0,
10945        cost_cache_read: 0.01,
10946        cost_cache_write: 0.0,
10947        context_window: 262144,
10948        max_tokens: 32000,
10949    },
10950    ModelEntry {
10951        id: "zai/glm-4.5v",
10952        name: "GLM 4.5V",
10953        api: Api::AnthropicMessages,
10954        provider: "vercel-ai-gateway",
10955        reasoning: false,
10956        input: &[InputModality::Text, InputModality::Image],
10957        cost_input: 0.0,
10958        cost_output: 0.0,
10959        cost_cache_read: 0.11,
10960        cost_cache_write: 0.0,
10961        context_window: 66000,
10962        max_tokens: 16000,
10963    },
10964    ModelEntry {
10965        id: "zai/glm-4.7-flash",
10966        name: "GLM 4.7 Flash",
10967        api: Api::AnthropicMessages,
10968        provider: "vercel-ai-gateway",
10969        reasoning: true,
10970        input: &[InputModality::Text],
10971        cost_input: 0.0,
10972        cost_output: 0.0,
10973        cost_cache_read: 0.0,
10974        cost_cache_write: 0.0,
10975        context_window: 200000,
10976        max_tokens: 131000,
10977    },
10978    ModelEntry {
10979        id: "alibaba/qwen-3-235b",
10980        name: "Qwen3 235B A22b Instruct 2507",
10981        api: Api::AnthropicMessages,
10982        provider: "vercel-ai-gateway",
10983        reasoning: false,
10984        input: &[InputModality::Text],
10985        cost_input: 0.6,
10986        cost_output: 1.2,
10987        cost_cache_read: 0.6,
10988        cost_cache_write: 0.0,
10989        context_window: 131000,
10990        max_tokens: 40000,
10991    },
10992    ModelEntry {
10993        id: "alibaba/qwen-3-30b",
10994        name: "Qwen3-30B-A3B",
10995        api: Api::AnthropicMessages,
10996        provider: "vercel-ai-gateway",
10997        reasoning: true,
10998        input: &[InputModality::Text],
10999        cost_input: 0.08,
11000        cost_output: 0.29,
11001        cost_cache_read: 0.0,
11002        cost_cache_write: 0.0,
11003        context_window: 40960,
11004        max_tokens: 16384,
11005    },
11006    ModelEntry {
11007        id: "alibaba/qwen-3-32b",
11008        name: "Qwen 3 32B",
11009        api: Api::AnthropicMessages,
11010        provider: "vercel-ai-gateway",
11011        reasoning: true,
11012        input: &[InputModality::Text],
11013        cost_input: 0.16,
11014        cost_output: 0.64,
11015        cost_cache_read: 0.0,
11016        cost_cache_write: 0.0,
11017        context_window: 128000,
11018        max_tokens: 8192,
11019    },
11020    ModelEntry {
11021        id: "alibaba/qwen-3.6-max-preview",
11022        name: "Qwen 3.6 Max Preview",
11023        api: Api::AnthropicMessages,
11024        provider: "vercel-ai-gateway",
11025        reasoning: true,
11026        input: &[InputModality::Text, InputModality::Image],
11027        cost_input: 1.3,
11028        cost_output: 7.8,
11029        cost_cache_read: 0.26,
11030        cost_cache_write: 1.625,
11031        context_window: 240000,
11032        max_tokens: 64000,
11033    },
11034    ModelEntry {
11035        id: "alibaba/qwen3-coder",
11036        name: "Qwen3 Coder 480B A35B Instruct",
11037        api: Api::AnthropicMessages,
11038        provider: "vercel-ai-gateway",
11039        reasoning: false,
11040        input: &[InputModality::Text],
11041        cost_input: 1.5,
11042        cost_output: 7.5,
11043        cost_cache_read: 0.3,
11044        cost_cache_write: 0.0,
11045        context_window: 262144,
11046        max_tokens: 65536,
11047    },
11048    ModelEntry {
11049        id: "alibaba/qwen3-coder-30b-a3b",
11050        name: "Qwen 3 Coder 30B A3B Instruct",
11051        api: Api::AnthropicMessages,
11052        provider: "vercel-ai-gateway",
11053        reasoning: true,
11054        input: &[InputModality::Text],
11055        cost_input: 0.15,
11056        cost_output: 0.6,
11057        cost_cache_read: 0.0,
11058        cost_cache_write: 0.0,
11059        context_window: 262144,
11060        max_tokens: 8192,
11061    },
11062    ModelEntry {
11063        id: "alibaba/qwen3-coder-next",
11064        name: "Qwen3 Coder Next",
11065        api: Api::AnthropicMessages,
11066        provider: "vercel-ai-gateway",
11067        reasoning: false,
11068        input: &[InputModality::Text],
11069        cost_input: 0.5,
11070        cost_output: 1.2,
11071        cost_cache_read: 0.0,
11072        cost_cache_write: 0.0,
11073        context_window: 256000,
11074        max_tokens: 256000,
11075    },
11076    ModelEntry {
11077        id: "alibaba/qwen3-coder-plus",
11078        name: "Qwen3 Coder Plus",
11079        api: Api::AnthropicMessages,
11080        provider: "vercel-ai-gateway",
11081        reasoning: false,
11082        input: &[InputModality::Text],
11083        cost_input: 1.0,
11084        cost_output: 5.0,
11085        cost_cache_read: 0.19999999999999998,
11086        cost_cache_write: 0.0,
11087        context_window: 1000000,
11088        max_tokens: 65536,
11089    },
11090    ModelEntry {
11091        id: "alibaba/qwen3-max-preview",
11092        name: "Qwen3 Max Preview",
11093        api: Api::AnthropicMessages,
11094        provider: "vercel-ai-gateway",
11095        reasoning: false,
11096        input: &[InputModality::Text],
11097        cost_input: 1.2,
11098        cost_output: 6.0,
11099        cost_cache_read: 0.24,
11100        cost_cache_write: 0.0,
11101        context_window: 262144,
11102        max_tokens: 32768,
11103    },
11104    ModelEntry {
11105        id: "alibaba/qwen3-max-thinking",
11106        name: "Qwen 3 Max Thinking",
11107        api: Api::AnthropicMessages,
11108        provider: "vercel-ai-gateway",
11109        reasoning: true,
11110        input: &[InputModality::Text],
11111        cost_input: 1.2,
11112        cost_output: 6.0,
11113        cost_cache_read: 0.24,
11114        cost_cache_write: 0.0,
11115        context_window: 256000,
11116        max_tokens: 65536,
11117    },
11118    ModelEntry {
11119        id: "alibaba/qwen3-vl-thinking",
11120        name: "Qwen3 VL 235B A22B Thinking",
11121        api: Api::AnthropicMessages,
11122        provider: "vercel-ai-gateway",
11123        reasoning: true,
11124        input: &[InputModality::Text, InputModality::Image],
11125        cost_input: 0.39999999999999997,
11126        cost_output: 4.0,
11127        cost_cache_read: 0.0,
11128        cost_cache_write: 0.0,
11129        context_window: 131072,
11130        max_tokens: 32768,
11131    },
11132    ModelEntry {
11133        id: "alibaba/qwen3.5-flash",
11134        name: "Qwen 3.5 Flash",
11135        api: Api::AnthropicMessages,
11136        provider: "vercel-ai-gateway",
11137        reasoning: true,
11138        input: &[InputModality::Text, InputModality::Image],
11139        cost_input: 0.09999999999999999,
11140        cost_output: 0.39999999999999997,
11141        cost_cache_read: 0.001,
11142        cost_cache_write: 0.125,
11143        context_window: 1000000,
11144        max_tokens: 64000,
11145    },
11146    ModelEntry {
11147        id: "alibaba/qwen3.5-plus",
11148        name: "Qwen 3.5 Plus",
11149        api: Api::AnthropicMessages,
11150        provider: "vercel-ai-gateway",
11151        reasoning: true,
11152        input: &[InputModality::Text, InputModality::Image],
11153        cost_input: 0.39999999999999997,
11154        cost_output: 2.4,
11155        cost_cache_read: 0.04,
11156        cost_cache_write: 0.5,
11157        context_window: 1000000,
11158        max_tokens: 64000,
11159    },
11160    ModelEntry {
11161        id: "alibaba/qwen3.6-plus",
11162        name: "Qwen 3.6 Plus",
11163        api: Api::AnthropicMessages,
11164        provider: "vercel-ai-gateway",
11165        reasoning: true,
11166        input: &[InputModality::Text, InputModality::Image],
11167        cost_input: 0.5,
11168        cost_output: 3.0,
11169        cost_cache_read: 0.09999999999999999,
11170        cost_cache_write: 0.625,
11171        context_window: 1000000,
11172        max_tokens: 64000,
11173    },
11174    ModelEntry {
11175        id: "alibaba/qwen3.7-max",
11176        name: "Qwen 3.7 Max",
11177        api: Api::AnthropicMessages,
11178        provider: "vercel-ai-gateway",
11179        reasoning: true,
11180        input: &[InputModality::Text, InputModality::Image],
11181        cost_input: 1.25,
11182        cost_output: 3.75,
11183        cost_cache_read: 0.25,
11184        cost_cache_write: 1.5625,
11185        context_window: 991000,
11186        max_tokens: 64000,
11187    },
11188    ModelEntry {
11189        id: "anthropic/claude-3-haiku",
11190        name: "Claude 3 Haiku",
11191        api: Api::AnthropicMessages,
11192        provider: "vercel-ai-gateway",
11193        reasoning: false,
11194        input: &[InputModality::Text, InputModality::Image],
11195        cost_input: 0.25,
11196        cost_output: 1.25,
11197        cost_cache_read: 0.03,
11198        cost_cache_write: 0.3,
11199        context_window: 200000,
11200        max_tokens: 4096,
11201    },
11202    ModelEntry {
11203        id: "anthropic/claude-opus-4.1",
11204        name: "Claude Opus 4.1",
11205        api: Api::AnthropicMessages,
11206        provider: "vercel-ai-gateway",
11207        reasoning: true,
11208        input: &[InputModality::Text, InputModality::Image],
11209        cost_input: 15.0,
11210        cost_output: 75.0,
11211        cost_cache_read: 1.5,
11212        cost_cache_write: 18.75,
11213        context_window: 200000,
11214        max_tokens: 32000,
11215    },
11216    ModelEntry {
11217        id: "anthropic/claude-opus-4.5",
11218        name: "Claude Opus 4.5",
11219        api: Api::AnthropicMessages,
11220        provider: "vercel-ai-gateway",
11221        reasoning: true,
11222        input: &[InputModality::Text, InputModality::Image],
11223        cost_input: 5.0,
11224        cost_output: 25.0,
11225        cost_cache_read: 0.5,
11226        cost_cache_write: 6.25,
11227        context_window: 200000,
11228        max_tokens: 64000,
11229    },
11230    ModelEntry {
11231        id: "anthropic/claude-opus-4.6",
11232        name: "Claude Opus 4.6",
11233        api: Api::AnthropicMessages,
11234        provider: "vercel-ai-gateway",
11235        reasoning: true,
11236        input: &[InputModality::Text, InputModality::Image],
11237        cost_input: 5.0,
11238        cost_output: 25.0,
11239        cost_cache_read: 0.5,
11240        cost_cache_write: 6.25,
11241        context_window: 1000000,
11242        max_tokens: 128000,
11243    },
11244    ModelEntry {
11245        id: "anthropic/claude-sonnet-4.5",
11246        name: "Claude Sonnet 4.5",
11247        api: Api::AnthropicMessages,
11248        provider: "vercel-ai-gateway",
11249        reasoning: true,
11250        input: &[InputModality::Text, InputModality::Image],
11251        cost_input: 3.0,
11252        cost_output: 15.0,
11253        cost_cache_read: 0.3,
11254        cost_cache_write: 3.75,
11255        context_window: 1000000,
11256        max_tokens: 64000,
11257    },
11258    ModelEntry {
11259        id: "anthropic/claude-sonnet-4.6",
11260        name: "Claude Sonnet 4.6",
11261        api: Api::AnthropicMessages,
11262        provider: "vercel-ai-gateway",
11263        reasoning: true,
11264        input: &[InputModality::Text, InputModality::Image],
11265        cost_input: 3.0,
11266        cost_output: 15.0,
11267        cost_cache_read: 0.3,
11268        cost_cache_write: 3.75,
11269        context_window: 1000000,
11270        max_tokens: 128000,
11271    },
11272    ModelEntry {
11273        id: "arcee-ai/trinity-large-thinking",
11274        name: "Trinity Large Thinking",
11275        api: Api::AnthropicMessages,
11276        provider: "vercel-ai-gateway",
11277        reasoning: true,
11278        input: &[InputModality::Text],
11279        cost_input: 0.25,
11280        cost_output: 0.8999999999999999,
11281        cost_cache_read: 0.0,
11282        cost_cache_write: 0.0,
11283        context_window: 262100,
11284        max_tokens: 80000,
11285    },
11286    ModelEntry {
11287        id: "cohere/command-a",
11288        name: "Command A",
11289        api: Api::AnthropicMessages,
11290        provider: "vercel-ai-gateway",
11291        reasoning: false,
11292        input: &[InputModality::Text],
11293        cost_input: 2.5,
11294        cost_output: 10.0,
11295        cost_cache_read: 0.0,
11296        cost_cache_write: 0.0,
11297        context_window: 256000,
11298        max_tokens: 8000,
11299    },
11300    ModelEntry {
11301        id: "deepseek/deepseek-r1",
11302        name: "DeepSeek-R1",
11303        api: Api::AnthropicMessages,
11304        provider: "vercel-ai-gateway",
11305        reasoning: true,
11306        input: &[InputModality::Text],
11307        cost_input: 1.35,
11308        cost_output: 5.4,
11309        cost_cache_read: 0.0,
11310        cost_cache_write: 0.0,
11311        context_window: 128000,
11312        max_tokens: 8192,
11313    },
11314    ModelEntry {
11315        id: "deepseek/deepseek-v3",
11316        name: "DeepSeek V3 0324",
11317        api: Api::AnthropicMessages,
11318        provider: "vercel-ai-gateway",
11319        reasoning: false,
11320        input: &[InputModality::Text],
11321        cost_input: 0.77,
11322        cost_output: 0.77,
11323        cost_cache_read: 0.0,
11324        cost_cache_write: 0.0,
11325        context_window: 163840,
11326        max_tokens: 16384,
11327    },
11328    ModelEntry {
11329        id: "deepseek/deepseek-v3.1",
11330        name: "DeepSeek-V3.1",
11331        api: Api::AnthropicMessages,
11332        provider: "vercel-ai-gateway",
11333        reasoning: true,
11334        input: &[InputModality::Text],
11335        cost_input: 0.56,
11336        cost_output: 1.68,
11337        cost_cache_read: 0.28,
11338        cost_cache_write: 0.0,
11339        context_window: 163840,
11340        max_tokens: 8192,
11341    },
11342    ModelEntry {
11343        id: "deepseek/deepseek-v3.2-thinking",
11344        name: "DeepSeek V3.2 Thinking",
11345        api: Api::AnthropicMessages,
11346        provider: "vercel-ai-gateway",
11347        reasoning: false,
11348        input: &[InputModality::Text],
11349        cost_input: 0.62,
11350        cost_output: 1.85,
11351        cost_cache_read: 0.0,
11352        cost_cache_write: 0.0,
11353        context_window: 128000,
11354        max_tokens: 8000,
11355    },
11356    ModelEntry {
11357        id: "deepseek/deepseek-v4-flash",
11358        name: "DeepSeek V4 Flash",
11359        api: Api::AnthropicMessages,
11360        provider: "vercel-ai-gateway",
11361        reasoning: true,
11362        input: &[InputModality::Text],
11363        cost_input: 0.14,
11364        cost_output: 0.28,
11365        cost_cache_read: 0.0028,
11366        cost_cache_write: 0.0,
11367        context_window: 1000000,
11368        max_tokens: 384000,
11369    },
11370    ModelEntry {
11371        id: "deepseek/deepseek-v4-pro",
11372        name: "DeepSeek V4 Pro",
11373        api: Api::AnthropicMessages,
11374        provider: "vercel-ai-gateway",
11375        reasoning: true,
11376        input: &[InputModality::Text],
11377        cost_input: 0.435,
11378        cost_output: 0.87,
11379        cost_cache_read: 0.0036,
11380        cost_cache_write: 0.0,
11381        context_window: 1000000,
11382        max_tokens: 384000,
11383    },
11384    ModelEntry {
11385        id: "google/gemini-2.0-flash",
11386        name: "Gemini 2.0 Flash",
11387        api: Api::AnthropicMessages,
11388        provider: "vercel-ai-gateway",
11389        reasoning: false,
11390        input: &[InputModality::Text, InputModality::Image],
11391        cost_input: 0.15,
11392        cost_output: 0.6,
11393        cost_cache_read: 0.024999999999999998,
11394        cost_cache_write: 0.0,
11395        context_window: 1048576,
11396        max_tokens: 8192,
11397    },
11398    ModelEntry {
11399        id: "google/gemini-2.5-flash",
11400        name: "Gemini 2.5 Flash",
11401        api: Api::AnthropicMessages,
11402        provider: "vercel-ai-gateway",
11403        reasoning: true,
11404        input: &[InputModality::Text, InputModality::Image],
11405        cost_input: 0.3,
11406        cost_output: 2.5,
11407        cost_cache_read: 0.03,
11408        cost_cache_write: 0.0,
11409        context_window: 1000000,
11410        max_tokens: 65536,
11411    },
11412    ModelEntry {
11413        id: "google/gemini-2.5-flash-lite",
11414        name: "Gemini 2.5 Flash Lite",
11415        api: Api::AnthropicMessages,
11416        provider: "vercel-ai-gateway",
11417        reasoning: true,
11418        input: &[InputModality::Text, InputModality::Image],
11419        cost_input: 0.09999999999999999,
11420        cost_output: 0.39999999999999997,
11421        cost_cache_read: 0.01,
11422        cost_cache_write: 0.0,
11423        context_window: 1048576,
11424        max_tokens: 65536,
11425    },
11426    ModelEntry {
11427        id: "google/gemini-2.5-pro",
11428        name: "Gemini 2.5 Pro",
11429        api: Api::AnthropicMessages,
11430        provider: "vercel-ai-gateway",
11431        reasoning: true,
11432        input: &[InputModality::Text, InputModality::Image],
11433        cost_input: 1.25,
11434        cost_output: 10.0,
11435        cost_cache_read: 0.125,
11436        cost_cache_write: 0.0,
11437        context_window: 1048576,
11438        max_tokens: 65536,
11439    },
11440    ModelEntry {
11441        id: "google/gemini-3-flash",
11442        name: "Gemini 3 Flash",
11443        api: Api::AnthropicMessages,
11444        provider: "vercel-ai-gateway",
11445        reasoning: true,
11446        input: &[InputModality::Text, InputModality::Image],
11447        cost_input: 0.5,
11448        cost_output: 3.0,
11449        cost_cache_read: 0.049999999999999996,
11450        cost_cache_write: 0.0,
11451        context_window: 1000000,
11452        max_tokens: 65000,
11453    },
11454    ModelEntry {
11455        id: "google/gemini-3.1-flash-lite",
11456        name: "Gemini 3.1 Flash Lite",
11457        api: Api::AnthropicMessages,
11458        provider: "vercel-ai-gateway",
11459        reasoning: true,
11460        input: &[InputModality::Text, InputModality::Image],
11461        cost_input: 0.25,
11462        cost_output: 1.5,
11463        cost_cache_read: 0.03,
11464        cost_cache_write: 0.0,
11465        context_window: 1000000,
11466        max_tokens: 65000,
11467    },
11468    ModelEntry {
11469        id: "google/gemini-3.1-flash-lite-preview",
11470        name: "Gemini 3.1 Flash Lite Preview",
11471        api: Api::AnthropicMessages,
11472        provider: "vercel-ai-gateway",
11473        reasoning: true,
11474        input: &[InputModality::Text, InputModality::Image],
11475        cost_input: 0.25,
11476        cost_output: 1.5,
11477        cost_cache_read: 0.03,
11478        cost_cache_write: 0.0,
11479        context_window: 1000000,
11480        max_tokens: 65000,
11481    },
11482    ModelEntry {
11483        id: "google/gemini-3.1-pro-preview",
11484        name: "Gemini 3.1 Pro Preview",
11485        api: Api::AnthropicMessages,
11486        provider: "vercel-ai-gateway",
11487        reasoning: true,
11488        input: &[InputModality::Text, InputModality::Image],
11489        cost_input: 2.0,
11490        cost_output: 12.0,
11491        cost_cache_read: 0.19999999999999998,
11492        cost_cache_write: 0.0,
11493        context_window: 1000000,
11494        max_tokens: 64000,
11495    },
11496    ModelEntry {
11497        id: "google/gemini-3.5-flash",
11498        name: "Gemini 3.5 Flash",
11499        api: Api::AnthropicMessages,
11500        provider: "vercel-ai-gateway",
11501        reasoning: true,
11502        input: &[InputModality::Text, InputModality::Image],
11503        cost_input: 1.5,
11504        cost_output: 9.0,
11505        cost_cache_read: 0.15,
11506        cost_cache_write: 0.0,
11507        context_window: 1000000,
11508        max_tokens: 64000,
11509    },
11510    ModelEntry {
11511        id: "google/gemma-4-26b-a4b-it",
11512        name: "Gemma 4 26B A4B IT",
11513        api: Api::AnthropicMessages,
11514        provider: "vercel-ai-gateway",
11515        reasoning: false,
11516        input: &[InputModality::Text, InputModality::Image],
11517        cost_input: 0.13,
11518        cost_output: 0.39999999999999997,
11519        cost_cache_read: 0.0,
11520        cost_cache_write: 0.0,
11521        context_window: 262144,
11522        max_tokens: 131072,
11523    },
11524    ModelEntry {
11525        id: "google/gemma-4-31b-it",
11526        name: "Gemma 4 31B IT",
11527        api: Api::AnthropicMessages,
11528        provider: "vercel-ai-gateway",
11529        reasoning: false,
11530        input: &[InputModality::Text, InputModality::Image],
11531        cost_input: 0.14,
11532        cost_output: 0.39999999999999997,
11533        cost_cache_read: 0.0,
11534        cost_cache_write: 0.0,
11535        context_window: 262144,
11536        max_tokens: 131072,
11537    },
11538    ModelEntry {
11539        id: "inception/mercury-2",
11540        name: "Mercury 2",
11541        api: Api::AnthropicMessages,
11542        provider: "vercel-ai-gateway",
11543        reasoning: true,
11544        input: &[InputModality::Text],
11545        cost_input: 0.25,
11546        cost_output: 0.75,
11547        cost_cache_read: 0.024999999999999998,
11548        cost_cache_write: 0.0,
11549        context_window: 128000,
11550        max_tokens: 128000,
11551    },
11552    ModelEntry {
11553        id: "meituan/longcat-flash-chat",
11554        name: "LongCat Flash Chat",
11555        api: Api::AnthropicMessages,
11556        provider: "vercel-ai-gateway",
11557        reasoning: false,
11558        input: &[InputModality::Text],
11559        cost_input: 0.0,
11560        cost_output: 0.0,
11561        cost_cache_read: 0.0,
11562        cost_cache_write: 0.0,
11563        context_window: 128000,
11564        max_tokens: 100000,
11565    },
11566    ModelEntry {
11567        id: "meta/llama-3.1-70b",
11568        name: "Llama 3.1 70B Instruct",
11569        api: Api::AnthropicMessages,
11570        provider: "vercel-ai-gateway",
11571        reasoning: false,
11572        input: &[InputModality::Text],
11573        cost_input: 0.72,
11574        cost_output: 0.72,
11575        cost_cache_read: 0.0,
11576        cost_cache_write: 0.0,
11577        context_window: 128000,
11578        max_tokens: 8192,
11579    },
11580    ModelEntry {
11581        id: "meta/llama-3.1-8b",
11582        name: "Llama 3.1 8B Instruct",
11583        api: Api::AnthropicMessages,
11584        provider: "vercel-ai-gateway",
11585        reasoning: false,
11586        input: &[InputModality::Text],
11587        cost_input: 0.22,
11588        cost_output: 0.22,
11589        cost_cache_read: 0.0,
11590        cost_cache_write: 0.0,
11591        context_window: 128000,
11592        max_tokens: 8192,
11593    },
11594    ModelEntry {
11595        id: "meta/llama-3.2-90b",
11596        name: "Llama 3.2 90B Vision Instruct",
11597        api: Api::AnthropicMessages,
11598        provider: "vercel-ai-gateway",
11599        reasoning: false,
11600        input: &[InputModality::Text, InputModality::Image],
11601        cost_input: 0.72,
11602        cost_output: 0.72,
11603        cost_cache_read: 0.0,
11604        cost_cache_write: 0.0,
11605        context_window: 128000,
11606        max_tokens: 8192,
11607    },
11608    ModelEntry {
11609        id: "meta/llama-3.3-70b",
11610        name: "Llama 3.3 70B Instruct",
11611        api: Api::AnthropicMessages,
11612        provider: "vercel-ai-gateway",
11613        reasoning: false,
11614        input: &[InputModality::Text],
11615        cost_input: 0.72,
11616        cost_output: 0.72,
11617        cost_cache_read: 0.0,
11618        cost_cache_write: 0.0,
11619        context_window: 128000,
11620        max_tokens: 8192,
11621    },
11622    ModelEntry {
11623        id: "meta/llama-4-maverick",
11624        name: "Llama 4 Maverick 17B Instruct",
11625        api: Api::AnthropicMessages,
11626        provider: "vercel-ai-gateway",
11627        reasoning: false,
11628        input: &[InputModality::Text, InputModality::Image],
11629        cost_input: 0.24,
11630        cost_output: 0.9700000000000001,
11631        cost_cache_read: 0.0,
11632        cost_cache_write: 0.0,
11633        context_window: 128000,
11634        max_tokens: 8192,
11635    },
11636    ModelEntry {
11637        id: "meta/llama-4-scout",
11638        name: "Llama 4 Scout 17B Instruct",
11639        api: Api::AnthropicMessages,
11640        provider: "vercel-ai-gateway",
11641        reasoning: false,
11642        input: &[InputModality::Text, InputModality::Image],
11643        cost_input: 0.16999999999999998,
11644        cost_output: 0.66,
11645        cost_cache_read: 0.0,
11646        cost_cache_write: 0.0,
11647        context_window: 128000,
11648        max_tokens: 8192,
11649    },
11650    ModelEntry {
11651        id: "minimax/minimax-m2",
11652        name: "MiniMax M2",
11653        api: Api::AnthropicMessages,
11654        provider: "vercel-ai-gateway",
11655        reasoning: true,
11656        input: &[InputModality::Text],
11657        cost_input: 0.3,
11658        cost_output: 1.2,
11659        cost_cache_read: 0.03,
11660        cost_cache_write: 0.375,
11661        context_window: 205000,
11662        max_tokens: 205000,
11663    },
11664    ModelEntry {
11665        id: "minimax/minimax-m2.1-lightning",
11666        name: "MiniMax M2.1 Lightning",
11667        api: Api::AnthropicMessages,
11668        provider: "vercel-ai-gateway",
11669        reasoning: true,
11670        input: &[InputModality::Text],
11671        cost_input: 0.3,
11672        cost_output: 2.4,
11673        cost_cache_read: 0.03,
11674        cost_cache_write: 0.375,
11675        context_window: 204800,
11676        max_tokens: 131072,
11677    },
11678    ModelEntry {
11679        id: "minimax/minimax-m2.5",
11680        name: "MiniMax M2.5",
11681        api: Api::AnthropicMessages,
11682        provider: "vercel-ai-gateway",
11683        reasoning: true,
11684        input: &[InputModality::Text],
11685        cost_input: 0.3,
11686        cost_output: 1.2,
11687        cost_cache_read: 0.03,
11688        cost_cache_write: 0.375,
11689        context_window: 204800,
11690        max_tokens: 131000,
11691    },
11692    ModelEntry {
11693        id: "minimax/minimax-m2.5-highspeed",
11694        name: "MiniMax M2.5 High Speed",
11695        api: Api::AnthropicMessages,
11696        provider: "vercel-ai-gateway",
11697        reasoning: true,
11698        input: &[InputModality::Text],
11699        cost_input: 0.6,
11700        cost_output: 2.4,
11701        cost_cache_read: 0.03,
11702        cost_cache_write: 0.375,
11703        context_window: 204800,
11704        max_tokens: 131000,
11705    },
11706    ModelEntry {
11707        id: "minimax/minimax-m2.7",
11708        name: "MiniMax M2.7",
11709        api: Api::AnthropicMessages,
11710        provider: "vercel-ai-gateway",
11711        reasoning: true,
11712        input: &[InputModality::Text, InputModality::Image],
11713        cost_input: 0.3,
11714        cost_output: 1.2,
11715        cost_cache_read: 0.06,
11716        cost_cache_write: 0.375,
11717        context_window: 204800,
11718        max_tokens: 131000,
11719    },
11720    ModelEntry {
11721        id: "mistral/codestral",
11722        name: "Mistral Codestral",
11723        api: Api::AnthropicMessages,
11724        provider: "vercel-ai-gateway",
11725        reasoning: false,
11726        input: &[InputModality::Text],
11727        cost_input: 0.3,
11728        cost_output: 0.8999999999999999,
11729        cost_cache_read: 0.0,
11730        cost_cache_write: 0.0,
11731        context_window: 128000,
11732        max_tokens: 4000,
11733    },
11734    ModelEntry {
11735        id: "mistral/devstral-2",
11736        name: "Devstral 2",
11737        api: Api::AnthropicMessages,
11738        provider: "vercel-ai-gateway",
11739        reasoning: false,
11740        input: &[InputModality::Text],
11741        cost_input: 0.39999999999999997,
11742        cost_output: 2.0,
11743        cost_cache_read: 0.0,
11744        cost_cache_write: 0.0,
11745        context_window: 256000,
11746        max_tokens: 256000,
11747    },
11748    ModelEntry {
11749        id: "mistral/devstral-small",
11750        name: "Devstral Small 1.1",
11751        api: Api::AnthropicMessages,
11752        provider: "vercel-ai-gateway",
11753        reasoning: false,
11754        input: &[InputModality::Text],
11755        cost_input: 0.09999999999999999,
11756        cost_output: 0.3,
11757        cost_cache_read: 0.0,
11758        cost_cache_write: 0.0,
11759        context_window: 128000,
11760        max_tokens: 64000,
11761    },
11762    ModelEntry {
11763        id: "mistral/devstral-small-2",
11764        name: "Devstral Small 2",
11765        api: Api::AnthropicMessages,
11766        provider: "vercel-ai-gateway",
11767        reasoning: false,
11768        input: &[InputModality::Text],
11769        cost_input: 0.09999999999999999,
11770        cost_output: 0.3,
11771        cost_cache_read: 0.0,
11772        cost_cache_write: 0.0,
11773        context_window: 256000,
11774        max_tokens: 256000,
11775    },
11776    ModelEntry {
11777        id: "mistral/ministral-3b",
11778        name: "Ministral 3B",
11779        api: Api::AnthropicMessages,
11780        provider: "vercel-ai-gateway",
11781        reasoning: false,
11782        input: &[InputModality::Text],
11783        cost_input: 0.09999999999999999,
11784        cost_output: 0.09999999999999999,
11785        cost_cache_read: 0.0,
11786        cost_cache_write: 0.0,
11787        context_window: 128000,
11788        max_tokens: 4000,
11789    },
11790    ModelEntry {
11791        id: "mistral/mistral-medium",
11792        name: "Mistral Medium 3.1",
11793        api: Api::AnthropicMessages,
11794        provider: "vercel-ai-gateway",
11795        reasoning: false,
11796        input: &[InputModality::Text, InputModality::Image],
11797        cost_input: 0.39999999999999997,
11798        cost_output: 2.0,
11799        cost_cache_read: 0.0,
11800        cost_cache_write: 0.0,
11801        context_window: 128000,
11802        max_tokens: 64000,
11803    },
11804    ModelEntry {
11805        id: "mistral/mistral-medium-3.5",
11806        name: "Mistral Medium Latest",
11807        api: Api::AnthropicMessages,
11808        provider: "vercel-ai-gateway",
11809        reasoning: true,
11810        input: &[InputModality::Text],
11811        cost_input: 1.5,
11812        cost_output: 7.5,
11813        cost_cache_read: 0.0,
11814        cost_cache_write: 0.0,
11815        context_window: 256000,
11816        max_tokens: 256000,
11817    },
11818    ModelEntry {
11819        id: "mistral/mistral-small",
11820        name: "Mistral Small",
11821        api: Api::AnthropicMessages,
11822        provider: "vercel-ai-gateway",
11823        reasoning: false,
11824        input: &[InputModality::Text, InputModality::Image],
11825        cost_input: 0.09999999999999999,
11826        cost_output: 0.3,
11827        cost_cache_read: 0.0,
11828        cost_cache_write: 0.0,
11829        context_window: 32000,
11830        max_tokens: 4000,
11831    },
11832    ModelEntry {
11833        id: "mistral/pixtral-12b",
11834        name: "Pixtral 12B 2409",
11835        api: Api::AnthropicMessages,
11836        provider: "vercel-ai-gateway",
11837        reasoning: false,
11838        input: &[InputModality::Text, InputModality::Image],
11839        cost_input: 0.15,
11840        cost_output: 0.15,
11841        cost_cache_read: 0.0,
11842        cost_cache_write: 0.0,
11843        context_window: 128000,
11844        max_tokens: 4000,
11845    },
11846    ModelEntry {
11847        id: "mistral/pixtral-large",
11848        name: "Pixtral Large",
11849        api: Api::AnthropicMessages,
11850        provider: "vercel-ai-gateway",
11851        reasoning: false,
11852        input: &[InputModality::Text, InputModality::Image],
11853        cost_input: 2.0,
11854        cost_output: 6.0,
11855        cost_cache_read: 0.0,
11856        cost_cache_write: 0.0,
11857        context_window: 128000,
11858        max_tokens: 4000,
11859    },
11860    ModelEntry {
11861        id: "moonshotai/kimi-k2-thinking-turbo",
11862        name: "Kimi K2 Thinking Turbo",
11863        api: Api::AnthropicMessages,
11864        provider: "vercel-ai-gateway",
11865        reasoning: true,
11866        input: &[InputModality::Text],
11867        cost_input: 1.15,
11868        cost_output: 8.0,
11869        cost_cache_read: 0.15,
11870        cost_cache_write: 0.0,
11871        context_window: 262114,
11872        max_tokens: 262114,
11873    },
11874    ModelEntry {
11875        id: "moonshotai/kimi-k2-turbo",
11876        name: "Kimi K2 Turbo",
11877        api: Api::AnthropicMessages,
11878        provider: "vercel-ai-gateway",
11879        reasoning: false,
11880        input: &[InputModality::Text],
11881        cost_input: 1.15,
11882        cost_output: 8.0,
11883        cost_cache_read: 0.15,
11884        cost_cache_write: 0.0,
11885        context_window: 256000,
11886        max_tokens: 16384,
11887    },
11888    ModelEntry {
11889        id: "moonshotai/kimi-k2.6",
11890        name: "Kimi K2.6",
11891        api: Api::AnthropicMessages,
11892        provider: "vercel-ai-gateway",
11893        reasoning: true,
11894        input: &[InputModality::Text, InputModality::Image],
11895        cost_input: 0.95,
11896        cost_output: 4.0,
11897        cost_cache_read: 0.16,
11898        cost_cache_write: 0.0,
11899        context_window: 262000,
11900        max_tokens: 262000,
11901    },
11902    ModelEntry {
11903        id: "nvidia/nemotron-nano-12b-v2-vl",
11904        name: "Nvidia Nemotron Nano 12B V2 VL",
11905        api: Api::AnthropicMessages,
11906        provider: "vercel-ai-gateway",
11907        reasoning: true,
11908        input: &[InputModality::Text, InputModality::Image],
11909        cost_input: 0.19999999999999998,
11910        cost_output: 0.6,
11911        cost_cache_read: 0.0,
11912        cost_cache_write: 0.0,
11913        context_window: 131072,
11914        max_tokens: 131072,
11915    },
11916    ModelEntry {
11917        id: "nvidia/nemotron-nano-9b-v2",
11918        name: "Nvidia Nemotron Nano 9B V2",
11919        api: Api::AnthropicMessages,
11920        provider: "vercel-ai-gateway",
11921        reasoning: true,
11922        input: &[InputModality::Text],
11923        cost_input: 0.06,
11924        cost_output: 0.22999999999999998,
11925        cost_cache_read: 0.0,
11926        cost_cache_write: 0.0,
11927        context_window: 131072,
11928        max_tokens: 131072,
11929    },
11930    ModelEntry {
11931        id: "openai/gpt-4-turbo",
11932        name: "GPT-4 Turbo",
11933        api: Api::AnthropicMessages,
11934        provider: "vercel-ai-gateway",
11935        reasoning: false,
11936        input: &[InputModality::Text, InputModality::Image],
11937        cost_input: 10.0,
11938        cost_output: 30.0,
11939        cost_cache_read: 0.0,
11940        cost_cache_write: 0.0,
11941        context_window: 128000,
11942        max_tokens: 4096,
11943    },
11944    ModelEntry {
11945        id: "openai/gpt-4.1",
11946        name: "GPT-4.1",
11947        api: Api::AnthropicMessages,
11948        provider: "vercel-ai-gateway",
11949        reasoning: false,
11950        input: &[InputModality::Text, InputModality::Image],
11951        cost_input: 2.0,
11952        cost_output: 8.0,
11953        cost_cache_read: 0.5,
11954        cost_cache_write: 0.0,
11955        context_window: 1047576,
11956        max_tokens: 32768,
11957    },
11958    ModelEntry {
11959        id: "openai/gpt-4.1-nano",
11960        name: "GPT-4.1 nano",
11961        api: Api::AnthropicMessages,
11962        provider: "vercel-ai-gateway",
11963        reasoning: false,
11964        input: &[InputModality::Text, InputModality::Image],
11965        cost_input: 0.09999999999999999,
11966        cost_output: 0.39999999999999997,
11967        cost_cache_read: 0.024999999999999998,
11968        cost_cache_write: 0.0,
11969        context_window: 1047576,
11970        max_tokens: 32768,
11971    },
11972    ModelEntry {
11973        id: "openai/gpt-4o",
11974        name: "GPT-4o",
11975        api: Api::AnthropicMessages,
11976        provider: "vercel-ai-gateway",
11977        reasoning: false,
11978        input: &[InputModality::Text, InputModality::Image],
11979        cost_input: 2.5,
11980        cost_output: 10.0,
11981        cost_cache_read: 1.25,
11982        cost_cache_write: 0.0,
11983        context_window: 128000,
11984        max_tokens: 16384,
11985    },
11986    ModelEntry {
11987        id: "openai/gpt-4o-mini",
11988        name: "GPT-4o mini",
11989        api: Api::AnthropicMessages,
11990        provider: "vercel-ai-gateway",
11991        reasoning: false,
11992        input: &[InputModality::Text, InputModality::Image],
11993        cost_input: 0.15,
11994        cost_output: 0.6,
11995        cost_cache_read: 0.075,
11996        cost_cache_write: 0.0,
11997        context_window: 128000,
11998        max_tokens: 16384,
11999    },
12000    ModelEntry {
12001        id: "openai/gpt-5-codex",
12002        name: "GPT-5-Codex",
12003        api: Api::AnthropicMessages,
12004        provider: "vercel-ai-gateway",
12005        reasoning: true,
12006        input: &[InputModality::Text],
12007        cost_input: 1.25,
12008        cost_output: 10.0,
12009        cost_cache_read: 0.125,
12010        cost_cache_write: 0.0,
12011        context_window: 400000,
12012        max_tokens: 128000,
12013    },
12014    ModelEntry {
12015        id: "openai/gpt-5-mini",
12016        name: "GPT-5 mini",
12017        api: Api::AnthropicMessages,
12018        provider: "vercel-ai-gateway",
12019        reasoning: true,
12020        input: &[InputModality::Text, InputModality::Image],
12021        cost_input: 0.25,
12022        cost_output: 2.0,
12023        cost_cache_read: 0.024999999999999998,
12024        cost_cache_write: 0.0,
12025        context_window: 400000,
12026        max_tokens: 128000,
12027    },
12028    ModelEntry {
12029        id: "openai/gpt-5-nano",
12030        name: "GPT-5 nano",
12031        api: Api::AnthropicMessages,
12032        provider: "vercel-ai-gateway",
12033        reasoning: true,
12034        input: &[InputModality::Text, InputModality::Image],
12035        cost_input: 0.049999999999999996,
12036        cost_output: 0.39999999999999997,
12037        cost_cache_read: 0.005,
12038        cost_cache_write: 0.0,
12039        context_window: 400000,
12040        max_tokens: 128000,
12041    },
12042    ModelEntry {
12043        id: "openai/gpt-5-pro",
12044        name: "GPT-5 pro",
12045        api: Api::AnthropicMessages,
12046        provider: "vercel-ai-gateway",
12047        reasoning: true,
12048        input: &[InputModality::Text, InputModality::Image],
12049        cost_input: 15.0,
12050        cost_output: 120.0,
12051        cost_cache_read: 0.0,
12052        cost_cache_write: 0.0,
12053        context_window: 400000,
12054        max_tokens: 272000,
12055    },
12056    ModelEntry {
12057        id: "openai/gpt-5.1-codex",
12058        name: "GPT-5.1-Codex",
12059        api: Api::AnthropicMessages,
12060        provider: "vercel-ai-gateway",
12061        reasoning: true,
12062        input: &[InputModality::Text, InputModality::Image],
12063        cost_input: 1.25,
12064        cost_output: 10.0,
12065        cost_cache_read: 0.125,
12066        cost_cache_write: 0.0,
12067        context_window: 400000,
12068        max_tokens: 128000,
12069    },
12070    ModelEntry {
12071        id: "openai/gpt-5.1-instant",
12072        name: "GPT-5.1 Instant",
12073        api: Api::AnthropicMessages,
12074        provider: "vercel-ai-gateway",
12075        reasoning: true,
12076        input: &[InputModality::Text, InputModality::Image],
12077        cost_input: 1.25,
12078        cost_output: 10.0,
12079        cost_cache_read: 0.125,
12080        cost_cache_write: 0.0,
12081        context_window: 128000,
12082        max_tokens: 16384,
12083    },
12084    ModelEntry {
12085        id: "openai/gpt-5.1-thinking",
12086        name: "GPT 5.1 Thinking",
12087        api: Api::AnthropicMessages,
12088        provider: "vercel-ai-gateway",
12089        reasoning: true,
12090        input: &[InputModality::Text, InputModality::Image],
12091        cost_input: 1.25,
12092        cost_output: 10.0,
12093        cost_cache_read: 0.125,
12094        cost_cache_write: 0.0,
12095        context_window: 400000,
12096        max_tokens: 128000,
12097    },
12098    ModelEntry {
12099        id: "openai/gpt-5.2",
12100        name: "GPT 5.2",
12101        api: Api::AnthropicMessages,
12102        provider: "vercel-ai-gateway",
12103        reasoning: true,
12104        input: &[InputModality::Text, InputModality::Image],
12105        cost_input: 1.75,
12106        cost_output: 14.0,
12107        cost_cache_read: 0.175,
12108        cost_cache_write: 0.0,
12109        context_window: 400000,
12110        max_tokens: 128000,
12111    },
12112    ModelEntry {
12113        id: "openai/gpt-5.2-codex",
12114        name: "GPT 5.2 Codex",
12115        api: Api::AnthropicMessages,
12116        provider: "vercel-ai-gateway",
12117        reasoning: true,
12118        input: &[InputModality::Text, InputModality::Image],
12119        cost_input: 1.75,
12120        cost_output: 14.0,
12121        cost_cache_read: 0.175,
12122        cost_cache_write: 0.0,
12123        context_window: 400000,
12124        max_tokens: 128000,
12125    },
12126    ModelEntry {
12127        id: "openai/gpt-5.2-pro",
12128        name: "GPT 5.2 ",
12129        api: Api::AnthropicMessages,
12130        provider: "vercel-ai-gateway",
12131        reasoning: true,
12132        input: &[InputModality::Text, InputModality::Image],
12133        cost_input: 21.0,
12134        cost_output: 168.0,
12135        cost_cache_read: 0.0,
12136        cost_cache_write: 0.0,
12137        context_window: 400000,
12138        max_tokens: 128000,
12139    },
12140    ModelEntry {
12141        id: "openai/gpt-5.3-codex",
12142        name: "GPT 5.3 Codex",
12143        api: Api::AnthropicMessages,
12144        provider: "vercel-ai-gateway",
12145        reasoning: true,
12146        input: &[InputModality::Text, InputModality::Image],
12147        cost_input: 1.75,
12148        cost_output: 14.0,
12149        cost_cache_read: 0.175,
12150        cost_cache_write: 0.0,
12151        context_window: 400000,
12152        max_tokens: 128000,
12153    },
12154    ModelEntry {
12155        id: "openai/gpt-5.4",
12156        name: "GPT 5.4",
12157        api: Api::AnthropicMessages,
12158        provider: "vercel-ai-gateway",
12159        reasoning: true,
12160        input: &[InputModality::Text, InputModality::Image],
12161        cost_input: 2.5,
12162        cost_output: 15.0,
12163        cost_cache_read: 0.25,
12164        cost_cache_write: 0.0,
12165        context_window: 1050000,
12166        max_tokens: 128000,
12167    },
12168    ModelEntry {
12169        id: "openai/gpt-5.4-pro",
12170        name: "GPT 5.4 Pro",
12171        api: Api::AnthropicMessages,
12172        provider: "vercel-ai-gateway",
12173        reasoning: true,
12174        input: &[InputModality::Text, InputModality::Image],
12175        cost_input: 30.0,
12176        cost_output: 180.0,
12177        cost_cache_read: 0.0,
12178        cost_cache_write: 0.0,
12179        context_window: 1050000,
12180        max_tokens: 128000,
12181    },
12182    ModelEntry {
12183        id: "openai/gpt-5.5",
12184        name: "GPT 5.5",
12185        api: Api::AnthropicMessages,
12186        provider: "vercel-ai-gateway",
12187        reasoning: true,
12188        input: &[InputModality::Text, InputModality::Image],
12189        cost_input: 5.0,
12190        cost_output: 30.0,
12191        cost_cache_read: 0.5,
12192        cost_cache_write: 0.0,
12193        context_window: 1000000,
12194        max_tokens: 128000,
12195    },
12196    ModelEntry {
12197        id: "openai/gpt-5.5-pro",
12198        name: "GPT 5.5 Pro",
12199        api: Api::AnthropicMessages,
12200        provider: "vercel-ai-gateway",
12201        reasoning: true,
12202        input: &[InputModality::Text, InputModality::Image],
12203        cost_input: 30.0,
12204        cost_output: 180.0,
12205        cost_cache_read: 0.0,
12206        cost_cache_write: 0.0,
12207        context_window: 1000000,
12208        max_tokens: 128000,
12209    },
12210    ModelEntry {
12211        id: "openai/o1",
12212        name: "o1",
12213        api: Api::AnthropicMessages,
12214        provider: "vercel-ai-gateway",
12215        reasoning: true,
12216        input: &[InputModality::Text, InputModality::Image],
12217        cost_input: 15.0,
12218        cost_output: 60.0,
12219        cost_cache_read: 7.5,
12220        cost_cache_write: 0.0,
12221        context_window: 200000,
12222        max_tokens: 100000,
12223    },
12224    ModelEntry {
12225        id: "openai/o3",
12226        name: "o3",
12227        api: Api::AnthropicMessages,
12228        provider: "vercel-ai-gateway",
12229        reasoning: true,
12230        input: &[InputModality::Text, InputModality::Image],
12231        cost_input: 2.0,
12232        cost_output: 8.0,
12233        cost_cache_read: 0.5,
12234        cost_cache_write: 0.0,
12235        context_window: 200000,
12236        max_tokens: 100000,
12237    },
12238    ModelEntry {
12239        id: "openai/o3-deep-research",
12240        name: "o3-deep-research",
12241        api: Api::AnthropicMessages,
12242        provider: "vercel-ai-gateway",
12243        reasoning: true,
12244        input: &[InputModality::Text, InputModality::Image],
12245        cost_input: 10.0,
12246        cost_output: 40.0,
12247        cost_cache_read: 2.5,
12248        cost_cache_write: 0.0,
12249        context_window: 200000,
12250        max_tokens: 100000,
12251    },
12252    ModelEntry {
12253        id: "openai/o3-pro",
12254        name: "o3 Pro",
12255        api: Api::AnthropicMessages,
12256        provider: "vercel-ai-gateway",
12257        reasoning: true,
12258        input: &[InputModality::Text, InputModality::Image],
12259        cost_input: 20.0,
12260        cost_output: 80.0,
12261        cost_cache_read: 0.0,
12262        cost_cache_write: 0.0,
12263        context_window: 200000,
12264        max_tokens: 100000,
12265    },
12266    ModelEntry {
12267        id: "openai/o4-mini",
12268        name: "o4-mini",
12269        api: Api::AnthropicMessages,
12270        provider: "vercel-ai-gateway",
12271        reasoning: true,
12272        input: &[InputModality::Text, InputModality::Image],
12273        cost_input: 1.1,
12274        cost_output: 4.4,
12275        cost_cache_read: 0.275,
12276        cost_cache_write: 0.0,
12277        context_window: 200000,
12278        max_tokens: 100000,
12279    },
12280    ModelEntry {
12281        id: "perplexity/sonar",
12282        name: "Sonar",
12283        api: Api::AnthropicMessages,
12284        provider: "vercel-ai-gateway",
12285        reasoning: false,
12286        input: &[InputModality::Text, InputModality::Image],
12287        cost_input: 0.0,
12288        cost_output: 0.0,
12289        cost_cache_read: 0.0,
12290        cost_cache_write: 0.0,
12291        context_window: 127000,
12292        max_tokens: 8000,
12293    },
12294    ModelEntry {
12295        id: "perplexity/sonar-pro",
12296        name: "Sonar Pro",
12297        api: Api::AnthropicMessages,
12298        provider: "vercel-ai-gateway",
12299        reasoning: false,
12300        input: &[InputModality::Text, InputModality::Image],
12301        cost_input: 0.0,
12302        cost_output: 0.0,
12303        cost_cache_read: 0.0,
12304        cost_cache_write: 0.0,
12305        context_window: 200000,
12306        max_tokens: 8000,
12307    },
12308    ModelEntry {
12309        id: "xai/grok-4.1-fast-non-reasoning",
12310        name: "Grok 4.1 Fast Non-Reasoning",
12311        api: Api::AnthropicMessages,
12312        provider: "vercel-ai-gateway",
12313        reasoning: false,
12314        input: &[InputModality::Text, InputModality::Image],
12315        cost_input: 0.19999999999999998,
12316        cost_output: 0.5,
12317        cost_cache_read: 0.049999999999999996,
12318        cost_cache_write: 0.0,
12319        context_window: 1000000,
12320        max_tokens: 1000000,
12321    },
12322    ModelEntry {
12323        id: "xai/grok-4.1-fast-reasoning",
12324        name: "Grok 4.1 Fast Reasoning",
12325        api: Api::AnthropicMessages,
12326        provider: "vercel-ai-gateway",
12327        reasoning: true,
12328        input: &[InputModality::Text, InputModality::Image],
12329        cost_input: 0.19999999999999998,
12330        cost_output: 0.5,
12331        cost_cache_read: 0.049999999999999996,
12332        cost_cache_write: 0.0,
12333        context_window: 1000000,
12334        max_tokens: 1000000,
12335    },
12336    ModelEntry {
12337        id: "xai/grok-4.20-multi-agent",
12338        name: "Grok 4.20 Multi-Agent",
12339        api: Api::AnthropicMessages,
12340        provider: "vercel-ai-gateway",
12341        reasoning: true,
12342        input: &[InputModality::Text, InputModality::Image],
12343        cost_input: 1.25,
12344        cost_output: 2.5,
12345        cost_cache_read: 0.19999999999999998,
12346        cost_cache_write: 0.0,
12347        context_window: 2000000,
12348        max_tokens: 2000000,
12349    },
12350    ModelEntry {
12351        id: "xai/grok-4.20-multi-agent-beta",
12352        name: "Grok 4.20 Multi Agent Beta",
12353        api: Api::AnthropicMessages,
12354        provider: "vercel-ai-gateway",
12355        reasoning: true,
12356        input: &[InputModality::Text, InputModality::Image],
12357        cost_input: 1.25,
12358        cost_output: 2.5,
12359        cost_cache_read: 0.19999999999999998,
12360        cost_cache_write: 0.0,
12361        context_window: 2000000,
12362        max_tokens: 2000000,
12363    },
12364    ModelEntry {
12365        id: "xai/grok-4.20-non-reasoning",
12366        name: "Grok 4.20 Non-Reasoning",
12367        api: Api::AnthropicMessages,
12368        provider: "vercel-ai-gateway",
12369        reasoning: false,
12370        input: &[InputModality::Text, InputModality::Image],
12371        cost_input: 1.25,
12372        cost_output: 2.5,
12373        cost_cache_read: 0.19999999999999998,
12374        cost_cache_write: 0.0,
12375        context_window: 2000000,
12376        max_tokens: 2000000,
12377    },
12378    ModelEntry {
12379        id: "xai/grok-4.20-reasoning",
12380        name: "Grok 4.20 Reasoning",
12381        api: Api::AnthropicMessages,
12382        provider: "vercel-ai-gateway",
12383        reasoning: true,
12384        input: &[InputModality::Text, InputModality::Image],
12385        cost_input: 1.25,
12386        cost_output: 2.5,
12387        cost_cache_read: 0.19999999999999998,
12388        cost_cache_write: 0.0,
12389        context_window: 2000000,
12390        max_tokens: 2000000,
12391    },
12392    ModelEntry {
12393        id: "xai/grok-4.20-reasoning-beta",
12394        name: "Grok 4.20 Beta Reasoning",
12395        api: Api::AnthropicMessages,
12396        provider: "vercel-ai-gateway",
12397        reasoning: true,
12398        input: &[InputModality::Text, InputModality::Image],
12399        cost_input: 1.25,
12400        cost_output: 2.5,
12401        cost_cache_read: 0.19999999999999998,
12402        cost_cache_write: 0.0,
12403        context_window: 2000000,
12404        max_tokens: 2000000,
12405    },
12406    ModelEntry {
12407        id: "xai/grok-4.3",
12408        name: "Grok 4.3",
12409        api: Api::AnthropicMessages,
12410        provider: "vercel-ai-gateway",
12411        reasoning: true,
12412        input: &[InputModality::Text, InputModality::Image],
12413        cost_input: 1.25,
12414        cost_output: 2.5,
12415        cost_cache_read: 0.19999999999999998,
12416        cost_cache_write: 0.0,
12417        context_window: 1000000,
12418        max_tokens: 1000000,
12419    },
12420    ModelEntry {
12421        id: "xai/grok-build-0.1",
12422        name: "Grok Build 0.1",
12423        api: Api::AnthropicMessages,
12424        provider: "vercel-ai-gateway",
12425        reasoning: true,
12426        input: &[InputModality::Text, InputModality::Image],
12427        cost_input: 1.0,
12428        cost_output: 2.0,
12429        cost_cache_read: 0.19999999999999998,
12430        cost_cache_write: 0.0,
12431        context_window: 256000,
12432        max_tokens: 256000,
12433    },
12434    ModelEntry {
12435        id: "xiaomi/mimo-v2-pro",
12436        name: "MiMo V2 Pro",
12437        api: Api::AnthropicMessages,
12438        provider: "vercel-ai-gateway",
12439        reasoning: true,
12440        input: &[InputModality::Text],
12441        cost_input: 1.0,
12442        cost_output: 3.0,
12443        cost_cache_read: 0.19999999999999998,
12444        cost_cache_write: 0.0,
12445        context_window: 1000000,
12446        max_tokens: 128000,
12447    },
12448    ModelEntry {
12449        id: "xiaomi/mimo-v2.5-pro",
12450        name: "MiMo V2.5 Pro",
12451        api: Api::AnthropicMessages,
12452        provider: "vercel-ai-gateway",
12453        reasoning: true,
12454        input: &[InputModality::Text, InputModality::Image],
12455        cost_input: 0.435,
12456        cost_output: 0.87,
12457        cost_cache_read: 0.0036,
12458        cost_cache_write: 0.0,
12459        context_window: 1050000,
12460        max_tokens: 131000,
12461    },
12462    ModelEntry {
12463        id: "zai/glm-4.5",
12464        name: "GLM-4.5",
12465        api: Api::AnthropicMessages,
12466        provider: "vercel-ai-gateway",
12467        reasoning: true,
12468        input: &[InputModality::Text],
12469        cost_input: 0.6,
12470        cost_output: 2.2,
12471        cost_cache_read: 0.11,
12472        cost_cache_write: 0.0,
12473        context_window: 128000,
12474        max_tokens: 96000,
12475    },
12476    ModelEntry {
12477        id: "zai/glm-4.5-air",
12478        name: "GLM 4.5 Air",
12479        api: Api::AnthropicMessages,
12480        provider: "vercel-ai-gateway",
12481        reasoning: true,
12482        input: &[InputModality::Text],
12483        cost_input: 0.19999999999999998,
12484        cost_output: 1.1,
12485        cost_cache_read: 0.03,
12486        cost_cache_write: 0.0,
12487        context_window: 128000,
12488        max_tokens: 96000,
12489    },
12490    ModelEntry {
12491        id: "zai/glm-4.6",
12492        name: "GLM 4.6",
12493        api: Api::AnthropicMessages,
12494        provider: "vercel-ai-gateway",
12495        reasoning: true,
12496        input: &[InputModality::Text],
12497        cost_input: 0.6,
12498        cost_output: 2.2,
12499        cost_cache_read: 0.11,
12500        cost_cache_write: 0.0,
12501        context_window: 200000,
12502        max_tokens: 96000,
12503    },
12504    ModelEntry {
12505        id: "zai/glm-4.6v",
12506        name: "GLM-4.6V",
12507        api: Api::AnthropicMessages,
12508        provider: "vercel-ai-gateway",
12509        reasoning: true,
12510        input: &[InputModality::Text, InputModality::Image],
12511        cost_input: 0.3,
12512        cost_output: 0.8999999999999999,
12513        cost_cache_read: 0.049999999999999996,
12514        cost_cache_write: 0.0,
12515        context_window: 128000,
12516        max_tokens: 24000,
12517    },
12518    ModelEntry {
12519        id: "zai/glm-4.6v-flash",
12520        name: "GLM-4.6V-Flash",
12521        api: Api::AnthropicMessages,
12522        provider: "vercel-ai-gateway",
12523        reasoning: true,
12524        input: &[InputModality::Text, InputModality::Image],
12525        cost_input: 0.0,
12526        cost_output: 0.0,
12527        cost_cache_read: 0.0,
12528        cost_cache_write: 0.0,
12529        context_window: 128000,
12530        max_tokens: 24000,
12531    },
12532    ModelEntry {
12533        id: "zai/glm-4.7",
12534        name: "GLM 4.7",
12535        api: Api::AnthropicMessages,
12536        provider: "vercel-ai-gateway",
12537        reasoning: true,
12538        input: &[InputModality::Text],
12539        cost_input: 2.25,
12540        cost_output: 2.75,
12541        cost_cache_read: 2.25,
12542        cost_cache_write: 0.0,
12543        context_window: 131000,
12544        max_tokens: 40000,
12545    },
12546    ModelEntry {
12547        id: "zai/glm-4.7-flashx",
12548        name: "GLM 4.7 FlashX",
12549        api: Api::AnthropicMessages,
12550        provider: "vercel-ai-gateway",
12551        reasoning: true,
12552        input: &[InputModality::Text],
12553        cost_input: 0.06,
12554        cost_output: 0.39999999999999997,
12555        cost_cache_read: 0.01,
12556        cost_cache_write: 0.0,
12557        context_window: 200000,
12558        max_tokens: 128000,
12559    },
12560    ModelEntry {
12561        id: "zai/glm-5",
12562        name: "GLM 5",
12563        api: Api::AnthropicMessages,
12564        provider: "vercel-ai-gateway",
12565        reasoning: true,
12566        input: &[InputModality::Text],
12567        cost_input: 1.0,
12568        cost_output: 3.1999999999999997,
12569        cost_cache_read: 0.19999999999999998,
12570        cost_cache_write: 0.0,
12571        context_window: 202800,
12572        max_tokens: 131100,
12573    },
12574    ModelEntry {
12575        id: "zai/glm-5-turbo",
12576        name: "GLM 5 Turbo",
12577        api: Api::AnthropicMessages,
12578        provider: "vercel-ai-gateway",
12579        reasoning: true,
12580        input: &[InputModality::Text],
12581        cost_input: 1.2,
12582        cost_output: 4.0,
12583        cost_cache_read: 0.24,
12584        cost_cache_write: 0.0,
12585        context_window: 202800,
12586        max_tokens: 131100,
12587    },
12588    ModelEntry {
12589        id: "zai/glm-5.1",
12590        name: "GLM 5.1",
12591        api: Api::AnthropicMessages,
12592        provider: "vercel-ai-gateway",
12593        reasoning: true,
12594        input: &[InputModality::Text],
12595        cost_input: 1.4,
12596        cost_output: 4.4,
12597        cost_cache_read: 0.26,
12598        cost_cache_write: 0.0,
12599        context_window: 202800,
12600        max_tokens: 64000,
12601    },
12602    ModelEntry {
12603        id: "zai/glm-5v-turbo",
12604        name: "GLM 5V Turbo",
12605        api: Api::AnthropicMessages,
12606        provider: "vercel-ai-gateway",
12607        reasoning: true,
12608        input: &[InputModality::Text, InputModality::Image],
12609        cost_input: 1.2,
12610        cost_output: 4.0,
12611        cost_cache_read: 0.24,
12612        cost_cache_write: 0.0,
12613        context_window: 200000,
12614        max_tokens: 128000,
12615    },
12616];
12617
12618/// xai models (26 entries)
12619static XAI_MODELS: &[ModelEntry] = &[
12620    ModelEntry {
12621        id: "grok-2",
12622        name: "Grok 2",
12623        api: Api::OpenAiCompletions,
12624        provider: "xai",
12625        reasoning: false,
12626        input: &[InputModality::Text],
12627        cost_input: 0.0,
12628        cost_output: 0.0,
12629        cost_cache_read: 2.0,
12630        cost_cache_write: 0.0,
12631        context_window: 131072,
12632        max_tokens: 8192,
12633    },
12634    ModelEntry {
12635        id: "grok-2-1212",
12636        name: "Grok 2 (1212)",
12637        api: Api::OpenAiCompletions,
12638        provider: "xai",
12639        reasoning: false,
12640        input: &[InputModality::Text],
12641        cost_input: 0.0,
12642        cost_output: 0.0,
12643        cost_cache_read: 2.0,
12644        cost_cache_write: 0.0,
12645        context_window: 131072,
12646        max_tokens: 8192,
12647    },
12648    ModelEntry {
12649        id: "grok-2-latest",
12650        name: "Grok 2 Latest",
12651        api: Api::OpenAiCompletions,
12652        provider: "xai",
12653        reasoning: false,
12654        input: &[InputModality::Text],
12655        cost_input: 0.0,
12656        cost_output: 0.0,
12657        cost_cache_read: 2.0,
12658        cost_cache_write: 0.0,
12659        context_window: 131072,
12660        max_tokens: 8192,
12661    },
12662    ModelEntry {
12663        id: "grok-2-vision",
12664        name: "Grok 2 Vision",
12665        api: Api::OpenAiCompletions,
12666        provider: "xai",
12667        reasoning: false,
12668        input: &[InputModality::Text, InputModality::Image],
12669        cost_input: 0.0,
12670        cost_output: 0.0,
12671        cost_cache_read: 2.0,
12672        cost_cache_write: 0.0,
12673        context_window: 8192,
12674        max_tokens: 4096,
12675    },
12676    ModelEntry {
12677        id: "grok-2-vision-1212",
12678        name: "Grok 2 Vision (1212)",
12679        api: Api::OpenAiCompletions,
12680        provider: "xai",
12681        reasoning: false,
12682        input: &[InputModality::Text, InputModality::Image],
12683        cost_input: 0.0,
12684        cost_output: 0.0,
12685        cost_cache_read: 2.0,
12686        cost_cache_write: 0.0,
12687        context_window: 8192,
12688        max_tokens: 4096,
12689    },
12690    ModelEntry {
12691        id: "grok-2-vision-latest",
12692        name: "Grok 2 Vision Latest",
12693        api: Api::OpenAiCompletions,
12694        provider: "xai",
12695        reasoning: false,
12696        input: &[InputModality::Text, InputModality::Image],
12697        cost_input: 0.0,
12698        cost_output: 0.0,
12699        cost_cache_read: 2.0,
12700        cost_cache_write: 0.0,
12701        context_window: 8192,
12702        max_tokens: 4096,
12703    },
12704    ModelEntry {
12705        id: "grok-3",
12706        name: "Grok 3",
12707        api: Api::OpenAiCompletions,
12708        provider: "xai",
12709        reasoning: false,
12710        input: &[InputModality::Text],
12711        cost_input: 0.0,
12712        cost_output: 0.0,
12713        cost_cache_read: 0.75,
12714        cost_cache_write: 0.0,
12715        context_window: 131072,
12716        max_tokens: 8192,
12717    },
12718    ModelEntry {
12719        id: "grok-3-fast",
12720        name: "Grok 3 Fast",
12721        api: Api::OpenAiCompletions,
12722        provider: "xai",
12723        reasoning: false,
12724        input: &[InputModality::Text],
12725        cost_input: 0.0,
12726        cost_output: 0.0,
12727        cost_cache_read: 1.25,
12728        cost_cache_write: 0.0,
12729        context_window: 131072,
12730        max_tokens: 8192,
12731    },
12732    ModelEntry {
12733        id: "grok-3-fast-latest",
12734        name: "Grok 3 Fast Latest",
12735        api: Api::OpenAiCompletions,
12736        provider: "xai",
12737        reasoning: false,
12738        input: &[InputModality::Text],
12739        cost_input: 0.0,
12740        cost_output: 0.0,
12741        cost_cache_read: 1.25,
12742        cost_cache_write: 0.0,
12743        context_window: 131072,
12744        max_tokens: 8192,
12745    },
12746    ModelEntry {
12747        id: "grok-3-latest",
12748        name: "Grok 3 Latest",
12749        api: Api::OpenAiCompletions,
12750        provider: "xai",
12751        reasoning: false,
12752        input: &[InputModality::Text],
12753        cost_input: 0.0,
12754        cost_output: 0.0,
12755        cost_cache_read: 0.75,
12756        cost_cache_write: 0.0,
12757        context_window: 131072,
12758        max_tokens: 8192,
12759    },
12760    ModelEntry {
12761        id: "grok-3-mini",
12762        name: "Grok 3 Mini",
12763        api: Api::OpenAiCompletions,
12764        provider: "xai",
12765        reasoning: true,
12766        input: &[InputModality::Text],
12767        cost_input: 0.0,
12768        cost_output: 0.0,
12769        cost_cache_read: 0.075,
12770        cost_cache_write: 0.0,
12771        context_window: 131072,
12772        max_tokens: 8192,
12773    },
12774    ModelEntry {
12775        id: "grok-3-mini-fast",
12776        name: "Grok 3 Mini Fast",
12777        api: Api::OpenAiCompletions,
12778        provider: "xai",
12779        reasoning: true,
12780        input: &[InputModality::Text],
12781        cost_input: 0.0,
12782        cost_output: 0.0,
12783        cost_cache_read: 0.15,
12784        cost_cache_write: 0.0,
12785        context_window: 131072,
12786        max_tokens: 8192,
12787    },
12788    ModelEntry {
12789        id: "grok-3-mini-fast-latest",
12790        name: "Grok 3 Mini Fast Latest",
12791        api: Api::OpenAiCompletions,
12792        provider: "xai",
12793        reasoning: true,
12794        input: &[InputModality::Text],
12795        cost_input: 0.0,
12796        cost_output: 0.0,
12797        cost_cache_read: 0.15,
12798        cost_cache_write: 0.0,
12799        context_window: 131072,
12800        max_tokens: 8192,
12801    },
12802    ModelEntry {
12803        id: "grok-3-mini-latest",
12804        name: "Grok 3 Mini Latest",
12805        api: Api::OpenAiCompletions,
12806        provider: "xai",
12807        reasoning: true,
12808        input: &[InputModality::Text],
12809        cost_input: 0.0,
12810        cost_output: 0.0,
12811        cost_cache_read: 0.075,
12812        cost_cache_write: 0.0,
12813        context_window: 131072,
12814        max_tokens: 8192,
12815    },
12816    ModelEntry {
12817        id: "grok-4",
12818        name: "Grok 4",
12819        api: Api::OpenAiCompletions,
12820        provider: "xai",
12821        reasoning: true,
12822        input: &[InputModality::Text],
12823        cost_input: 0.0,
12824        cost_output: 0.0,
12825        cost_cache_read: 0.75,
12826        cost_cache_write: 0.0,
12827        context_window: 256000,
12828        max_tokens: 64000,
12829    },
12830    ModelEntry {
12831        id: "grok-4-1-fast",
12832        name: "Grok 4.1 Fast",
12833        api: Api::OpenAiCompletions,
12834        provider: "xai",
12835        reasoning: true,
12836        input: &[InputModality::Text, InputModality::Image],
12837        cost_input: 0.0,
12838        cost_output: 0.0,
12839        cost_cache_read: 0.05,
12840        cost_cache_write: 0.0,
12841        context_window: 2000000,
12842        max_tokens: 30000,
12843    },
12844    ModelEntry {
12845        id: "grok-4-1-fast-non-reasoning",
12846        name: "Grok 4.1 Fast (Non-Reasoning)",
12847        api: Api::OpenAiCompletions,
12848        provider: "xai",
12849        reasoning: false,
12850        input: &[InputModality::Text, InputModality::Image],
12851        cost_input: 0.0,
12852        cost_output: 0.0,
12853        cost_cache_read: 0.05,
12854        cost_cache_write: 0.0,
12855        context_window: 2000000,
12856        max_tokens: 30000,
12857    },
12858    ModelEntry {
12859        id: "grok-4-fast",
12860        name: "Grok 4 Fast",
12861        api: Api::OpenAiCompletions,
12862        provider: "xai",
12863        reasoning: true,
12864        input: &[InputModality::Text, InputModality::Image],
12865        cost_input: 0.0,
12866        cost_output: 0.0,
12867        cost_cache_read: 0.05,
12868        cost_cache_write: 0.0,
12869        context_window: 2000000,
12870        max_tokens: 30000,
12871    },
12872    ModelEntry {
12873        id: "grok-4-fast-non-reasoning",
12874        name: "Grok 4 Fast (Non-Reasoning)",
12875        api: Api::OpenAiCompletions,
12876        provider: "xai",
12877        reasoning: false,
12878        input: &[InputModality::Text, InputModality::Image],
12879        cost_input: 0.0,
12880        cost_output: 0.0,
12881        cost_cache_read: 0.05,
12882        cost_cache_write: 0.0,
12883        context_window: 2000000,
12884        max_tokens: 30000,
12885    },
12886    ModelEntry {
12887        id: "grok-4.20-0309-non-reasoning",
12888        name: "Grok 4.20 (Non-Reasoning)",
12889        api: Api::OpenAiCompletions,
12890        provider: "xai",
12891        reasoning: false,
12892        input: &[InputModality::Text, InputModality::Image],
12893        cost_input: 0.0,
12894        cost_output: 0.0,
12895        cost_cache_read: 0.2,
12896        cost_cache_write: 0.0,
12897        context_window: 2000000,
12898        max_tokens: 30000,
12899    },
12900    ModelEntry {
12901        id: "grok-4.20-0309-reasoning",
12902        name: "Grok 4.20 (Reasoning)",
12903        api: Api::OpenAiCompletions,
12904        provider: "xai",
12905        reasoning: true,
12906        input: &[InputModality::Text, InputModality::Image],
12907        cost_input: 0.0,
12908        cost_output: 0.0,
12909        cost_cache_read: 0.2,
12910        cost_cache_write: 0.0,
12911        context_window: 2000000,
12912        max_tokens: 30000,
12913    },
12914    ModelEntry {
12915        id: "grok-4.3",
12916        name: "Grok 4.3",
12917        api: Api::OpenAiCompletions,
12918        provider: "xai",
12919        reasoning: true,
12920        input: &[InputModality::Text, InputModality::Image],
12921        cost_input: 0.0,
12922        cost_output: 0.0,
12923        cost_cache_read: 0.2,
12924        cost_cache_write: 0.0,
12925        context_window: 1000000,
12926        max_tokens: 30000,
12927    },
12928    ModelEntry {
12929        id: "grok-beta",
12930        name: "Grok Beta",
12931        api: Api::OpenAiCompletions,
12932        provider: "xai",
12933        reasoning: false,
12934        input: &[InputModality::Text],
12935        cost_input: 0.0,
12936        cost_output: 0.0,
12937        cost_cache_read: 5.0,
12938        cost_cache_write: 0.0,
12939        context_window: 131072,
12940        max_tokens: 4096,
12941    },
12942    ModelEntry {
12943        id: "grok-code-fast-1",
12944        name: "Grok Code Fast 1",
12945        api: Api::OpenAiCompletions,
12946        provider: "xai",
12947        reasoning: true,
12948        input: &[InputModality::Text],
12949        cost_input: 0.0,
12950        cost_output: 0.0,
12951        cost_cache_read: 0.02,
12952        cost_cache_write: 0.0,
12953        context_window: 256000,
12954        max_tokens: 10000,
12955    },
12956    ModelEntry {
12957        id: "grok-vision-beta",
12958        name: "Grok Vision Beta",
12959        api: Api::OpenAiCompletions,
12960        provider: "xai",
12961        reasoning: false,
12962        input: &[InputModality::Text, InputModality::Image],
12963        cost_input: 0.0,
12964        cost_output: 0.0,
12965        cost_cache_read: 5.0,
12966        cost_cache_write: 0.0,
12967        context_window: 8192,
12968        max_tokens: 4096,
12969    },
12970    ModelEntry {
12971        id: "grok-build-0.1",
12972        name: "Grok Build 0.1",
12973        api: Api::OpenAiCompletions,
12974        provider: "xai",
12975        reasoning: true,
12976        input: &[InputModality::Text, InputModality::Image],
12977        cost_input: 1.0,
12978        cost_output: 2.0,
12979        cost_cache_read: 0.2,
12980        cost_cache_write: 0.0,
12981        context_window: 256000,
12982        max_tokens: 256000,
12983    },
12984];
12985
12986/// xiaomi models (5 entries)
12987static XIAOMI_MODELS: &[ModelEntry] = &[
12988    ModelEntry {
12989        id: "mimo-v2-flash",
12990        name: "MiMo-V2-Flash",
12991        api: Api::AnthropicMessages,
12992        provider: "xiaomi",
12993        reasoning: true,
12994        input: &[InputModality::Text],
12995        cost_input: 0.0,
12996        cost_output: 0.0,
12997        cost_cache_read: 0.01,
12998        cost_cache_write: 0.0,
12999        context_window: 256000,
13000        max_tokens: 64000,
13001    },
13002    ModelEntry {
13003        id: "mimo-v2-omni",
13004        name: "MiMo-V2-Omni",
13005        api: Api::AnthropicMessages,
13006        provider: "xiaomi",
13007        reasoning: true,
13008        input: &[InputModality::Text, InputModality::Image],
13009        cost_input: 0.0,
13010        cost_output: 0.0,
13011        cost_cache_read: 0.08,
13012        cost_cache_write: 0.0,
13013        context_window: 256000,
13014        max_tokens: 128000,
13015    },
13016    ModelEntry {
13017        id: "mimo-v2-pro",
13018        name: "MiMo-V2-Pro",
13019        api: Api::AnthropicMessages,
13020        provider: "xiaomi",
13021        reasoning: true,
13022        input: &[InputModality::Text],
13023        cost_input: 0.0,
13024        cost_output: 0.0,
13025        cost_cache_read: 0.2,
13026        cost_cache_write: 0.0,
13027        context_window: 1000000,
13028        max_tokens: 128000,
13029    },
13030    ModelEntry {
13031        id: "mimo-v2.5",
13032        name: "MiMo-V2.5",
13033        api: Api::AnthropicMessages,
13034        provider: "xiaomi",
13035        reasoning: true,
13036        input: &[InputModality::Text],
13037        cost_input: 0.0,
13038        cost_output: 0.0,
13039        cost_cache_read: 0.08,
13040        cost_cache_write: 0.0,
13041        context_window: 1048576,
13042        max_tokens: 131072,
13043    },
13044    ModelEntry {
13045        id: "mimo-v2.5-pro",
13046        name: "MiMo-V2.5-Pro",
13047        api: Api::AnthropicMessages,
13048        provider: "xiaomi",
13049        reasoning: true,
13050        input: &[InputModality::Text, InputModality::Image],
13051        cost_input: 0.0,
13052        cost_output: 0.0,
13053        cost_cache_read: 0.2,
13054        cost_cache_write: 0.0,
13055        context_window: 1048576,
13056        max_tokens: 131072,
13057    },
13058];
13059
13060/// zai models (5 entries)
13061static ZAI_MODELS: &[ModelEntry] = &[
13062    ModelEntry {
13063        id: "glm-4.5-air",
13064        name: "GLM-4.5-Air",
13065        api: Api::OpenAiCompletions,
13066        provider: "zai",
13067        reasoning: true,
13068        input: &[InputModality::Text],
13069        cost_input: 0.0,
13070        cost_output: 0.0,
13071        cost_cache_read: 0.0,
13072        cost_cache_write: 0.0,
13073        context_window: 131072,
13074        max_tokens: 98304,
13075    },
13076    ModelEntry {
13077        id: "glm-4.7",
13078        name: "GLM-4.7",
13079        api: Api::OpenAiCompletions,
13080        provider: "zai",
13081        reasoning: true,
13082        input: &[InputModality::Text],
13083        cost_input: 0.0,
13084        cost_output: 0.0,
13085        cost_cache_read: 0.0,
13086        cost_cache_write: 0.0,
13087        context_window: 204800,
13088        max_tokens: 131072,
13089    },
13090    ModelEntry {
13091        id: "glm-5-turbo",
13092        name: "GLM-5-Turbo",
13093        api: Api::OpenAiCompletions,
13094        provider: "zai",
13095        reasoning: true,
13096        input: &[InputModality::Text],
13097        cost_input: 0.0,
13098        cost_output: 0.0,
13099        cost_cache_read: 0.0,
13100        cost_cache_write: 0.0,
13101        context_window: 200000,
13102        max_tokens: 131072,
13103    },
13104    ModelEntry {
13105        id: "glm-5.1",
13106        name: "GLM-5.1",
13107        api: Api::OpenAiCompletions,
13108        provider: "zai",
13109        reasoning: true,
13110        input: &[InputModality::Text],
13111        cost_input: 0.0,
13112        cost_output: 0.0,
13113        cost_cache_read: 0.0,
13114        cost_cache_write: 0.0,
13115        context_window: 200000,
13116        max_tokens: 131072,
13117    },
13118    ModelEntry {
13119        id: "glm-5v-turbo",
13120        name: "glm-5v-turbo",
13121        api: Api::OpenAiCompletions,
13122        provider: "zai",
13123        reasoning: true,
13124        input: &[InputModality::Text, InputModality::Image],
13125        cost_input: 0.0,
13126        cost_output: 0.0,
13127        cost_cache_read: 0.0,
13128        cost_cache_write: 0.0,
13129        context_window: 200000,
13130        max_tokens: 131072,
13131    },
13132];
13133
13134/// All model arrays indexed by provider
13135/// together models (10 entries)
13136static TOGETHER_MODELS: &[ModelEntry] = &[
13137    ModelEntry {
13138        id: "Qwen/Qwen3-235B-A22B-Instruct-2507-tput",
13139        name: "Qwen3 235B A22B Instruct 2507 FP8",
13140        api: Api::OpenAiCompletions,
13141        provider: "together",
13142        reasoning: true,
13143        input: &[InputModality::Text],
13144        cost_input: 0.2,
13145        cost_output: 0.6,
13146        cost_cache_read: 0.0,
13147        cost_cache_write: 0.0,
13148        context_window: 262144,
13149        max_tokens: 262144,
13150    },
13151    ModelEntry {
13152        id: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
13153        name: "Qwen3 Coder 480B A35B Instruct",
13154        api: Api::OpenAiCompletions,
13155        provider: "together",
13156        reasoning: false,
13157        input: &[InputModality::Text],
13158        cost_input: 2.0,
13159        cost_output: 2.0,
13160        cost_cache_read: 0.0,
13161        cost_cache_write: 0.0,
13162        context_window: 262144,
13163        max_tokens: 262144,
13164    },
13165    ModelEntry {
13166        id: "Qwen/Qwen3-Coder-Next-FP8",
13167        name: "Qwen3 Coder Next FP8",
13168        api: Api::OpenAiCompletions,
13169        provider: "together",
13170        reasoning: true,
13171        input: &[InputModality::Text],
13172        cost_input: 0.5,
13173        cost_output: 1.2,
13174        cost_cache_read: 0.0,
13175        cost_cache_write: 0.0,
13176        context_window: 262144,
13177        max_tokens: 262144,
13178    },
13179    ModelEntry {
13180        id: "Qwen/Qwen3.6-Plus",
13181        name: "Qwen3.6 Plus",
13182        api: Api::OpenAiCompletions,
13183        provider: "together",
13184        reasoning: true,
13185        input: &[InputModality::Text],
13186        cost_input: 0.5,
13187        cost_output: 3.0,
13188        cost_cache_read: 0.0,
13189        cost_cache_write: 0.0,
13190        context_window: 1000000,
13191        max_tokens: 500000,
13192    },
13193    ModelEntry {
13194        id: "Qwen/Qwen3.7-Max",
13195        name: "Qwen3.7 Max",
13196        api: Api::OpenAiCompletions,
13197        provider: "together",
13198        reasoning: true,
13199        input: &[InputModality::Text],
13200        cost_input: 2.5,
13201        cost_output: 7.5,
13202        cost_cache_read: 0.0,
13203        cost_cache_write: 0.0,
13204        context_window: 1000000,
13205        max_tokens: 500000,
13206    },
13207    ModelEntry {
13208        id: "deepseek-ai/DeepSeek-V3",
13209        name: "DeepSeek V3",
13210        api: Api::OpenAiCompletions,
13211        provider: "together",
13212        reasoning: true,
13213        input: &[InputModality::Text],
13214        cost_input: 1.25,
13215        cost_output: 1.25,
13216        cost_cache_read: 0.0,
13217        cost_cache_write: 0.0,
13218        context_window: 131072,
13219        max_tokens: 131072,
13220    },
13221    ModelEntry {
13222        id: "deepseek-ai/DeepSeek-V3-1",
13223        name: "DeepSeek V3.1",
13224        api: Api::OpenAiCompletions,
13225        provider: "together",
13226        reasoning: true,
13227        input: &[InputModality::Text],
13228        cost_input: 0.6,
13229        cost_output: 1.7,
13230        cost_cache_read: 0.0,
13231        cost_cache_write: 0.0,
13232        context_window: 131072,
13233        max_tokens: 131072,
13234    },
13235    ModelEntry {
13236        id: "essentialai/Rnj-1-Instruct",
13237        name: "Rnj-1 Instruct",
13238        api: Api::OpenAiCompletions,
13239        provider: "together",
13240        reasoning: false,
13241        input: &[InputModality::Text],
13242        cost_input: 0.15,
13243        cost_output: 0.15,
13244        cost_cache_read: 0.0,
13245        cost_cache_write: 0.0,
13246        context_window: 32768,
13247        max_tokens: 32768,
13248    },
13249    ModelEntry {
13250        id: "google/gemma-4-31B-it",
13251        name: "Gemma 4 31B Instruct",
13252        api: Api::OpenAiCompletions,
13253        provider: "together",
13254        reasoning: true,
13255        input: &[InputModality::Text, InputModality::Image],
13256        cost_input: 0.2,
13257        cost_output: 0.5,
13258        cost_cache_read: 0.0,
13259        cost_cache_write: 0.0,
13260        context_window: 262144,
13261        max_tokens: 131072,
13262    },
13263    ModelEntry {
13264        id: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
13265        name: "Llama 3.3 70B",
13266        api: Api::OpenAiCompletions,
13267        provider: "together",
13268        reasoning: false,
13269        input: &[InputModality::Text],
13270        cost_input: 0.88,
13271        cost_output: 0.88,
13272        cost_cache_read: 0.0,
13273        cost_cache_write: 0.0,
13274        context_window: 131072,
13275        max_tokens: 131072,
13276    },
13277];
13278
13279static ALL_PROVIDER_MODELS: &[(&str, &[ModelEntry])] = &[
13280    ("amazon-bedrock", AMAZON_BEDROCK_MODELS),
13281    ("anthropic", ANTHROPIC_MODELS),
13282    ("azure-openai-responses", AZURE_OPENAI_RESPONSES_MODELS),
13283    ("cerebras", CEREBRAS_MODELS),
13284    ("cloudflare-ai-gateway", CLOUDFLARE_AI_GATEWAY_MODELS),
13285    ("cloudflare-workers-ai", CLOUDFLARE_WORKERS_AI_MODELS),
13286    ("deepseek", DEEPSEEK_MODELS),
13287    ("fireworks", FIREWORKS_MODELS),
13288    ("github-copilot", GITHUB_COPILOT_MODELS),
13289    ("google", GOOGLE_MODELS),
13290    ("google-vertex", GOOGLE_VERTEX_MODELS),
13291    ("groq", GROQ_MODELS),
13292    ("huggingface", HUGGINGFACE_MODELS),
13293    ("kimi-coding", KIMI_CODING_MODELS),
13294    ("minimax", MINIMAX_MODELS),
13295    ("minimax-cn", MINIMAX_CN_MODELS),
13296    ("mistral", MISTRAL_MODELS),
13297    ("moonshotai", MOONSHOTAI_MODELS),
13298    ("moonshotai-cn", MOONSHOTAI_CN_MODELS),
13299    ("openai", OPENAI_MODELS),
13300    ("openai-codex", OPENAI_CODEX_MODELS),
13301    ("opencode", OPENCODE_MODELS),
13302    ("opencode-go", OPENCODE_GO_MODELS),
13303    ("openrouter", OPENROUTER_MODELS),
13304    ("vercel-ai-gateway", VERCEL_AI_GATEWAY_MODELS),
13305    ("xai", XAI_MODELS),
13306    ("xiaomi", XIAOMI_MODELS),
13307    ("zai", ZAI_MODELS),
13308    ("together", TOGETHER_MODELS),
13309];
13310
13311// ── Lazy-initialized indexes for O(1) lookups ──────────────────────────
13312
13313/// Maps `"provider/id"` → `&'static ModelEntry` for O(1) model lookups.
13314static MODEL_INDEX: OnceLock<HashMap<&'static str, &'static ModelEntry>> = OnceLock::new();
13315
13316fn model_index() -> &'static HashMap<&'static str, &'static ModelEntry> {
13317    MODEL_INDEX.get_or_init(|| {
13318        let mut map = HashMap::with_capacity(model_count());
13319        for (provider, models) in ALL_PROVIDER_MODELS.iter() {
13320            for model in models.iter() {
13321                let key = format!("{}/{}", provider, model.id);
13322                // Leak the formatted key to obtain `&'static str`.
13323                // This happens once at first access; the total leaked memory
13324                // is bounded by the model database size (~60 KiB).
13325                let key_static: &'static str = Box::leak(key.into_boxed_str());
13326                map.insert(key_static, model);
13327            }
13328        }
13329        map
13330    })
13331}
13332
13333/// Maps provider name → its model slice for O(1) provider lookups.
13334static PROVIDER_INDEX: OnceLock<HashMap<&'static str, &'static [ModelEntry]>> = OnceLock::new();
13335
13336fn provider_index() -> &'static HashMap<&'static str, &'static [ModelEntry]> {
13337    PROVIDER_INDEX.get_or_init(|| {
13338        let mut map = HashMap::with_capacity(ALL_PROVIDER_MODELS.len());
13339        for (provider, models) in ALL_PROVIDER_MODELS.iter() {
13340            map.insert(*provider, *models);
13341        }
13342        map
13343    })
13344}
13345
13346// ── Public API ───────────────────────────────────────────────────────────
13347
13348/// Look up a specific model entry by provider and model ID.
13349///
13350/// Uses an O(1) index internally. Falls back gracefully if not found.
13351///
13352/// # Arguments
13353/// * `provider` - The provider name (e.g., "anthropic", "openai")
13354/// * `id` - The model ID (e.g., "claude-sonnet-4-20250514")
13355///
13356/// # Returns
13357/// `Some(&ModelEntry)` if found, `None` otherwise.
13358///
13359/// # Example
13360/// ```ignore
13361/// use oxi_ai::model_db::get_model_entry;
13362/// let m = get_model_entry("openai", "gpt-4o").unwrap();
13363/// assert_eq!(m.name, "GPT-4o");
13364/// ```
13365pub fn get_model_entry(provider: &str, id: &str) -> Option<&'static ModelEntry> {
13366    let key = format!("{}/{}", provider, id);
13367    model_index().get(key.as_str()).copied()
13368}
13369
13370/// Get all model entries for a given provider.
13371///
13372/// Uses an O(1) index internally.
13373///
13374/// # Arguments
13375/// * `provider` - The provider name (e.g., "anthropic", "openai")
13376///
13377/// # Returns
13378/// A slice of `ModelEntry` for the provider, or an empty slice if not found.
13379pub fn get_provider_models(provider: &str) -> &'static [ModelEntry] {
13380    provider_index().get(provider).copied().unwrap_or(&[])
13381}
13382
13383/// Get all model entries across all providers.
13384///
13385/// Returns a flat iterator over every `ModelEntry` in the database.
13386pub fn get_all_models() -> impl Iterator<Item = &'static ModelEntry> {
13387    ALL_PROVIDER_MODELS
13388        .iter()
13389        .flat_map(|(_, models)| models.iter())
13390}
13391
13392/// Get the total number of models in the database.
13393pub fn model_count() -> usize {
13394    ALL_PROVIDER_MODELS.iter().map(|(_, m)| m.len()).sum()
13395}
13396
13397/// Get all known provider names.
13398pub fn get_providers() -> Vec<&'static str> {
13399    ALL_PROVIDER_MODELS.iter().map(|(name, _)| *name).collect()
13400}
13401
13402/// Search models by name or ID pattern (case-insensitive).
13403pub fn search_models(pattern: &str) -> Vec<&'static ModelEntry> {
13404    let lower = pattern.to_lowercase();
13405    get_all_models()
13406        .filter(|m| m.id.to_lowercase().contains(&lower) || m.name.to_lowercase().contains(&lower))
13407        .collect()
13408}
13409
13410/// Find models that support reasoning/thinking.
13411pub fn get_reasoning_models() -> Vec<&'static ModelEntry> {
13412    get_all_models().filter(|m| m.reasoning).collect()
13413}
13414
13415/// Find models that support image/vision input.
13416pub fn get_vision_models() -> Vec<&'static ModelEntry> {
13417    get_all_models().filter(|m| m.supports_vision()).collect()
13418}
13419
13420/// Find the cheapest models by input cost, returning up to `limit` results.
13421pub fn get_cheapest_models(limit: usize) -> Vec<&'static ModelEntry> {
13422    let mut all: Vec<_> = get_all_models().collect();
13423    all.sort_by(|a, b| {
13424        a.cost_input
13425            .partial_cmp(&b.cost_input)
13426            .unwrap_or(std::cmp::Ordering::Equal)
13427    });
13428    all.truncate(limit);
13429    all
13430}
13431
13432#[cfg(test)]
13433mod tests {
13434    use super::*;
13435
13436    #[test]
13437    fn test_total_model_count() {
13438        let count = model_count();
13439        assert!(count >= 934, "Expected at least 934 models, got {}", count);
13440    }
13441
13442    #[test]
13443    fn test_get_anthropic_model() {
13444        let m = get_model_entry("anthropic", "claude-3-5-sonnet-20240620");
13445        assert!(m.is_some(), "Claude Sonnet 3.5 should exist");
13446        let m = m.unwrap();
13447        assert_eq!(m.provider, "anthropic");
13448        assert!(m.context_window >= 200_000);
13449    }
13450
13451    #[test]
13452    fn test_get_openai_model() {
13453        let m = get_model_entry("openai", "gpt-4o");
13454        assert!(m.is_some(), "GPT-4o should exist");
13455        let m = m.unwrap();
13456        assert_eq!(m.provider, "openai");
13457    }
13458
13459    #[test]
13460    fn test_provider_models() {
13461        let anthropic = get_provider_models("anthropic");
13462        assert!(!anthropic.is_empty(), "Anthropic should have models");
13463        assert!(anthropic.iter().all(|m| m.provider == "anthropic"));
13464
13465        let unknown = get_provider_models("nonexistent-provider");
13466        assert!(unknown.is_empty());
13467    }
13468
13469    #[test]
13470    fn test_search_models() {
13471        let results = search_models("claude");
13472        assert!(!results.is_empty(), "Should find Claude models");
13473        assert!(results
13474            .iter()
13475            .all(|m| m.name.to_lowercase().contains("claude")
13476                || m.id.to_lowercase().contains("claude")));
13477    }
13478
13479    #[test]
13480    fn test_all_providers() {
13481        let providers = get_providers();
13482        assert!(providers.contains(&"openai"), "Should have openai");
13483        assert!(providers.contains(&"anthropic"), "Should have anthropic");
13484    }
13485
13486    #[test]
13487    fn test_reasoning_models() {
13488        let reasoning = get_reasoning_models();
13489        assert!(!reasoning.is_empty(), "Should have reasoning models");
13490        assert!(reasoning.iter().all(|m| m.reasoning));
13491    }
13492
13493    #[test]
13494    fn test_vision_models() {
13495        let vision = get_vision_models();
13496        assert!(!vision.is_empty(), "Should have vision models");
13497        assert!(vision.iter().all(|m| m.supports_vision()));
13498    }
13499
13500    #[test]
13501    fn test_cheapest_models() {
13502        let cheapest = get_cheapest_models(5);
13503        assert_eq!(cheapest.len(), 5.min(model_count()));
13504        for i in 1..cheapest.len() {
13505            assert!(cheapest[i].cost_input >= cheapest[i - 1].cost_input);
13506        }
13507    }
13508}