use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)] pub struct ReasoningSpec { pub enabled: bool, pub effort: Option, } #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum ModelLatency { #[default] Standard, Fast, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct ModelSpec { pub model_id: String, pub display_name: Option, pub reasoning: ReasoningSpec, pub latency: ModelLatency, pub max_output_tokens: Option, pub context_window_tokens: Option, #[serde(default)] pub supports_image_generation: bool, #[serde(default)] pub extra_params: serde_json::Value, } impl ModelSpec { pub fn new(model_id: impl Into) -> Self { Self { model_id: model_id.into(), display_name: None, reasoning: ReasoningSpec::default(), latency: ModelLatency::Standard, max_output_tokens: None, context_window_tokens: None, supports_image_generation: false, extra_params: serde_json::json!({}), } } }