From c302bac5844172e07e29e6ecec35eae76fcfcf58 Mon Sep 17 00:00:00 2001 From: MeCKodo Date: Tue, 12 May 2026 13:26:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95=20fallback=20?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC=E8=A1=A8=EF=BC=8C=E8=A6=86=E7=9B=96=206=20?= =?UTF-8?q?=E5=A4=A7=E5=8E=82=E5=95=86=2032=20=E4=B8=AA=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原有 fallback 仅含 4 个 Claude 模型,LiteLLM 拉取失败时 (macOS SSL 证书问题等),所有非 Anthropic 模型费用显示 $0。 新增模型覆盖: - OpenAI GPT-5 系列(7 个) - DeepSeek(4 个) - Kimi/Moonshot(5 个) - 智谱 GLM(5 个) - 阿里 Qwen(4 个) - 小米 MiMo(3 个,含 256K 和 1M 上下文两档定价) 同时为 LiteLLM 拉取增加 SSL 证书降级。 Co-Authored-By: Claude Opus 4.7 --- src/analyzer/cost.py | 138 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 3 deletions(-) diff --git a/src/analyzer/cost.py b/src/analyzer/cost.py index 4193309..976d378 100644 --- a/src/analyzer/cost.py +++ b/src/analyzer/cost.py @@ -73,9 +73,18 @@ def _load_pricing() -> dict: def _fetch_and_cache() -> dict: - req = urllib.request.Request(LITELLM_URL, headers={"User-Agent": "token-tracker/0.1"}) - with urllib.request.urlopen(req, timeout=10) as resp: - data = json.loads(resp.read().decode()) + import ssl + ctx = ssl.create_default_context() + try: + req = urllib.request.Request(LITELLM_URL, headers={"User-Agent": "token-tracker/0.1"}) + with urllib.request.urlopen(req, timeout=10, context=ctx) as resp: + data = json.loads(resp.read().decode()) + except ssl.SSLCertVerificationError: + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + req = urllib.request.Request(LITELLM_URL, headers={"User-Agent": "token-tracker/0.1"}) + with urllib.request.urlopen(req, timeout=10, context=ctx) as resp: + data = json.loads(resp.read().decode()) try: with open(CACHE_PATH, "w") as f: @@ -88,6 +97,7 @@ def _fetch_and_cache() -> dict: def _fallback_pricing() -> dict: return { + # --- Anthropic Claude --- "claude-opus-4-6": { "input_cost_per_token": 15e-6, "output_cost_per_token": 75e-6, @@ -112,4 +122,126 @@ def _fallback_pricing() -> dict: "cache_creation_input_token_cost": 1e-6, "cache_read_input_token_cost": 0.08e-6, }, + # --- OpenAI GPT-5 --- + "gpt-5": { + "input_cost_per_token": 1.25e-6, + "output_cost_per_token": 10e-6, + }, + "gpt-5.2-codex": { + "input_cost_per_token": 1.75e-6, + "output_cost_per_token": 14e-6, + }, + "gpt-5.3-codex": { + "input_cost_per_token": 1.75e-6, + "output_cost_per_token": 14e-6, + }, + "gpt-5.3-codex-spark": { + "input_cost_per_token": 1.75e-6, + "output_cost_per_token": 14e-6, + }, + "gpt-5.4": { + "input_cost_per_token": 2.5e-6, + "output_cost_per_token": 15e-6, + }, + "gpt-5.4-mini": { + "input_cost_per_token": 0.75e-6, + "output_cost_per_token": 4.5e-6, + }, + "gpt-5.5": { + "input_cost_per_token": 5e-6, + "output_cost_per_token": 30e-6, + }, + # --- 阿里 Qwen --- + "qwen/qwen3.6-plus": { + "input_cost_per_token": 0.4e-6, + "output_cost_per_token": 1.2e-6, + }, + "qwen-max": { + "input_cost_per_token": 1.6e-6, + "output_cost_per_token": 6.4e-6, + }, + "qwen-plus": { + "input_cost_per_token": 0.4e-6, + "output_cost_per_token": 1.2e-6, + }, + "qwen-turbo": { + "input_cost_per_token": 0.05e-6, + "output_cost_per_token": 0.2e-6, + }, + # --- DeepSeek --- + "deepseek-v4-flash": { + "input_cost_per_token": 0.14e-6, + "output_cost_per_token": 0.28e-6, + "cache_read_input_token_cost": 0.0028e-6, + }, + "deepseek-v4-pro": { + "input_cost_per_token": 1.74e-6, + "output_cost_per_token": 3.48e-6, + "cache_read_input_token_cost": 0.0145e-6, + }, + "deepseek-chat": { + "input_cost_per_token": 0.14e-6, + "output_cost_per_token": 0.28e-6, + }, + "deepseek-reasoner": { + "input_cost_per_token": 0.14e-6, + "output_cost_per_token": 0.28e-6, + }, + # --- Kimi / Moonshot --- + "kimi-k2": { + "input_cost_per_token": 0.55e-6, + "output_cost_per_token": 2.20e-6, + }, + "kimi-k2-thinking": { + "input_cost_per_token": 0.55e-6, + "output_cost_per_token": 2.20e-6, + }, + "kimi-k2-turbo": { + "input_cost_per_token": 1.10e-6, + "output_cost_per_token": 8.00e-6, + }, + "kimi-k2.5": { + "input_cost_per_token": 0.60e-6, + "output_cost_per_token": 3.00e-6, + }, + "moonshot-v1": { + "input_cost_per_token": 0.55e-6, + "output_cost_per_token": 2.20e-6, + }, + # --- 智谱 GLM --- + "glm-5": { + "input_cost_per_token": 0.95e-6, + "output_cost_per_token": 3.15e-6, + }, + "glm-4.7": { + "input_cost_per_token": 0.60e-6, + "output_cost_per_token": 2.20e-6, + }, + "glm-4.6": { + "input_cost_per_token": 0.60e-6, + "output_cost_per_token": 2.20e-6, + }, + "glm-4-flash": { + "input_cost_per_token": 0.05e-6, + "output_cost_per_token": 0.05e-6, + }, + "glm-4": { + "input_cost_per_token": 0.60e-6, + "output_cost_per_token": 2.20e-6, + }, + # --- 小米 MiMo --- + "mimo-v2-flash": { + "input_cost_per_token": 0.10e-6, + "output_cost_per_token": 0.30e-6, + }, + "mimo-v2.5-pro": { + "input_cost_per_token": 1.0e-6, + "output_cost_per_token": 3.0e-6, + "cache_read_input_token_cost": 0.2e-6, + }, + "mimo-v2.5-pro[1m]": { + "input_cost_per_token": 2.0e-6, + "output_cost_per_token": 6.0e-6, + "cache_read_input_token_cost": 0.4e-6, + }, }