ares_store/
billing_config.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct BillingConfig {
9 #[serde(default)]
11 pub model_pricing: HashMap<String, ModelPricingConfig>,
12}
13
14impl BillingConfig {
15 pub fn pricing_for(
17 &self,
18 provider_name: &str,
19 model_name: &str,
20 ) -> Option<&ModelPricingConfig> {
21 let provider_key = pricing_key(provider_name);
22 let model_key = pricing_key(model_name);
23 self.model_pricing.values().find(|pricing| {
24 pricing_key(&pricing.provider) == provider_key
25 && pricing_key(&pricing.model) == model_key
26 })
27 }
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct ModelPricingConfig {
33 pub provider: String,
35 pub model: String,
37 pub input_usd_per_million_tokens: Option<f64>,
39 pub output_usd_per_million_tokens: Option<f64>,
41 #[serde(default = "default_billing_currency")]
43 pub currency: String,
44}
45
46fn default_billing_currency() -> String {
47 "USD".to_string()
48}
49
50fn pricing_key(value: &str) -> String {
51 value.trim().to_ascii_lowercase()
52}