use std::collections::HashMap;
use once_cell::sync::Lazy;
#[derive(Debug, Clone)]
pub struct ModelInfo {
pub id: &'static str,
pub name: &'static str,
pub provider: &'static str,
pub input_price: f64,
pub output_price: f64,
pub max_tokens: u32,
pub supports_vision: bool,
pub supports_audio: bool,
pub supports_video: bool,
}
pub static MODELS: Lazy<HashMap<&'static str, ModelInfo>> = Lazy::new(|| {
let mut m = HashMap::new();
m.insert("gpt-4.1-mini", ModelInfo {
id: "gpt-4.1-mini",
name: "GPT-4.1 Mini",
provider: "OpenAI",
input_price: 0.28,
output_price: 1.12,
max_tokens: 16384,
supports_vision: true,
supports_audio: false,
supports_video: false,
});
m.insert("gpt-4.1-nano", ModelInfo {
id: "gpt-4.1-nano",
name: "GPT-4.1 Nano",
provider: "OpenAI",
input_price: 0.07,
output_price: 0.28,
max_tokens: 16384,
supports_vision: true,
supports_audio: false,
supports_video: false,
});
m.insert("gemini-2.5-flash", ModelInfo {
id: "gemini-2.5-flash",
name: "Gemini 2.5 Flash",
provider: "Google",
input_price: 0.21,
output_price: 1.75,
max_tokens: 65536,
supports_vision: true,
supports_audio: true,
supports_video: true,
});
m
});
pub struct Models;
impl Models {
pub fn list() -> Vec<&'static ModelInfo> {
MODELS.values().collect()
}
pub fn get(id: &str) -> Option<&'static ModelInfo> {
MODELS.get(id)
}
}