use crate::version::ContractVersion;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum WireModelTier {
Recommended,
Supported,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireModelProfile {
pub model_family: String,
pub supports_temperature: bool,
pub supports_thinking: bool,
pub supports_reasoning: bool,
#[serde(default)]
pub supports_web_search: bool,
#[serde(default)]
pub vision: bool,
#[serde(default)]
pub image_input: bool,
#[serde(default)]
pub image_tool_results: bool,
#[serde(default)]
pub inline_video: bool,
#[serde(default)]
pub realtime: bool,
#[serde(default)]
pub image_generation: bool,
pub params_schema: serde_json::Value,
#[serde(default)]
pub beta_headers: Vec<WireModelBetaHeader>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireModelBetaHeader {
pub feature: String,
pub header_name: String,
pub header_value: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireResolvedModelCapabilities {
#[serde(default)]
pub vision: bool,
#[serde(default)]
pub image_input: bool,
#[serde(default)]
pub image_tool_results: bool,
#[serde(default)]
pub inline_video: bool,
#[serde(default)]
pub realtime: bool,
#[serde(default)]
pub web_search: bool,
#[serde(default)]
pub image_generation: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct CatalogModelEntry {
pub id: String,
pub display_name: String,
pub tier: WireModelTier,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_window: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<WireModelProfile>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ProviderCatalog {
pub provider: String,
pub default_model_id: String,
pub models: Vec<CatalogModelEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ModelsCatalogResponse {
pub contract_version: ContractVersion,
pub providers: Vec<ProviderCatalog>,
}