"""提供商价格表与成本换算(ARCH §4.8)。 价格以「每百万 token 的最小货币单位(如分/cent)」表示,随 provider 配置维护; 未知 (provider, model) 则成本计 0(仍记账,便于观测)。 """ from __future__ import annotations import math from dataclasses import dataclass @dataclass(frozen=True) class Price: in_per_mtok: int out_per_mtok: int currency: str # 近似价(可后续移入 config / provider 配置维护) _PRICING: dict[tuple[str, str], Price] = { ("deepseek", "deepseek-chat"): Price(in_per_mtok=27, out_per_mtok=110, currency="USD"), } def cost_minor(provider: str, model: str, input_tokens: int, output_tokens: int) -> tuple[int, str]: price = _PRICING.get((provider, model)) if price is None: return 0, "USD" cost = math.ceil( input_tokens / 1_000_000 * price.in_per_mtok + output_tokens / 1_000_000 * price.out_per_mtok ) return cost, price.currency