mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-27 16:07:02 +00:00
按上游响应模型计费的准入过宽、且自带用例必然失败,本次一并修复。 严格化准入 - 新增 PricingService.GetIdentifiedModelPricing / BillingService.HasIdentifiedTokenPricing: 只接受价格表中能被确定性识别的条目(精确名、已知拼写变体、去掉日期版本后缀), 不再接受 getFallbackPricing / matchByModelFamily 按子串猜出的系列兜底价。 此前上游只要自报一个含 "haiku" 的编造名字就能被判定"已定价",把账单压到最便宜的 系列价(实测 claude-opus-4.8 基线 $0.0019250 → $0.0000963,20 倍少收)。 GetModelPricing 的对外行为不变,仅把前三步查找抽成共用函数。 - 图片 / 视频 / 网页搜索请求不再走响应模型覆盖:这些路径按张、按秒、按次定价, 与准入检查所验的 token 价不是同一套价格表。 - 准入判断抽成 responseModelBillingDeclaration,两条计费主干共用同一套规则。 正确性与可观测性 - 去掉 recordUsageCore 中 billingModel 的无效赋值(ineffassign 已启用,会让 golangci-lint 直接失败),改由日志表达实际生效的计费基准。 - 补 cost != nil 守卫,与 OpenAI 侧及本文件既有写法对齐。 - 每次实际生效的基准切换记一条 billing.response_model_applied,少收可审计。 - 修正 upstreamResponseModelObserver 上"冲突仅用于诊断、永不影响计费"的过期注释。 测试 - gpt-5.1 与 gpt-5.5 实际共用同一条 gpt-5.4 价格,夹具"价格必须不同"的前置断言 必然失败,OpenAI 侧 3 个用例(含 4 个子用例)从未跑通;改用 gpt-5.4-nano / gpt-5.5。Anthropic 侧 claude-opus-4 不是价格表精确条目,改用 claude-opus-4.8。 - 夹具增加"必须可被确定性识别"的前置断言,避免用例被更靠前的门挡掉而失去判别力。 - 新增:准入规则表驱动用例、可识别性判定用例、编造家族名在两条主干上均被拒的用例。 前端 - 选择该模式时提示"计费基准以上游自报模型为准,只降不升,仅对可信上游启用"。