use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct Capabilities {
pub tool_calls: FeatureSupport,
pub parallel_tool_calls: FeatureSupport,
pub thinking: FeatureSupport,
pub vision: FeatureSupport,
pub prompt_cache: FeatureSupport,
pub thinking_echo: ThinkingEcho,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelCapabilityOverrides {
pub thinking: Option<FeatureSupport>,
pub vision: Option<FeatureSupport>,
pub prompt_cache: Option<FeatureSupport>,
pub parallel_tool_calls: Option<FeatureSupport>,
pub thinking_echo: Option<ThinkingEcho>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ThinkingEcho {
#[default]
Forbidden,
Required,
Optional,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FeatureSupport {
Supported,
Unsupported,
PassthroughAsTool,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct HostedCapabilities {
pub web_search: bool,
}
impl HostedCapabilities {
#[must_use]
pub const fn with_web_search(web_search: bool) -> Self {
Self { web_search }
}
}