use crate::models::Provider;
use super::ModelId;
impl ModelId {
pub fn fallback_models() -> Vec<ModelId> {
vec![
ModelId::Gemini3FlashPreview,
ModelId::GPT52,
ModelId::GPT5,
ModelId::OpenAIGptOss20b,
ModelId::ClaudeOpus46,
ModelId::ClaudeSonnet46,
ModelId::DeepSeekReasoner,
ModelId::ZaiGlm5,
]
}
pub fn default_model() -> Self {
ModelId::Gemini3FlashPreview
}
pub fn default_orchestrator() -> Self {
ModelId::Gemini31ProPreview
}
pub fn default_orchestrator_for_provider(provider: Provider) -> Self {
match provider {
Provider::Gemini => ModelId::Gemini31ProPreview,
Provider::OpenAI => ModelId::GPT5,
Provider::Anthropic => ModelId::ClaudeOpus46,
Provider::Copilot => ModelId::CopilotAuto,
Provider::Minimax => ModelId::MinimaxM27,
Provider::DeepSeek => ModelId::DeepSeekReasoner,
Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
Provider::Moonshot => ModelId::Gemini31ProPreview,
Provider::OpenRouter => ModelId::OpenRouterQwen3Coder,
Provider::Ollama => ModelId::OllamaGptOss20b,
Provider::LmStudio => ModelId::GPT5,
Provider::ZAI => ModelId::ZaiGlm5,
}
}
pub fn default_single_for_provider(provider: Provider) -> Self {
match provider {
Provider::Gemini => ModelId::Gemini3FlashPreview,
Provider::OpenAI => ModelId::GPT5,
Provider::Anthropic => ModelId::ClaudeOpus46,
Provider::Copilot => ModelId::CopilotAuto,
Provider::Minimax => ModelId::MinimaxM27,
Provider::DeepSeek => ModelId::DeepSeekReasoner,
Provider::HuggingFace => ModelId::HuggingFaceOpenAIGptOss120b,
Provider::Moonshot => ModelId::Gemini3FlashPreview,
Provider::OpenRouter => ModelId::OpenRouterQwen3Coder,
Provider::Ollama => ModelId::OllamaGptOss20b,
Provider::LmStudio => ModelId::GPT5,
Provider::ZAI => ModelId::ZaiGlm5,
}
}
}