use crate::PricingConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct ModelInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub context_length: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pricing: Option<PricingConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub vision: Option<bool>,
}
impl ModelInfo {
pub fn cost(&self, prompt_tokens: u32, completion_tokens: u32) -> f64 {
let Some(ref p) = self.pricing else {
return 0.0;
};
(prompt_tokens as f64 * p.prompt_cost_per_million
+ completion_tokens as f64 * p.completion_cost_per_million)
/ 1_000_000.0
}
}