From 43ccbdad47052c3c5f67190a0facf08092045537 Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Wed, 31 Dec 2025 02:21:53 +0800 Subject: [PATCH] feat(database): add Chinese AI model pricing data Add pricing for domestic AI models (CNY/1M tokens): - Doubao-Seed-Code (ByteDance) - DeepSeek V3/V3.1/V3.2 - Kimi K2/K2-Thinking/K2-Turbo (Moonshot) - MiniMax M2/M2.1/M2.1-Lightning - GLM-4.6/4.7 (Zhipu) - Mimo V2 Flash (Xiaomi) Also fix test case to use correct model ID and remove invalid currency column. --- src-tauri/src/database/schema.rs | 62 +++++++++++++++++++++++++++ src-tauri/src/services/usage_stats.rs | 21 +++------ 2 files changed, 69 insertions(+), 14 deletions(-) diff --git a/src-tauri/src/database/schema.rs b/src-tauri/src/database/schema.rs index ec59d3bc4..7071b26c0 100644 --- a/src-tauri/src/database/schema.rs +++ b/src-tauri/src/database/schema.rs @@ -992,6 +992,68 @@ impl Database { "0.03", "0", ), + // ====== 国产模型 (CNY/1M tokens) ====== + // Doubao (字节跳动) + ( + "doubao-seed-code", + "Doubao Seed Code", + "1.20", + "8.00", + "0.24", + "0", + ), + // DeepSeek 系列 + ( + "deepseek-v3.2", + "DeepSeek V3.2", + "2.00", + "3.00", + "0.40", + "0", + ), + ( + "deepseek-v3.1", + "DeepSeek V3.1", + "4.00", + "12.00", + "0.80", + "0", + ), + ("deepseek-v3", "DeepSeek V3", "2.00", "8.00", "0.40", "0"), + // Kimi (月之暗面) + ( + "kimi-k2-thinking", + "Kimi K2 Thinking", + "4.00", + "16.00", + "1.00", + "0", + ), + ("kimi-k2-0905", "Kimi K2", "4.00", "16.00", "1.00", "0"), + ( + "kimi-k2-turbo", + "Kimi K2 Turbo", + "8.00", + "58.00", + "1.00", + "0", + ), + // MiniMax 系列 + ("minimax-m2.1", "MiniMax M2.1", "2.10", "8.40", "0.21", "0"), + ( + "minimax-m2.1-lightning", + "MiniMax M2.1 Lightning", + "2.10", + "16.80", + "0.21", + "0", + ), + ("minimax-m2", "MiniMax M2", "2.10", "8.40", "0.21", "0"), + // GLM (智谱) + ("glm-4.7", "GLM-4.7", "2.00", "8.00", "0.40", "0"), + ("glm-4.6", "GLM-4.6", "2.00", "8.00", "0.40", "0"), + // Mimo (小米) + ("mimo-v2-flash", "Mimo V2 Flash", "0", "0", "0", "0"), ]; for (model_id, display_name, input, output, cache_read, cache_creation) in pricing_data { diff --git a/src-tauri/src/services/usage_stats.rs b/src-tauri/src/services/usage_stats.rs index 3ed76595c..18592b414 100644 --- a/src-tauri/src/services/usage_stats.rs +++ b/src-tauri/src/services/usage_stats.rs @@ -951,22 +951,15 @@ mod tests { // 准备额外定价数据,覆盖前缀/后缀清洗场景 conn.execute( "INSERT OR REPLACE INTO model_pricing ( - model_id, input_cost_per_million, output_cost_per_million, - cache_read_cost_per_million, cache_creation_cost_per_million, currency - ) VALUES (?, ?, ?, ?, ?, 'usd')", - params!["claude-haiku-4.5", "1.0", "2.0", "0.0", "0.0"], - )?; - conn.execute( - "INSERT OR REPLACE INTO model_pricing ( - model_id, input_cost_per_million, output_cost_per_million, - cache_read_cost_per_million, cache_creation_cost_per_million, currency - ) VALUES (?, ?, ?, ?, ?, 'usd')", - params!["kimi-k2-0905", "1.0", "1.0", "0.0", "0.0"], + model_id, display_name, input_cost_per_million, output_cost_per_million, + cache_read_cost_per_million, cache_creation_cost_per_million + ) VALUES (?, ?, ?, ?, ?, ?)", + params!["claude-haiku-4.5", "Claude Haiku 4.5", "1.0", "2.0", "0.0", "0.0"], )?; - // 测试精确匹配(必须存在同名条目) - let result = find_model_pricing_row(&conn, "claude-sonnet-4-5")?; - assert!(result.is_some(), "应该能精确匹配 claude-sonnet-4-5"); + // 测试精确匹配(seed_model_pricing 已预置 claude-sonnet-4-5-20250929) + let result = find_model_pricing_row(&conn, "claude-sonnet-4-5-20250929")?; + assert!(result.is_some(), "应该能精确匹配 claude-sonnet-4-5-20250929"); // 清洗:去除前缀和冒号后缀 let result = find_model_pricing_row(&conn, "anthropic/claude-haiku-4.5")?;