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::Gemini31ProPreview,
16            ModelId::Gemini31ProPreviewCustomTools,
17            ModelId::Gemini3ProPreview,
18            ModelId::Gemini3FlashPreview,
19            // OpenAI models
20            ModelId::GPT5,
21            ModelId::GPT52,
22            ModelId::GPT52Codex,
23            ModelId::GPT5Codex,
24            ModelId::GPT5Mini,
25            ModelId::GPT5Nano,
26            ModelId::GPT51,
27            ModelId::GPT51Codex,
28            ModelId::GPT51CodexMax,
29            ModelId::GPT51Mini,
30            ModelId::CodexMiniLatest,
31            // Anthropic models
32            ModelId::ClaudeOpus46,
33            ModelId::ClaudeSonnet46,
34            ModelId::ClaudeOpus45,
35            ModelId::ClaudeOpus41,
36            ModelId::ClaudeSonnet45,
37            ModelId::ClaudeHaiku45,
38            ModelId::ClaudeOpus4,
39            ModelId::ClaudeSonnet4,
40            ModelId::ClaudeSonnet37,
41            ModelId::ClaudeHaiku35,
42            // DeepSeek models
43            ModelId::DeepSeekChat,
44            ModelId::DeepSeekReasoner,
45            // xAI models
46            ModelId::XaiGrok4,
47            ModelId::XaiGrok4Mini,
48            ModelId::XaiGrok4Code,
49            ModelId::XaiGrok4CodeLatest,
50            ModelId::XaiGrok4Vision,
51            // Z.AI models
52            ModelId::ZaiGlm5,
53            // Moonshot models
54            ModelId::MoonshotMinimaxM25,
55            ModelId::MoonshotQwen3CoderNext,
56            // Ollama models
57            ModelId::OllamaGptOss20b,
58            ModelId::OllamaGptOss20bCloud,
59            ModelId::OllamaGptOss120bCloud,
60            ModelId::OllamaQwen317b,
61            ModelId::OllamaDeepseekV32Cloud,
62            ModelId::OllamaQwen3Next80bCloud,
63            ModelId::OllamaMistralLarge3675bCloud,
64            ModelId::OllamaQwen3Coder480bCloud,
65            ModelId::OllamaGlm5Cloud,
66            ModelId::OllamaGemini3ProPreviewLatestCloud,
67            ModelId::OllamaGemini3FlashPreviewCloud,
68            ModelId::OllamaDevstral2123bCloud,
69            ModelId::OllamaMinimaxM2Cloud,
70            ModelId::OllamaMinimaxM25Cloud,
71            ModelId::OllamaNemotron3Nano30bCloud,
72            // LM Studio models
73            ModelId::LmStudioMetaLlama38BInstruct,
74            ModelId::LmStudioMetaLlama318BInstruct,
75            ModelId::LmStudioQwen257BInstruct,
76            ModelId::LmStudioGemma22BIt,
77            ModelId::LmStudioGemma29BIt,
78            ModelId::LmStudioPhi31Mini4kInstruct,
79            // MiniMax models
80            ModelId::MinimaxM25,
81            ModelId::MinimaxM2,
82            // Hugging Face models
83            ModelId::HuggingFaceDeepseekV32,
84            ModelId::HuggingFaceOpenAIGptOss20b,
85            ModelId::HuggingFaceOpenAIGptOss120b,
86            ModelId::HuggingFaceMinimaxM25Novita,
87            ModelId::HuggingFaceDeepseekV32Novita,
88            ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
89            ModelId::HuggingFaceGlm5Novita,
90            ModelId::HuggingFaceQwen3CoderNextNovita,
91            ModelId::OpenRouterMinimaxM25,
92            ModelId::OpenRouterQwen3CoderNext,
93        ];
94        models.extend(Self::openrouter_models());
95        models
96    }
97
98    /// Get all models for a specific provider
99    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
100        Self::all_models()
101            .into_iter()
102            .filter(|model| model.provider() == provider)
103            .collect()
104    }
105}