Skip to main content

vtcode_config/models/model_id/
defaults.rs

1use crate::models::Provider;
2
3use super::ModelId;
4
5impl ModelId {
6    /// Get recommended fallback models in order of preference
7    pub fn fallback_models() -> Vec<ModelId> {
8        vec![
9            ModelId::Gemini25FlashPreview,
10            ModelId::Gemini25Pro,
11            ModelId::GPT5,
12            ModelId::OpenAIGptOss20b,
13            ModelId::ClaudeOpus45,
14            ModelId::ClaudeOpus41,
15            ModelId::ClaudeSonnet45,
16            ModelId::DeepSeekReasoner,
17            ModelId::XaiGrok4,
18            ModelId::ZaiGlm46,
19            ModelId::OpenRouterGrokCodeFast1,
20        ]
21    }
22
23    /// Get the default orchestrator model (more capable)
24    pub fn default_orchestrator() -> Self {
25        ModelId::Gemini25Pro
26    }
27
28    /// Get the default subagent model (fast and efficient)
29    pub fn default_subagent() -> Self {
30        ModelId::Gemini25FlashPreview
31    }
32
33    /// Get provider-specific defaults for orchestrator
34    pub fn default_orchestrator_for_provider(provider: Provider) -> Self {
35        match provider {
36            Provider::Gemini => ModelId::Gemini25Pro,
37            Provider::OpenAI => ModelId::GPT5,
38            Provider::Anthropic => ModelId::ClaudeOpus45,
39            Provider::DeepSeek => ModelId::DeepSeekReasoner,
40            Provider::XAI => ModelId::XaiGrok4,
41            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
42            Provider::Ollama => ModelId::OllamaGptOss20b,
43            Provider::LmStudio => ModelId::LmStudioMetaLlama318BInstruct,
44            Provider::ZAI => ModelId::ZaiGlm46,
45            Provider::Moonshot => ModelId::OpenRouterGrokCodeFast1,
46            Provider::Minimax => ModelId::MinimaxM21,
47            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
48        }
49    }
50
51    /// Get provider-specific defaults for subagent
52    pub fn default_subagent_for_provider(provider: Provider) -> Self {
53        match provider {
54            Provider::Gemini => ModelId::Gemini25FlashPreview,
55            Provider::OpenAI => ModelId::GPT5Mini,
56            Provider::Anthropic => ModelId::ClaudeSonnet45,
57            Provider::DeepSeek => ModelId::DeepSeekChat,
58            Provider::XAI => ModelId::XaiGrok4Code,
59            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
60            Provider::Ollama => ModelId::OllamaQwen317b,
61            Provider::LmStudio => ModelId::LmStudioQwen257BInstruct,
62            Provider::ZAI => ModelId::ZaiGlm45Flash,
63            Provider::Moonshot => ModelId::OpenRouterGrokCodeFast1,
64            Provider::Minimax => ModelId::MinimaxM21Lightning,
65            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss20b,
66        }
67    }
68
69    /// Get provider-specific defaults for single agent
70    pub fn default_single_for_provider(provider: Provider) -> Self {
71        match provider {
72            Provider::Gemini => ModelId::Gemini25FlashPreview,
73            Provider::OpenAI => ModelId::GPT5,
74            Provider::Anthropic => ModelId::ClaudeOpus45,
75            Provider::DeepSeek => ModelId::DeepSeekReasoner,
76            Provider::XAI => ModelId::XaiGrok4,
77            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
78            Provider::Ollama => ModelId::OllamaGptOss20b,
79            Provider::LmStudio => ModelId::LmStudioMetaLlama318BInstruct,
80            Provider::ZAI => ModelId::ZaiGlm46,
81            Provider::Moonshot => ModelId::OpenRouterGrokCodeFast1,
82            Provider::Minimax => ModelId::MinimaxM21,
83            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
84        }
85    }
86}