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::Gemini3FlashPreview,
20            // OpenAI models
21            ModelId::GPT54,
22            ModelId::GPT54Pro,
23            ModelId::GPT54Nano,
24            ModelId::GPT54Mini,
25            ModelId::GPT53Codex,
26            ModelId::GPT52Codex,
27            ModelId::GPT51Codex,
28            ModelId::GPT51CodexMax,
29            ModelId::GPT5Codex,
30            ModelId::GPT52,
31            ModelId::GPT5,
32            ModelId::GPT5Mini,
33            ModelId::GPT5Nano,
34            ModelId::OpenAIGptOss20b,
35            ModelId::OpenAIGptOss120b,
36            // Anthropic models
37            ModelId::ClaudeOpus47,
38            ModelId::ClaudeOpus46,
39            ModelId::ClaudeSonnet46,
40            ModelId::ClaudeHaiku45,
41            ModelId::ClaudeMythosPreview,
42            ModelId::CopilotAuto,
43            ModelId::CopilotGPT52Codex,
44            ModelId::CopilotGPT51CodexMax,
45            ModelId::CopilotGPT54,
46            ModelId::CopilotGPT54Mini,
47            ModelId::CopilotClaudeSonnet46,
48            // DeepSeek models
49            ModelId::DeepSeekChat,
50            ModelId::DeepSeekReasoner,
51            // Z.AI models
52            ModelId::ZaiGlm5,
53            ModelId::ZaiGlm51,
54            // Moonshot models
55            ModelId::MoonshotKimiK25,
56            // Ollama models
57            ModelId::OllamaGptOss20b,
58            ModelId::OllamaGptOss20bCloud,
59            ModelId::OllamaGptOss120bCloud,
60            ModelId::OllamaQwen317b,
61            ModelId::OllamaQwen3CoderNext,
62            ModelId::OllamaDeepseekV32Cloud,
63            ModelId::OllamaQwen3Next80bCloud,
64            ModelId::OllamaGlm5Cloud,
65            ModelId::OllamaGlm51Cloud,
66            ModelId::OllamaGemini3FlashPreviewCloud,
67            ModelId::OllamaMinimaxM2Cloud,
68            ModelId::OllamaMinimaxM27Cloud,
69            ModelId::OllamaMinimaxM25Cloud,
70            ModelId::OllamaNemotron3SuperCloud,
71            // MiniMax models
72            ModelId::MinimaxM27,
73            ModelId::MinimaxM25,
74            // Hugging Face models
75            ModelId::HuggingFaceDeepseekV32,
76            ModelId::HuggingFaceOpenAIGptOss20b,
77            ModelId::HuggingFaceOpenAIGptOss120b,
78            ModelId::HuggingFaceMinimaxM25Novita,
79            ModelId::HuggingFaceDeepseekV32Novita,
80            ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
81            ModelId::HuggingFaceGlm5Novita,
82            ModelId::HuggingFaceGlm51ZaiOrg,
83            ModelId::HuggingFaceQwen3CoderNextNovita,
84            ModelId::HuggingFaceQwen35397BA17BTogether,
85            ModelId::HuggingFaceStep35Flash,
86            ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
87            ModelId::OpenRouterMinimaxM25,
88            ModelId::OpenRouterQwen3CoderNext,
89        ];
90        models.extend(Self::openrouter_models());
91        let mut seen = HashSet::new();
92        models.retain(|model| seen.insert(*model));
93        models
94    }
95
96    /// Get all models for a specific provider
97    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
98        Self::all_models()
99            .into_iter()
100            .filter(|model| model.provider() == provider)
101            .collect()
102    }
103}