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            // OpenAI models
21            ModelId::GPT55,
22            ModelId::GPT54,
23            ModelId::GPT54Pro,
24            ModelId::GPT54Nano,
25            ModelId::GPT54Mini,
26            ModelId::GPT53Codex,
27            ModelId::OpenAIGptOss20b,
28            ModelId::OpenAIGptOss120b,
29            // Anthropic models
30            ModelId::ClaudeOpus48,
31            ModelId::ClaudeSonnet46,
32            ModelId::ClaudeHaiku45,
33            ModelId::ClaudeMythosPreview,
34            ModelId::CopilotAuto,
35            ModelId::CopilotGPT52Codex,
36            ModelId::CopilotGPT51CodexMax,
37            ModelId::CopilotGPT54,
38            ModelId::CopilotGPT54Mini,
39            ModelId::CopilotClaudeSonnet46,
40            // DeepSeek models
41            ModelId::DeepSeekV4Pro,
42            ModelId::DeepSeekV4Flash,
43            // Mistral models
44            ModelId::MistralLarge3,
45            // Z.AI models
46            ModelId::ZaiGlm5,
47            ModelId::ZaiGlm51,
48            // MiMo models
49            ModelId::MiMoV25Pro,
50            ModelId::MiMoV25,
51            // Moonshot models
52            ModelId::MoonshotKimiK26,
53            // OpenCode Zen models
54            ModelId::OpenCodeZenGPT54,
55            ModelId::OpenCodeZenGPT54Mini,
56            ModelId::OpenCodeZenClaudeSonnet46,
57            ModelId::OpenCodeZenGlm51,
58            // OpenCode Go models
59            ModelId::OpenCodeGoGlm51,
60            ModelId::OpenCodeGoMinimaxM25,
61            ModelId::OpenCodeGoMinimaxM27,
62            // Qwen models
63            ModelId::Qwen37Max,
64            ModelId::Qwen36Flash,
65            ModelId::Qwen36Plus,
66            ModelId::QwenDeepSeekV4Flash,
67            ModelId::QwenDeepSeekV4Pro,
68            ModelId::QwenGlm51,
69            // Ollama models
70            ModelId::OllamaGptOss20b,
71            ModelId::OllamaGptOss20bCloud,
72            ModelId::OllamaGptOss120bCloud,
73            ModelId::OllamaQwen317b,
74            ModelId::OllamaQwen3CoderNext,
75            ModelId::OllamaDeepseekV4FlashCloud,
76            ModelId::OllamaQwen3Next80bCloud,
77            ModelId::OllamaDeepseekV4ProCloud,
78            ModelId::OllamaGlm5Cloud,
79            ModelId::OllamaGlm51Cloud,
80            ModelId::OllamaGemini3FlashPreviewCloud,
81            ModelId::OllamaMinimaxM2Cloud,
82            ModelId::OllamaMinimaxM27Cloud,
83            ModelId::OllamaMinimaxM25Cloud,
84            ModelId::OllamaKimiK26Cloud,
85            ModelId::OllamaNemotron3SuperCloud,
86            ModelId::OllamaLagunaXs2,
87            // llama.cpp models
88            ModelId::LlamaCppQwen3627b,
89            ModelId::LlamaCppQwen3635bA3b,
90            ModelId::LlamaCppGemma426bA4b,
91            ModelId::LlamaCppGemma4E4b,
92            ModelId::LlamaCppGptOss20b,
93            ModelId::LlamaCppStep35Flash,
94            // MiniMax models
95            ModelId::MinimaxM27,
96            ModelId::MinimaxM25,
97            // Hugging Face models
98            ModelId::HuggingFaceOpenAIGptOss20b,
99            ModelId::HuggingFaceOpenAIGptOss120b,
100            ModelId::HuggingFaceMinimaxM25Novita,
101            ModelId::HuggingFaceGlm5Novita,
102            ModelId::HuggingFaceGlm51ZaiOrg,
103            ModelId::HuggingFaceQwen3CoderNextNovita,
104            ModelId::HuggingFaceQwen35397BA17BTogether,
105            ModelId::HuggingFaceKimiK26Novita,
106            ModelId::HuggingFaceDeepseekV4FlashNovita,
107            ModelId::HuggingFaceDeepseekV4ProTogether,
108            ModelId::HuggingFaceStep35Flash,
109            ModelId::StepFun37Flash,
110            ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
111            ModelId::OpenRouterMinimaxM25,
112            ModelId::OpenRouterQwen3CoderNext,
113            ModelId::OpenRouterMoonshotaiKimiK26,
114            ModelId::OpenRouterZaiGlm51,
115            // Poolside models
116            ModelId::PoolsideLagunaM1,
117            ModelId::PoolsideLagunaXs2,
118        ];
119        models.extend(Self::openrouter_models());
120        let mut seen = HashSet::new();
121        models.retain(|model| seen.insert(*model));
122        models
123    }
124
125    /// Get all models for a specific provider
126    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
127        Self::all_models()
128            .into_iter()
129            .filter(|model| model.provider() == provider)
130            .collect()
131    }
132}