From c0561adfb5814c47c0ba586076a6008aadb4af3b Mon Sep 17 00:00:00 2001 From: cyq <15000851237@163.com> Date: Thu, 4 Jun 2026 17:38:16 +0800 Subject: [PATCH] fix(tui): price Xiaomi MiMo primary models --- crates/tui/src/pricing.rs | 96 ++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 31 deletions(-) diff --git a/crates/tui/src/pricing.rs b/crates/tui/src/pricing.rs index 9ac958900..2da0eab99 100644 --- a/crates/tui/src/pricing.rs +++ b/crates/tui/src/pricing.rs @@ -117,39 +117,52 @@ fn pricing_for_model_at(model: &str, _now: DateTime) -> Option return Some(deepseek_v4_pro_pricing()), + "xiaomi/mimo-v2.5" | "mimo-v2.5" => return Some(deepseek_v4_flash_pricing()), + _ => {} } - if lower.contains("v4-pro") || lower.contains("v4pro") { - // DeepSeek's pricing page says the V4-Pro promotional 75% discount - // becomes the official one-quarter base price after 2026-05-31 15:59 - // UTC. Keep using the adjusted rate after that cutoff (#2489). - Some(ModelPricing { - usd: CurrencyPricing { - input_cache_hit_per_million: 0.003625, - input_cache_miss_per_million: 0.435, - output_per_million: 0.87, - }, - cny: CurrencyPricing { - input_cache_hit_per_million: 0.025, - input_cache_miss_per_million: 3.0, - output_per_million: 6.0, - }, - }) + if lower.contains("deepseek") { + if lower.contains("v4-pro") || lower.contains("v4pro") { + // DeepSeek's pricing page says the V4-Pro promotional 75% discount + // becomes the official one-quarter base price after 2026-05-31 15:59 + // UTC. Keep using the adjusted rate after that cutoff (#2489). + Some(deepseek_v4_pro_pricing()) + } else { + Some(deepseek_v4_flash_pricing()) + } } else { - // deepseek-v4-flash pricing. - Some(ModelPricing { - usd: CurrencyPricing { - input_cache_hit_per_million: 0.0028, - input_cache_miss_per_million: 0.14, - output_per_million: 0.28, - }, - cny: CurrencyPricing { - input_cache_hit_per_million: 0.02, - input_cache_miss_per_million: 1.0, - output_per_million: 2.0, - }, - }) + None + } +} + +fn deepseek_v4_pro_pricing() -> ModelPricing { + ModelPricing { + usd: CurrencyPricing { + input_cache_hit_per_million: 0.003625, + input_cache_miss_per_million: 0.435, + output_per_million: 0.87, + }, + cny: CurrencyPricing { + input_cache_hit_per_million: 0.025, + input_cache_miss_per_million: 3.0, + output_per_million: 6.0, + }, + } +} + +fn deepseek_v4_flash_pricing() -> ModelPricing { + ModelPricing { + usd: CurrencyPricing { + input_cache_hit_per_million: 0.0028, + input_cache_miss_per_million: 0.14, + output_per_million: 0.28, + }, + cny: CurrencyPricing { + input_cache_hit_per_million: 0.02, + input_cache_miss_per_million: 1.0, + output_per_million: 2.0, + }, } } @@ -340,6 +353,27 @@ mod tests { assert_eq!(pricing.cny.output_per_million, 2.0); } + #[test] + fn xiaomi_mimo_primary_models_use_matching_deepseek_v4_rates() { + let now = Utc.with_ymd_and_hms(2026, 6, 4, 0, 0, 0).single().unwrap(); + + let pro_pricing = pricing_for_model_at("mimo-v2.5-pro", now).unwrap(); + assert_eq!(pro_pricing.usd.input_cache_hit_per_million, 0.003625); + assert_eq!(pro_pricing.usd.input_cache_miss_per_million, 0.435); + assert_eq!(pro_pricing.usd.output_per_million, 0.87); + assert_eq!(pro_pricing.cny.input_cache_hit_per_million, 0.025); + assert_eq!(pro_pricing.cny.input_cache_miss_per_million, 3.0); + assert_eq!(pro_pricing.cny.output_per_million, 6.0); + + let flash_pricing = pricing_for_model_at("xiaomi/mimo-v2.5", now).unwrap(); + assert_eq!(flash_pricing.usd.input_cache_hit_per_million, 0.0028); + assert_eq!(flash_pricing.usd.input_cache_miss_per_million, 0.14); + assert_eq!(flash_pricing.usd.output_per_million, 0.28); + assert_eq!(flash_pricing.cny.input_cache_hit_per_million, 0.02); + assert_eq!(flash_pricing.cny.input_cache_miss_per_million, 1.0); + assert_eq!(flash_pricing.cny.output_per_million, 2.0); + } + #[test] fn cost_estimate_calculates_usd_and_cny() { let estimate = calculate_turn_cost_estimate("deepseek-v4-flash", 1_000_000, 500_000)