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::Gemini3FlashPreview,
20 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 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 ModelId::DeepSeekChat,
50 ModelId::DeepSeekReasoner,
51 ModelId::ZaiGlm5,
53 ModelId::ZaiGlm51,
54 ModelId::MoonshotKimiK26,
56 ModelId::MoonshotKimiK25,
57 ModelId::OpenCodeZenGPT54,
59 ModelId::OpenCodeZenGPT54Mini,
60 ModelId::OpenCodeZenClaudeSonnet46,
61 ModelId::OpenCodeZenGlm51,
62 ModelId::OpenCodeZenKimiK25,
63 ModelId::OpenCodeGoGlm51,
65 ModelId::OpenCodeGoKimiK25,
66 ModelId::OpenCodeGoMinimaxM25,
67 ModelId::OpenCodeGoMinimaxM27,
68 ModelId::OllamaGptOss20b,
70 ModelId::OllamaGptOss20bCloud,
71 ModelId::OllamaGptOss120bCloud,
72 ModelId::OllamaQwen317b,
73 ModelId::OllamaQwen3CoderNext,
74 ModelId::OllamaDeepseekV32Cloud,
75 ModelId::OllamaQwen3Next80bCloud,
76 ModelId::OllamaGlm5Cloud,
77 ModelId::OllamaGlm51Cloud,
78 ModelId::OllamaGemini3FlashPreviewCloud,
79 ModelId::OllamaMinimaxM2Cloud,
80 ModelId::OllamaMinimaxM27Cloud,
81 ModelId::OllamaMinimaxM25Cloud,
82 ModelId::OllamaKimiK26Cloud,
83 ModelId::OllamaNemotron3SuperCloud,
84 ModelId::MinimaxM27,
86 ModelId::MinimaxM25,
87 ModelId::HuggingFaceDeepseekV32,
89 ModelId::HuggingFaceOpenAIGptOss20b,
90 ModelId::HuggingFaceOpenAIGptOss120b,
91 ModelId::HuggingFaceMinimaxM25Novita,
92 ModelId::HuggingFaceDeepseekV32Novita,
93 ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
94 ModelId::HuggingFaceGlm5Novita,
95 ModelId::HuggingFaceGlm51ZaiOrg,
96 ModelId::HuggingFaceQwen3CoderNextNovita,
97 ModelId::HuggingFaceQwen35397BA17BTogether,
98 ModelId::HuggingFaceKimiK26Novita,
99 ModelId::HuggingFaceStep35Flash,
100 ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
101 ModelId::OpenRouterMinimaxM25,
102 ModelId::OpenRouterQwen3CoderNext,
103 ModelId::OpenRouterZaiGlm47,
104 ModelId::OpenRouterMoonshotaiKimiK26,
105 ];
106 models.extend(Self::openrouter_models());
107 let mut seen = HashSet::new();
108 models.retain(|model| seen.insert(*model));
109 models
110 }
111
112 pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
114 Self::all_models()
115 .into_iter()
116 .filter(|model| model.provider() == provider)
117 .collect()
118 }
119}