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::Gemini31ProPreview,
10            ModelId::Gemini31ProPreviewCustomTools,
11            ModelId::Gemini3FlashPreview,
12            ModelId::Gemini3ProPreview,
13            ModelId::GPT5,
14            ModelId::OpenAIGptOss20b,
15            ModelId::ClaudeOpus45,
16            ModelId::ClaudeSonnet46,
17            ModelId::ClaudeOpus41,
18            ModelId::ClaudeSonnet45,
19            ModelId::DeepSeekReasoner,
20            ModelId::XaiGrok4,
21            ModelId::ZaiGlm5,
22            ModelId::OpenRouterGrokCodeFast1,
23        ]
24    }
25
26    /// Get the default orchestrator model (more capable)
27    pub fn default_orchestrator() -> Self {
28        ModelId::Gemini31ProPreview
29    }
30
31    /// Get the default subagent model (fast and efficient)
32    pub fn default_subagent() -> Self {
33        ModelId::Gemini3FlashPreview
34    }
35
36    /// Get provider-specific defaults for orchestrator
37    pub fn default_orchestrator_for_provider(provider: Provider) -> Self {
38        match provider {
39            Provider::Gemini => ModelId::Gemini31ProPreview,
40            Provider::OpenAI => ModelId::GPT5,
41            Provider::Anthropic => ModelId::ClaudeOpus45,
42            Provider::DeepSeek => ModelId::DeepSeekReasoner,
43            Provider::XAI => ModelId::XaiGrok4,
44            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
45            Provider::Ollama => ModelId::OllamaGptOss20b,
46            Provider::LmStudio => ModelId::LmStudioMetaLlama318BInstruct,
47            Provider::ZAI => ModelId::ZaiGlm5,
48            Provider::Moonshot => ModelId::Gemini31ProPreview, // Fallback to Gemini if no Moonshot models
49            Provider::Minimax => ModelId::MinimaxM25,
50            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
51        }
52    }
53
54    /// Get provider-specific defaults for subagent
55    pub fn default_subagent_for_provider(provider: Provider) -> Self {
56        match provider {
57            Provider::Gemini => ModelId::Gemini3FlashPreview,
58            Provider::OpenAI => ModelId::GPT5Mini,
59            Provider::Anthropic => ModelId::ClaudeSonnet45,
60            Provider::DeepSeek => ModelId::DeepSeekChat,
61            Provider::XAI => ModelId::XaiGrok4Code,
62            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
63            Provider::Ollama => ModelId::OllamaQwen317b,
64            Provider::LmStudio => ModelId::LmStudioQwen257BInstruct,
65            Provider::ZAI => ModelId::OllamaGlm5Cloud,
66            Provider::Moonshot => ModelId::Gemini3FlashPreview, // Fallback to Gemini if no Moonshot models
67            Provider::Minimax => ModelId::MinimaxM25,
68            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss20b,
69        }
70    }
71
72    /// Get provider-specific defaults for single agent
73    pub fn default_single_for_provider(provider: Provider) -> Self {
74        match provider {
75            Provider::Gemini => ModelId::Gemini31ProPreview,
76            Provider::OpenAI => ModelId::GPT5,
77            Provider::Anthropic => ModelId::ClaudeOpus45,
78            Provider::DeepSeek => ModelId::DeepSeekReasoner,
79            Provider::XAI => ModelId::XaiGrok4,
80            Provider::OpenRouter => ModelId::OpenRouterGrokCodeFast1,
81            Provider::Ollama => ModelId::OllamaGptOss20b,
82            Provider::LmStudio => ModelId::LmStudioMetaLlama318BInstruct,
83            Provider::ZAI => ModelId::ZaiGlm5,
84            Provider::Moonshot => ModelId::Gemini31ProPreview, // Fallback to Gemini if no Moonshot models
85            Provider::Minimax => ModelId::MinimaxM25,
86            Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
87        }
88    }
89}