mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
## 断掉的链路 types.go 里 ReasoningTokens 从被定义起就没人读过。适配器层早就解析并透传了 (opencodego / gemini / anthropic 都写了那段提取),网关在 chat.go 记录 usage 时读了 PromptTokensDetails.CachedTokens,却在隔壁的 CompletionTokensDetails.ReasoningTokens 上把它丢了 —— 数字到了响应里, 在唯一能留住它的地方被扔掉。 后果:任何计费规则都无法区分「思考」和「可见输出」。 ## 为什么默认不启用定价 实测四个源(deepseek-v4.1-flash / claude-opus-4-8 / glm-5.3-flash / space-bunny-free,含 anthropic thinking opt-in)全部不返回该字段。所以 reasoning_price 默认为 nil,costFor 完全跳过该分支,标准公式与改动前逐位相同 —— 这是关键:现有账单不能因为这次改动而变动。 启用时只应用「差额」:把思考部分从普通输出价重定价到思考价。完整再收一次会 对每个思考 token 双重计费,这正是判据里最容易被写出的错误实现。 clamp 到 completion_tokens:供应商报出比 completion 还大的 reasoning 是畸形 数据,不 clamp 会得到 92 倍于整个请求的费用,而且这个数字看起来足够合理, 能在仪表盘上活下来。 判据三条 + 三次变异自证(移除 clamp / 双重计费 / 默认启用)全部变红。 ## 遗留 reasoning_price 未接入 BillingRule DSL —— 目前只能通过直接写 prices 生效。 DSL 字段要连带改 config 结构、编译器和规则编辑器 UI,是独立一步。 实测全部源都不返回该字段,所以这条暂时没有实际影响面。 Co-Authored-By: ModelRouter <noreply@modelrouter.dev>