Skip to main content

vtcode_config/models/model_id/
collection.rs

1use crate::models::Provider;
2
3use super::ModelId;
4
5impl ModelId {
6    /// Return the OpenRouter vendor slug when this identifier maps to a marketplace listing
7    pub fn openrouter_vendor(&self) -> Option<&'static str> {
8        self.openrouter_metadata().map(|meta| meta.vendor)
9    }
10
11    /// Get all available models as a vector
12    pub fn all_models() -> Vec<ModelId> {
13        let mut models = vec![
14            // Gemini models
15            ModelId::Gemini25FlashPreview,
16            ModelId::Gemini25Flash,
17            ModelId::Gemini25FlashLite,
18            ModelId::Gemini25Pro,
19            // OpenAI models
20            ModelId::GPT5,
21            ModelId::GPT5Codex,
22            ModelId::GPT5Mini,
23            ModelId::GPT5Nano,
24            ModelId::CodexMiniLatest,
25            // Anthropic models
26            ModelId::ClaudeOpus45,
27            ModelId::ClaudeOpus41,
28            ModelId::ClaudeSonnet45,
29            ModelId::ClaudeHaiku45,
30            ModelId::ClaudeSonnet4,
31            // DeepSeek models
32            ModelId::DeepSeekChat,
33            ModelId::DeepSeekReasoner,
34            // xAI models
35            ModelId::XaiGrok4,
36            ModelId::XaiGrok4Mini,
37            ModelId::XaiGrok4Code,
38            ModelId::XaiGrok4CodeLatest,
39            ModelId::XaiGrok4Vision,
40            // Z.AI models
41            ModelId::ZaiGlm46,
42            ModelId::ZaiGlm47Flash,
43            ModelId::ZaiGlm45,
44            ModelId::ZaiGlm45Air,
45            ModelId::ZaiGlm45X,
46            ModelId::ZaiGlm45Airx,
47            ModelId::ZaiGlm45Flash,
48            ModelId::ZaiGlm432b0414128k,
49            // Ollama models
50            ModelId::OllamaGptOss20b,
51            ModelId::OllamaGptOss20bCloud,
52            ModelId::OllamaGptOss120bCloud,
53            ModelId::OllamaQwen317b,
54            ModelId::OllamaDeepseekV32Cloud,
55            ModelId::OllamaQwen3Next80bCloud,
56            ModelId::OllamaMistralLarge3675bCloud,
57            ModelId::OllamaKimiK2ThinkingCloud,
58            ModelId::OllamaQwen3Coder480bCloud,
59            ModelId::OllamaGlm46Cloud,
60            ModelId::OllamaGlm47Cloud,
61            ModelId::OllamaGemini3ProPreviewLatestCloud,
62            ModelId::OllamaGemini3FlashPreviewCloud,
63            ModelId::OllamaDevstral2123bCloud,
64            ModelId::OllamaMinimaxM2Cloud,
65            ModelId::OllamaMinimaxM21Cloud,
66            ModelId::OllamaNemotron3Nano30bCloud,
67            // LM Studio models
68            ModelId::LmStudioMetaLlama38BInstruct,
69            ModelId::LmStudioMetaLlama318BInstruct,
70            ModelId::LmStudioQwen257BInstruct,
71            ModelId::LmStudioGemma22BIt,
72            ModelId::LmStudioGemma29BIt,
73            ModelId::LmStudioPhi31Mini4kInstruct,
74            // MiniMax models
75            ModelId::MinimaxM21,
76            ModelId::MinimaxM21Lightning,
77            ModelId::MinimaxM2,
78            // Hugging Face models
79            ModelId::HuggingFaceDeepseekV32,
80            ModelId::HuggingFaceOpenAIGptOss20b,
81            ModelId::HuggingFaceOpenAIGptOss120b,
82            ModelId::HuggingFaceGlm47,
83            ModelId::HuggingFaceGlm47FlashNovita,
84            ModelId::HuggingFaceKimiK2Thinking,
85            ModelId::HuggingFaceMinimaxM21Novita,
86            ModelId::HuggingFaceDeepseekV32Novita,
87            ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
88        ];
89        models.extend(Self::openrouter_models());
90        models
91    }
92
93    /// Get all models for a specific provider
94    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
95        Self::all_models()
96            .into_iter()
97            .filter(|model| model.provider() == provider)
98            .collect()
99    }
100}