Skip to main content

vtcode_config/constants/
model_helpers.rs

1use super::models;
2
3/// Get supported models for a provider
4pub fn supported_for(provider: &str) -> Option<&'static [&'static str]> {
5    match provider {
6        "google" | "gemini" => Some(models::google::SUPPORTED_MODELS),
7        "openai" | "codex" => Some(models::openai::SUPPORTED_MODELS),
8        "anthropic" => Some(models::anthropic::SUPPORTED_MODELS),
9        "copilot" => Some(models::copilot::SUPPORTED_MODELS),
10        "mimo" => Some(models::mimo::SUPPORTED_MODELS),
11        "minimax" => Some(models::minimax::SUPPORTED_MODELS),
12        "deepseek" => Some(models::deepseek::SUPPORTED_MODELS),
13        #[cfg(not(docsrs))]
14        "openrouter" => Some(models::openrouter::SUPPORTED_MODELS),
15        #[cfg(docsrs)]
16        "openrouter" => Some(&[]),
17        "moonshot" => Some(models::moonshot::SUPPORTED_MODELS),
18        "zai" => Some(models::zai::SUPPORTED_MODELS),
19        "opencode-zen" => Some(models::opencode_zen::CONFIGURED_MODELS),
20        "opencode-go" => Some(models::opencode_go::CONFIGURED_MODELS),
21        "ollama" => Some(models::ollama::SUPPORTED_MODELS),
22        "qwen" => Some(models::qwen::SUPPORTED_MODELS),
23        _ => None,
24    }
25}
26
27/// Get default model for a provider
28pub fn default_for(provider: &str) -> Option<&'static str> {
29    match provider {
30        "google" | "gemini" => Some(models::google::DEFAULT_MODEL),
31        "openai" | "codex" => Some(models::openai::DEFAULT_MODEL),
32        "anthropic" => Some(models::anthropic::DEFAULT_MODEL),
33        "copilot" => Some(models::copilot::DEFAULT_MODEL),
34        "mimo" => Some(models::mimo::DEFAULT_MODEL),
35        "minimax" => Some(models::minimax::DEFAULT_MODEL),
36        "deepseek" => Some(models::deepseek::DEFAULT_MODEL),
37        #[cfg(not(docsrs))]
38        "openrouter" => Some(models::openrouter::DEFAULT_MODEL),
39        #[cfg(docsrs)]
40        "openrouter" => Some("openrouter/auto"), // Fallback for docs.rs build
41        "moonshot" => Some(models::moonshot::DEFAULT_MODEL),
42        "zai" => Some(models::zai::DEFAULT_MODEL),
43        "opencode-zen" => Some(models::opencode_zen::DEFAULT_MODEL),
44        "opencode-go" => Some(models::opencode_go::DEFAULT_MODEL),
45        "ollama" => Some(models::ollama::DEFAULT_MODEL),
46        "qwen" => Some(models::qwen::DEFAULT_MODEL),
47        _ => None,
48    }
49}
50
51/// Validate if a model is supported by a provider
52pub fn is_valid(provider: &str, model: &str) -> bool {
53    supported_for(provider)
54        .map(|list| list.contains(&model))
55        .unwrap_or(false)
56}