vtcode_config/models/model_id/
collection.rs1use crate::models::Provider;
2use hashbrown::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::Gemini31FlashLitePreview,
19 ModelId::Gemini35Flash,
20 ModelId::GPT55,
22 ModelId::GPT54,
23 ModelId::GPT54Pro,
24 ModelId::GPT54Nano,
25 ModelId::GPT54Mini,
26 ModelId::GPT53Codex,
27 ModelId::OpenAIGptOss20b,
28 ModelId::OpenAIGptOss120b,
29 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 ModelId::DeepSeekV4Pro,
42 ModelId::DeepSeekV4Flash,
43 ModelId::MistralLarge3,
45 ModelId::ZaiGlm5,
47 ModelId::ZaiGlm51,
48 ModelId::MiMoV25Pro,
50 ModelId::MiMoV25,
51 ModelId::MoonshotKimiK26,
53 ModelId::OpenCodeZenGPT54,
55 ModelId::OpenCodeZenGPT54Mini,
56 ModelId::OpenCodeZenClaudeSonnet46,
57 ModelId::OpenCodeZenGlm51,
58 ModelId::OpenCodeGoGlm51,
60 ModelId::OpenCodeGoMinimaxM25,
61 ModelId::OpenCodeGoMinimaxM27,
62 ModelId::Qwen37Max,
64 ModelId::Qwen36Flash,
65 ModelId::Qwen36Plus,
66 ModelId::QwenDeepSeekV4Flash,
67 ModelId::QwenDeepSeekV4Pro,
68 ModelId::QwenGlm51,
69 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 ModelId::LlamaCppQwen3627b,
89 ModelId::LlamaCppQwen3635bA3b,
90 ModelId::LlamaCppGemma426bA4b,
91 ModelId::LlamaCppGemma4E4b,
92 ModelId::LlamaCppGptOss20b,
93 ModelId::LlamaCppStep35Flash,
94 ModelId::MinimaxM27,
96 ModelId::MinimaxM25,
97 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::HuggingFaceGlm51Deepinfra,
110 ModelId::HuggingFaceMinimaxM27Novita,
111 ModelId::HuggingFaceDeepseekV4ProNovita,
112 ModelId::StepFun37Flash,
113 ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
114 ModelId::OpenRouterMinimaxM25,
115 ModelId::OpenRouterQwen3CoderNext,
116 ModelId::OpenRouterMoonshotaiKimiK26,
117 ModelId::OpenRouterZaiGlm51,
118 ModelId::PoolsideLagunaM1,
120 ModelId::PoolsideLagunaXs2,
121 ];
122 models.extend(Self::openrouter_models());
123 let mut seen = HashSet::new();
124 models.retain(|model| seen.insert(*model));
125 models
126 }
127
128 pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
130 Self::all_models()
131 .into_iter()
132 .filter(|model| model.provider() == provider)
133 .collect()
134 }
135}