Skip to main content

vtcode_config/models/model_id/
provider.rs

1use crate::models::{Provider, ProviderModelSupport};
2
3use super::ModelId;
4
5impl ModelId {
6    /// Get the provider for this model
7    pub fn provider(&self) -> Provider {
8        if self.openrouter_metadata().is_some() {
9            return Provider::OpenRouter;
10        }
11        if let Some(provider) = self.table_provider() {
12            return provider;
13        }
14        match self {
15            ModelId::Custom(provider_key, _) => {
16                use std::str::FromStr;
17                Provider::from_str(provider_key).unwrap_or(Provider::OpenAI)
18            }
19            // Every remaining variant is a hand-written OpenRouter model without
20            // generated metadata; the table covers all other providers.
21            _ => Provider::OpenRouter,
22        }
23    }
24
25    /// Whether this model supports configurable reasoning effort levels
26    pub fn supports_reasoning_effort(&self) -> bool {
27        self.provider().supports_reasoning_effort(&self.as_str())
28    }
29
30    /// Whether this model exposes structured reasoning output.
31    pub fn supports_reasoning(&self) -> bool {
32        self.provider().supports_reasoning(&self.as_str())
33    }
34}