vtcode_config/models/model_id/
provider.rs1use crate::models::Provider;
2
3use super::ModelId;
4
5impl ModelId {
6 pub fn provider(&self) -> Provider {
8 if self.openrouter_metadata().is_some() {
9 return Provider::OpenRouter;
10 }
11 match self {
12 ModelId::Gemini25FlashPreview
13 | ModelId::Gemini25Flash
14 | ModelId::Gemini25FlashLite
15 | ModelId::Gemini25Pro
16 | ModelId::Gemini3ProPreview => Provider::Gemini,
17 ModelId::GPT5
18 | ModelId::GPT5Codex
19 | ModelId::GPT5Mini
20 | ModelId::GPT5Nano
21 | ModelId::CodexMiniLatest
22 | ModelId::OpenAIGptOss20b
23 | ModelId::OpenAIGptOss120b => Provider::OpenAI,
24 ModelId::ClaudeOpus45
25 | ModelId::ClaudeOpus41
26 | ModelId::ClaudeSonnet45
27 | ModelId::ClaudeHaiku45
28 | ModelId::ClaudeSonnet4 => Provider::Anthropic,
29 ModelId::DeepSeekChat | ModelId::DeepSeekReasoner => Provider::DeepSeek,
30 ModelId::HuggingFaceDeepseekV32
31 | ModelId::HuggingFaceOpenAIGptOss20b
32 | ModelId::HuggingFaceOpenAIGptOss120b
33 | ModelId::HuggingFaceGlm47
34 | ModelId::HuggingFaceGlm47FlashNovita
35 | ModelId::HuggingFaceKimiK2Thinking
36 | ModelId::HuggingFaceMinimaxM21Novita
37 | ModelId::HuggingFaceDeepseekV32Novita
38 | ModelId::HuggingFaceXiaomiMimoV2FlashNovita => Provider::HuggingFace,
39 ModelId::XaiGrok4
40 | ModelId::XaiGrok4Mini
41 | ModelId::XaiGrok4Code
42 | ModelId::XaiGrok4CodeLatest
43 | ModelId::XaiGrok4Vision => Provider::XAI,
44 ModelId::ZaiGlm4Plus
45 | ModelId::ZaiGlm4PlusDeepThinking
46 | ModelId::ZaiGlm47
47 | ModelId::ZaiGlm47DeepThinking
48 | ModelId::ZaiGlm47Flash
49 | ModelId::ZaiGlm46
50 | ModelId::ZaiGlm46DeepThinking
51 | ModelId::ZaiGlm46V
52 | ModelId::ZaiGlm46VFlash
53 | ModelId::ZaiGlm46VFlashX
54 | ModelId::ZaiGlm45
55 | ModelId::ZaiGlm45DeepThinking
56 | ModelId::ZaiGlm45Air
57 | ModelId::ZaiGlm45X
58 | ModelId::ZaiGlm45Airx
59 | ModelId::ZaiGlm45Flash
60 | ModelId::ZaiGlm45V
61 | ModelId::ZaiGlm432b0414128k => Provider::ZAI,
62 ModelId::OllamaGptOss20b
63 | ModelId::OllamaGptOss20bCloud
64 | ModelId::OllamaGptOss120bCloud
65 | ModelId::OllamaQwen317b
66 | ModelId::OllamaDeepseekV32Cloud
67 | ModelId::OllamaQwen3Next80bCloud
68 | ModelId::OllamaMistralLarge3675bCloud
69 | ModelId::OllamaKimiK2ThinkingCloud
70 | ModelId::OllamaQwen3Coder480bCloud
71 | ModelId::OllamaGlm46Cloud
72 | ModelId::OllamaGemini3ProPreviewLatestCloud
73 | ModelId::OllamaGemini3FlashPreviewCloud
74 | ModelId::OllamaDevstral2123bCloud
75 | ModelId::OllamaMinimaxM2Cloud
76 | ModelId::OllamaMinimaxM21Cloud
77 | ModelId::OllamaNemotron3Nano30bCloud
78 | ModelId::OllamaGlm47Cloud => Provider::Ollama,
79 ModelId::LmStudioMetaLlama38BInstruct
80 | ModelId::LmStudioMetaLlama318BInstruct
81 | ModelId::LmStudioQwen257BInstruct
82 | ModelId::LmStudioGemma22BIt
83 | ModelId::LmStudioGemma29BIt
84 | ModelId::LmStudioPhi31Mini4kInstruct => Provider::LmStudio,
85 ModelId::MinimaxM21 | ModelId::MinimaxM21Lightning | ModelId::MinimaxM2 => {
86 Provider::Minimax
87 }
88 _ => unreachable!(),
89 }
90 }
91
92 pub fn supports_reasoning_effort(&self) -> bool {
94 self.provider().supports_reasoning_effort(self.as_str())
95 }
96}