vtcode_config/models/model_id/
collection.rs1use crate::models::Provider;
2use std::collections::HashSet;
3
4use super::ModelId;
5
6impl ModelId {
7 pub fn openrouter_vendor(&self) -> Option<&'static str> {
9 self.openrouter_metadata().map(|meta| meta.vendor)
10 }
11
12 pub fn all_models() -> Vec<ModelId> {
14 let mut models = vec![
15 ModelId::Gemini31ProPreview,
17 ModelId::Gemini31ProPreviewCustomTools,
18 ModelId::Gemini3FlashPreview,
19 ModelId::GPT5,
21 ModelId::GPT52,
22 ModelId::GPT5Mini,
23 ModelId::GPT5Nano,
24 ModelId::GPT53Codex,
25 ModelId::OpenAIGptOss20b,
26 ModelId::OpenAIGptOss120b,
27 ModelId::ClaudeOpus46,
29 ModelId::ClaudeSonnet46,
30 ModelId::ClaudeOpus45,
31 ModelId::ClaudeOpus41,
32 ModelId::ClaudeSonnet45,
33 ModelId::ClaudeHaiku45,
34 ModelId::ClaudeSonnet4,
35 ModelId::DeepSeekChat,
37 ModelId::DeepSeekReasoner,
38 ModelId::ZaiGlm5,
40 ModelId::MoonshotMinimaxM25,
42 ModelId::MoonshotQwen3CoderNext,
43 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 ModelId::MinimaxM25,
61 ModelId::MinimaxM2,
62 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 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}