use crate::models::Provider;
use hashbrown::HashSet;
use super::ModelId;
impl ModelId {
pub fn openrouter_vendor(&self) -> Option<&'static str> {
self.openrouter_metadata().map(|meta| meta.vendor)
}
pub fn all_models() -> Vec<ModelId> {
let mut models = vec![
ModelId::Gemini31ProPreview,
ModelId::Gemini31ProPreviewCustomTools,
ModelId::Gemini31FlashLitePreview,
ModelId::Gemini3FlashPreview,
ModelId::GPT54,
ModelId::GPT54Pro,
ModelId::GPT54Nano,
ModelId::GPT54Mini,
ModelId::GPT53Codex,
ModelId::GPT52Codex,
ModelId::GPT51Codex,
ModelId::GPT51CodexMax,
ModelId::GPT5Codex,
ModelId::GPT52,
ModelId::GPT5,
ModelId::GPT5Mini,
ModelId::GPT5Nano,
ModelId::OpenAIGptOss20b,
ModelId::OpenAIGptOss120b,
ModelId::ClaudeOpus46,
ModelId::ClaudeSonnet46,
ModelId::ClaudeHaiku45,
ModelId::CopilotAuto,
ModelId::CopilotGPT52Codex,
ModelId::CopilotGPT51CodexMax,
ModelId::CopilotGPT54,
ModelId::CopilotGPT54Mini,
ModelId::CopilotClaudeSonnet46,
ModelId::DeepSeekChat,
ModelId::DeepSeekReasoner,
ModelId::ZaiGlm5,
ModelId::ZaiGlm51,
ModelId::MoonshotKimiK25,
ModelId::OllamaGptOss20b,
ModelId::OllamaGptOss20bCloud,
ModelId::OllamaGptOss120bCloud,
ModelId::OllamaQwen317b,
ModelId::OllamaQwen3CoderNext,
ModelId::OllamaDeepseekV32Cloud,
ModelId::OllamaQwen3Next80bCloud,
ModelId::OllamaGlm5Cloud,
ModelId::OllamaGlm51Cloud,
ModelId::OllamaGemini3FlashPreviewCloud,
ModelId::OllamaMinimaxM2Cloud,
ModelId::OllamaMinimaxM27Cloud,
ModelId::OllamaMinimaxM25Cloud,
ModelId::OllamaNemotron3SuperCloud,
ModelId::MinimaxM27,
ModelId::MinimaxM25,
ModelId::HuggingFaceDeepseekV32,
ModelId::HuggingFaceOpenAIGptOss20b,
ModelId::HuggingFaceOpenAIGptOss120b,
ModelId::HuggingFaceMinimaxM25Novita,
ModelId::HuggingFaceDeepseekV32Novita,
ModelId::HuggingFaceXiaomiMimoV2FlashNovita,
ModelId::HuggingFaceGlm5Novita,
ModelId::HuggingFaceGlm51ZaiOrg,
ModelId::HuggingFaceQwen3CoderNextNovita,
ModelId::HuggingFaceQwen35397BA17BTogether,
ModelId::HuggingFaceStep35Flash,
ModelId::OpenRouterNvidiaNemotron3Super120bA12bFree,
ModelId::OpenRouterMinimaxM25,
ModelId::OpenRouterQwen3CoderNext,
];
models.extend(Self::openrouter_models());
let mut seen = HashSet::new();
models.retain(|model| seen.insert(*model));
models
}
pub fn models_for_provider(provider: Provider) -> Vec<ModelId> {
Self::all_models()
.into_iter()
.filter(|model| model.provider() == provider)
.collect()
}
}