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::Gemini3ProPreview | ModelId::Gemini3FlashPreview => Provider::Gemini,
13 ModelId::GPT5
14 | ModelId::GPT52
15 | ModelId::GPT52Codex
16 | ModelId::GPT5Codex
17 | ModelId::GPT5Mini
18 | ModelId::GPT5Nano
19 | ModelId::GPT51
20 | ModelId::GPT51Codex
21 | ModelId::GPT51CodexMax
22 | ModelId::GPT51Mini
23 | ModelId::CodexMiniLatest
24 | ModelId::OpenAIGptOss20b
25 | ModelId::OpenAIGptOss120b => Provider::OpenAI,
26 ModelId::ClaudeOpus46
27 | ModelId::ClaudeOpus45
28 | ModelId::ClaudeOpus41
29 | ModelId::ClaudeSonnet45
30 | ModelId::ClaudeHaiku45
31 | ModelId::ClaudeSonnet4
32 | ModelId::ClaudeOpus4
33 | ModelId::ClaudeSonnet37
34 | ModelId::ClaudeHaiku35 => Provider::Anthropic,
35 ModelId::DeepSeekChat | ModelId::DeepSeekReasoner => Provider::DeepSeek,
36 ModelId::HuggingFaceDeepseekV32
37 | ModelId::HuggingFaceOpenAIGptOss20b
38 | ModelId::HuggingFaceOpenAIGptOss120b
39 | ModelId::HuggingFaceMinimaxM25Novita
40 | ModelId::HuggingFaceDeepseekV32Novita
41 | ModelId::HuggingFaceXiaomiMimoV2FlashNovita
42 | ModelId::HuggingFaceGlm5Novita
43 | ModelId::HuggingFaceQwen3CoderNextNovita => Provider::HuggingFace,
44 ModelId::XaiGrok4
45 | ModelId::XaiGrok4Mini
46 | ModelId::XaiGrok4Code
47 | ModelId::XaiGrok4CodeLatest
48 | ModelId::XaiGrok4Vision => Provider::XAI,
49 ModelId::ZaiGlm5 => Provider::ZAI,
50 ModelId::MoonshotMinimaxM25 | ModelId::MoonshotQwen3CoderNext => Provider::Moonshot,
51 ModelId::OllamaGptOss20b
52 | ModelId::OllamaGptOss20bCloud
53 | ModelId::OllamaGptOss120bCloud
54 | ModelId::OllamaQwen317b
55 | ModelId::OllamaDeepseekV32Cloud
56 | ModelId::OllamaQwen3Next80bCloud
57 | ModelId::OllamaMistralLarge3675bCloud
58 | ModelId::OllamaQwen3Coder480bCloud
59 | ModelId::OllamaGemini3ProPreviewLatestCloud
60 | ModelId::OllamaGemini3FlashPreviewCloud
61 | ModelId::OllamaDevstral2123bCloud
62 | ModelId::OllamaMinimaxM2Cloud
63 | ModelId::OllamaMinimaxM25Cloud
64 | ModelId::OllamaNemotron3Nano30bCloud
65 | ModelId::OllamaGlm5Cloud => Provider::Ollama,
66 ModelId::LmStudioMetaLlama38BInstruct
67 | ModelId::LmStudioMetaLlama318BInstruct
68 | ModelId::LmStudioQwen257BInstruct
69 | ModelId::LmStudioGemma22BIt
70 | ModelId::LmStudioGemma29BIt
71 | ModelId::LmStudioPhi31Mini4kInstruct => Provider::LmStudio,
72 ModelId::MinimaxM25 | ModelId::MinimaxM2 => Provider::Minimax,
73 ModelId::OpenRouterMinimaxM25 | ModelId::OpenRouterQwen3CoderNext => {
74 Provider::OpenRouter
75 }
76 _ => unreachable!(),
77 }
78 }
79
80 pub fn supports_reasoning_effort(&self) -> bool {
82 self.provider().supports_reasoning_effort(self.as_str())
83 }
84}