use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelCapabilities {
pub streaming: bool,
pub tool_calls: bool,
pub vision: bool,
pub json_mode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ModelPricing {
pub input_per_mtok: f64,
pub output_per_mtok: f64,
pub currency: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ModelSummary {
pub id: String,
pub object: String,
pub created: u64,
pub owned_by: String,
pub display_name: String,
pub context_window: u32,
pub max_output_tokens: u32,
pub capabilities: ModelCapabilities,
pub pricing: ModelPricing,
pub status: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Model {
#[serde(flatten)]
pub summary: ModelSummary,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub modalities: Option<Modalities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supported_parameters: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub knowledge_cutoff: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub released_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub documentation_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Modalities {
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ModelList {
pub object: String,
pub data: Vec<ModelSummary>,
}