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        "openrouter" => Some(models::openrouter::SUPPORTED_MODELS),
14        "moonshot" => Some(models::moonshot::SUPPORTED_MODELS),
15        "zai" => Some(models::zai::SUPPORTED_MODELS),
16        "opencode-zen" => Some(models::opencode_zen::CONFIGURED_MODELS),
17        "opencode-go" => Some(models::opencode_go::CONFIGURED_MODELS),
18        "llamacpp" => Some(models::llamacpp::SUPPORTED_MODELS),
19        "ollama" => Some(models::ollama::SUPPORTED_MODELS),
20        "qwen" => Some(models::qwen::SUPPORTED_MODELS),
21        "stepfun" => Some(models::stepfun::SUPPORTED_MODELS),
22        "evolink" => Some(models::evolink::SUPPORTED_MODELS),
23        "poolside" => Some(models::poolside::SUPPORTED_MODELS),
24        "xai" => Some(models::xai::SUPPORTED_MODELS),
25        "nvidia" => Some(models::nvidia::SUPPORTED_MODELS),
26        "merge-gateway" => Some(models::merge_gateway::SUPPORTED_MODELS),
27        "vercel" | "vercel-ai-gateway" | "ai-gateway" => Some(models::vercel::SUPPORTED_MODELS),
28        "meta" | "meta-ai" => Some(models::meta::SUPPORTED_MODELS),
29        _ => None,
30    }
31}
32
33/// Get default model for a provider
34pub fn default_for(provider: &str) -> Option<&'static str> {
35    match provider {
36        "google" | "gemini" => Some(models::google::DEFAULT_MODEL),
37        "openai" | "codex" => Some(models::openai::DEFAULT_MODEL),
38        "anthropic" => Some(models::anthropic::DEFAULT_MODEL),
39        "copilot" => Some(models::copilot::DEFAULT_MODEL),
40        "mimo" => Some(models::mimo::DEFAULT_MODEL),
41        "minimax" => Some(models::minimax::DEFAULT_MODEL),
42        "deepseek" => Some(models::deepseek::DEFAULT_MODEL),
43        "openrouter" => Some(models::openrouter::DEFAULT_MODEL),
44        "moonshot" => Some(models::moonshot::DEFAULT_MODEL),
45        "zai" => Some(models::zai::DEFAULT_MODEL),
46        "opencode-zen" => Some(models::opencode_zen::DEFAULT_MODEL),
47        "opencode-go" => Some(models::opencode_go::DEFAULT_MODEL),
48        "llamacpp" => Some(models::llamacpp::DEFAULT_MODEL),
49        "ollama" => Some(models::ollama::DEFAULT_MODEL),
50        "qwen" => Some(models::qwen::DEFAULT_MODEL),
51        "stepfun" => Some(models::stepfun::DEFAULT_MODEL),
52        "evolink" => Some(models::evolink::DEFAULT_MODEL),
53        "poolside" => Some(models::poolside::DEFAULT_MODEL),
54        "xai" => Some(models::xai::DEFAULT_MODEL),
55        "nvidia" => Some(models::nvidia::DEFAULT_MODEL),
56        "merge-gateway" => Some(models::merge_gateway::DEFAULT_MODEL),
57        "vercel" | "vercel-ai-gateway" | "ai-gateway" => Some(models::vercel::DEFAULT_MODEL),
58        "meta" | "meta-ai" => Some(models::meta::DEFAULT_MODEL),
59        _ => None,
60    }
61}
62
63/// Validate if a model is supported by a provider
64pub fn is_valid(provider: &str, model: &str) -> bool {
65    if provider.eq_ignore_ascii_case("merge-gateway") {
66        return !model.trim().is_empty();
67    }
68    supported_for(provider).map(|list| list.contains(&model)).unwrap_or(false)
69}