Skip to main content

vtcode_config/models/model_id/
collection.rs

1use crate::models::Provider;
2use hashbrown::HashSet;
3
4use super::ModelId;
5
6impl ModelId {
7    /// Return the OpenRouter vendor slug when this identifier maps to a marketplace listing
8    pub fn openrouter_vendor(&self) -> Option<&'static str> {
9        self.openrouter_metadata().map(|meta| meta.vendor)
10    }
11
12    /// Get all available models as a vector
13    pub fn all_models() -> Vec<ModelId> {
14        let mut models = vec![
15            // Gemini models
16            ModelId::Gemini31ProPreview,
17            ModelId::Gemini31ProPreviewCustomTools,
18            ModelId::Gemini31FlashLitePreview,
19            ModelId::Gemini35Flash,
20            ModelId::Gemini3FlashPreview,
21            // OpenAI models
22            ModelId::GPT55,
23            ModelId::GPT54,
24            ModelId::GPT54Pro,
25            ModelId::GPT54Nano,
26            ModelId::GPT54Mini,
27            ModelId::GPT53Codex,
28            ModelId::GPT52Codex,
29            ModelId::GPT51Codex,
30            ModelId::GPT51CodexMax,
31            ModelId::GPT5Codex,
32            ModelId::GPT52,
33            ModelId::GPT5,
34            ModelId::GPT5Mini,
35            ModelId::GPT5Nano,
36            ModelId::OpenAIGptOss20b,
37            ModelId::OpenAIGptOss120b,
38            // Anthropic models
39            ModelId::ClaudeOpus48,
40            ModelId::ClaudeOpus47,
41            ModelId::ClaudeOpus46,
42            ModelId::ClaudeSonnet46,
43            ModelId::ClaudeHaiku45,
44            ModelId::ClaudeMythosPreview,
45            ModelId::CopilotAuto,
46            ModelId::CopilotGPT52Codex,
47            ModelId::CopilotGPT51CodexMax,
48            ModelId::CopilotGPT54,
49            ModelId::CopilotGPT54Mini,
50            ModelId::CopilotClaudeSonnet46,
51            // DeepSeek models
52            ModelId::DeepSeekV4Pro,
53            ModelId::DeepSeekV4Flash,
54            // Mistral models
55            ModelId::MistralLarge3,
56            // Z.AI models
57            ModelId::ZaiGlm5,
58            ModelId::ZaiGlm51,
59            // MiMo models
60            ModelId::MiMoV25Pro,
61            ModelId::MiMoV25,
62            ModelId::MiMoV2Flash,
63            // Moonshot models
64            ModelId::MoonshotKimiK26,
65            ModelId::MoonshotKimiK25,
66            // OpenCode Zen models
67            ModelId::OpenCodeZenGPT54,
68            ModelId::OpenCodeZenGPT54Mini,
69            ModelId::OpenCodeZenClaudeSonnet46,
70            ModelId::OpenCodeZenGlm51,
71            ModelId::OpenCodeZenKimiK25,
72            // OpenCode Go models
73            ModelId::OpenCodeGoGlm51,
74            ModelId::OpenCodeGoKimiK25,
75            ModelId::OpenCodeGoMinimaxM25,
76            ModelId::OpenCodeGoMinimaxM27,
77            // Qwen models
78            ModelId::Qwen37Max,
79            ModelId::Qwen36Flash,
80            ModelId::Qwen36Plus,
81            ModelId::QwenDeepSeekV4Flash,
82            ModelId::QwenDeepSeekV4Pro,
83            ModelId::QwenGlm51,
84            // Ollama models
85            ModelId::OllamaGptOss20b,
86            ModelId::OllamaGptOss20bCloud,
87            ModelId::OllamaGptOss120bCloud,
88            ModelId::OllamaQwen317b,
89            ModelId::OllamaQwen3CoderNext,
90            ModelId::OllamaDeepseekV32Cloud,
91            ModelId::OllamaDeepseekV4FlashCloud,
92            ModelId::OllamaQwen3Next80bCloud,
93            ModelId::OllamaDeepseekV4ProCloud,
94            ModelId::OllamaGlm5Cloud,
95            ModelId::OllamaGlm51Cloud,
96            ModelId::OllamaGemini3FlashPreviewCloud,
97            ModelId::OllamaMinimaxM2Cloud,
98            ModelId::OllamaMinimaxM27Cloud,
99            ModelId::OllamaMinimaxM25Cloud,
100            ModelId::OllamaKimiK26Cloud,
101            ModelId::OllamaNemotron3SuperCloud,
102            ModelId::OllamaLagunaXs2,
103            // MiniMax models
104            ModelId::MinimaxM27,
105            ModelId::MinimaxM25,
106            // Hugging Face models
107            ModelId::HuggingFaceDeepseekV32,
108            ModelId::HuggingFaceOpenAIGptOss20b,
109            ModelId::HuggingFaceOpenAIGptOss120b,
110            ModelId::HuggingFaceMinimaxM25Novita,
111            ModelId::HuggingFaceDeepseekV32Novita,
112            ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
113            ModelId::HuggingFaceGlm5Novita,
114            ModelId::HuggingFaceGlm51ZaiOrg,
115            ModelId::HuggingFaceQwen3CoderNextNovita,
116            ModelId::HuggingFaceQwen35397BA17BTogether,
117            ModelId::HuggingFaceKimiK26Novita,
118            ModelId::HuggingFaceDeepseekV4FlashNovita,
119            ModelId::HuggingFaceDeepseekV4ProTogether,
120            ModelId::HuggingFaceStep35Flash,
121            ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
122            ModelId::OpenRouterMinimaxM25,
123            ModelId::OpenRouterQwen3CoderNext,
124            ModelId::OpenRouterZaiGlm47,
125            ModelId::OpenRouterMoonshotaiKimiK26,
126            // Poolside models
127            ModelId::PoolsideLagunaM1,
128            ModelId::PoolsideLagunaXs2,
129        ];
130        models.extend(Self::openrouter_models());
131        let mut seen = HashSet::new();
132        models.retain(|model| seen.insert(*model));
133        models
134    }
135
136    /// Get all models for a specific provider
137    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
138        Self::all_models()
139            .into_iter()
140            .filter(|model| model.provider() == provider)
141            .collect()
142    }
143}