use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ModelCapabilities {
pub supports_tools: bool,
pub supports_vision: bool,
pub supports_streaming: bool,
pub supports_json_mode: bool,
pub supports_thinking: bool,
pub supports_output_config: bool,
pub context_window: Option<u32>,
pub max_output_tokens: Option<u32>,
pub thinking_style: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Model {
pub id: String,
pub object: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub created: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owned_by: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelList {
pub object: String,
pub data: Vec<Model>,
}
impl ModelList {
pub fn ids(&self) -> Vec<&str> {
self.data.iter().map(|m| m.id.as_str()).collect()
}
pub fn find(&self, id: &str) -> Option<&Model> {
self.data.iter().find(|m| m.id == id)
}
}