use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ModelInfo {
pub id: String,
pub display_name: String,
pub max_tokens: u32,
pub provider: String,
pub pricing: Option<ModelPricing>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ModelPricing {
pub input_cost_per_million_tokens: f64,
pub output_cost_per_million_tokens: f64,
}
impl ModelInfo {
pub fn get_max_tokens(model_id: &str) -> u32 {
match model_id {
"claude-3-7-sonnet-20250219" => 200000,
"claude-3-5-sonnet-20241022"
| "claude-3-5-haiku-20241022"
| "claude-3-5-sonnet-20240620" => 200000,
"claude-3-opus-20240229" => 200000,
"claude-3-sonnet-20240229" => 200000,
"claude-3-haiku-20240307" => 200000,
"claude-2.1" | "claude-2.0" => 100000,
_ => 100000, }
}
pub fn get_pricing(model_id: &str) -> ModelPricing {
match model_id {
"claude-3-7-sonnet-20250219" => ModelPricing {
input_cost_per_million_tokens: 3.00,
output_cost_per_million_tokens: 15.00,
},
"claude-3-5-sonnet-20241022" | "claude-3-5-sonnet-20240620" => ModelPricing {
input_cost_per_million_tokens: 3.00,
output_cost_per_million_tokens: 15.00,
},
"claude-3-5-haiku-20241022" => ModelPricing {
input_cost_per_million_tokens: 0.80,
output_cost_per_million_tokens: 4.00,
},
"claude-3-opus-20240229" => ModelPricing {
input_cost_per_million_tokens: 15.00,
output_cost_per_million_tokens: 75.00,
},
"claude-3-haiku-20240307" => ModelPricing {
input_cost_per_million_tokens: 0.25,
output_cost_per_million_tokens: 1.25,
},
"claude-3-sonnet-20240229" => ModelPricing {
input_cost_per_million_tokens: 3.00,
output_cost_per_million_tokens: 15.00,
},
_ => ModelPricing {
input_cost_per_million_tokens: 8.00,
output_cost_per_million_tokens: 24.00,
},
}
}
}