Skip to content

Claude 上游返回 billing_usage 时缓存写入 Token 漏计,缓存写入完全未计费 #6353

Description

@kocor01

提交前必读(请勿删除本节)

  • 文档:https://docs.newapi.ai/
  • 使用问题先看或先问:https://deepwiki.com/QuantumNous/new-api
  • 开启透传后的转发相关反馈不接受 issue;透传模式会直接转发请求,请自行确认上游行为。
  • 不接受 coding plan、逆向渠道等技术支持类 issue。
  • 警告:删除本模板、删除小节标题或随意清空内容的 issue,可能会被直接关闭;重复恶意提交者可能会被 block。

您当前的 newapi 版本

main 分支最新提交 e0d5156115881780328d31fe9bce7fe25aa9c6c7(2026-07-21)

提交确认

  • 非重复 issue: 我已搜索现有 Issues,确认目前没有类似 issue。
  • 提交前必读: 我已完整阅读上方“提交前必读”,并已查看文档 https://docs.newapi.ai/、项目 README 且向 AI 提问,确认这不是使用、配置或接入类问题。
  • 模板完整: 我未删除此模板中的任何引导内容或小节标题,并会按要求完整填写。
  • 维护成本: 我理解项目维护者精力有限,不遵循模板要求的 issue 可能会被无视或直接关闭。

问题描述
现象
Tiered billing(动态计费)模式下,使用 Claude 上游返回的 billing_usage 时,cache_creation_input_tokens(缓存写入 Token)在上游返回了总量但未拆分 5m/1h 的情况下,被完全漏计,值为0。总费用未包含缓存写入 Token 的费用。

问题根源
上游数据特征: Claude API 返回了 cache_creation_input_tokens: n(总量),但 cache_creation 子对象为 null,没有 ephemeral_5m_input_tokens / ephemeral_1h_input_tokens 拆分字段。

两处级联 Bug:

① service/billing_usage.go — 数据映射层

cacheCreation5m := claudeUsage.GetCacheCreation5mTokens() // 0(CacheCreation==nil)
if cacheCreation5m == 0 {
cacheCreation5m = claudeUsage.ClaudeCacheCreation5mTokens // 0(也被设为0)
}
// cacheCreation5m = 0,总量 n 丢掉了
GetCacheCreation5mTokens() 返回 0(CacheCreation 为 nil),回退到 ClaudeCacheCreation5mTokens 也是 0(因为 relay 代码同样从 GetCacheCreation5mTokens() 赋值),导致 cacheCreation5m = 0,没有继续兜底到 CacheCreationInputTokens 总量。

② service/tiered_settle.go — 计费参数构建层

cc5m := float64(usage.PromptTokensDetails.CacheCreationTokensTotal()) // = n ✅
if usage.UsageSemantic == "anthropic" {
cc5m = float64(usage.ClaudeCacheCreation5mTokens) // = 0 🔴
}
cc5m 先通过 CacheCreationTokensTotal() 正确初始化为 n,然后被 ClaudeCacheCreation5mTokens(0)无条件覆盖,导致表达式计算时 cc=0。

重现步骤
curl -X POST 'https://xxx.com/v1/chat/completions' -H 'Content-Type: application/json' -H 'Authorization: Bearer sk-xxx' -d '{
"model": "claude-opus-4-8",
"messages": [
{
"role": "user",
"content": "1+5=?"
}
]
}'

预期结果
总费用计算正确

相关截图
总费用计算不正确,未包含缓存写入 Token 的费用。
Image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions