vtcode-config 0.134.5

Config loader components shared across VT Code and downstream adopters
use crate::models::{Provider, ProviderModelSupport};

use super::ModelId;

impl ModelId {
    /// Get the provider for this model
    pub fn provider(&self) -> Provider {
        if self.openrouter_metadata().is_some() {
            return Provider::OpenRouter;
        }
        if let Some(provider) = self.table_provider() {
            return provider;
        }
        match self {
            ModelId::Custom(provider_key, _) => {
                use std::str::FromStr;
                Provider::from_str(provider_key).unwrap_or(Provider::OpenAI)
            }
            // Every remaining variant is a hand-written OpenRouter model without
            // generated metadata; the table covers all other providers.
            _ => Provider::OpenRouter,
        }
    }

    /// Whether this model supports configurable reasoning effort levels
    pub fn supports_reasoning_effort(&self) -> bool {
        self.provider().supports_reasoning_effort(&self.as_str())
    }
}