Skip to main content

vtcode_config/models/model_id/
collection.rs

1use crate::models::Provider;
2use std::collections::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::Gemini3FlashPreview,
19            // OpenAI models
20            ModelId::GPT5,
21            ModelId::GPT52,
22            ModelId::GPT5Mini,
23            ModelId::GPT5Nano,
24            ModelId::GPT53Codex,
25            ModelId::OpenAIGptOss20b,
26            ModelId::OpenAIGptOss120b,
27            // Anthropic models
28            ModelId::ClaudeOpus46,
29            ModelId::ClaudeSonnet46,
30            ModelId::ClaudeOpus45,
31            ModelId::ClaudeOpus41,
32            ModelId::ClaudeSonnet45,
33            ModelId::ClaudeHaiku45,
34            ModelId::ClaudeSonnet4,
35            // DeepSeek models
36            ModelId::DeepSeekChat,
37            ModelId::DeepSeekReasoner,
38            // Z.AI models
39            ModelId::ZaiGlm5,
40            // Moonshot models
41            ModelId::MoonshotMinimaxM25,
42            ModelId::MoonshotQwen3CoderNext,
43            // Ollama models
44            ModelId::OllamaGptOss20b,
45            ModelId::OllamaGptOss20bCloud,
46            ModelId::OllamaGptOss120bCloud,
47            ModelId::OllamaQwen317b,
48            ModelId::OllamaQwen3CoderNext,
49            ModelId::OllamaDeepseekV32Cloud,
50            ModelId::OllamaQwen3Next80bCloud,
51            ModelId::OllamaMistralLarge3675bCloud,
52            ModelId::OllamaQwen3Coder480bCloud,
53            ModelId::OllamaGlm5Cloud,
54            ModelId::OllamaGemini3FlashPreviewCloud,
55            ModelId::OllamaDevstral2123bCloud,
56            ModelId::OllamaMinimaxM2Cloud,
57            ModelId::OllamaMinimaxM25Cloud,
58            ModelId::OllamaNemotron3Nano30bCloud,
59            // MiniMax models
60            ModelId::MinimaxM25,
61            ModelId::MinimaxM2,
62            // Hugging Face models
63            ModelId::HuggingFaceDeepseekV32,
64            ModelId::HuggingFaceOpenAIGptOss20b,
65            ModelId::HuggingFaceOpenAIGptOss120b,
66            ModelId::HuggingFaceMinimaxM25Novita,
67            ModelId::HuggingFaceDeepseekV32Novita,
68            ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
69            ModelId::HuggingFaceGlm5Novita,
70            ModelId::HuggingFaceQwen3CoderNextNovita,
71            ModelId::HuggingFaceQwen35397BA17BTogether,
72            ModelId::OpenRouterMinimaxM25,
73            ModelId::OpenRouterQwen3CoderNext,
74        ];
75        models.extend(Self::openrouter_models());
76        let mut seen = HashSet::new();
77        models.retain(|model| seen.insert(*model));
78        models
79    }
80
81    /// Get all models for a specific provider
82    pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
83        Self::all_models()
84            .into_iter()
85            .filter(|model| model.provider() == provider)
86            .collect()
87    }
88}