跳转到内容

Codex 会话导入忽略 cache_write_input_tokens 缓存写入按普通输入计价 - cc-switch

Quick fix

升级 cc-switch 或等待官方修复:Codex 会话日志导入未解析 cache_write_input_tokens,导致缓存写入被计入普通输入并按 1.0× 价计费。

报错原文
{"input_tokens":54141,"cached_input_tokens":43323,"cache_write_input_tokens":10815,"output_tokens":313,"reasoning_output_tokens":193,"total_tokens":54454}

Codex 从 openai/codex#33454 起在 rollout 的 token_count 事件中记录 cache_write_input_tokens(取自 Responses API 的 usage.input_tokens_details.cache_write_tokens),该字段与 cached_input_tokens 不重叠,两者均属于 input_tokens。cc-switch 的会话导入逻辑(src-tauri/src/services/session_usage_codex.rs)未解析该字段,插入数据库时将 cache_creation_tokens 硬编码为 0,并沿用旧的输入口径。结果:缓存写入 token 被当作新增输入,按 1.0× 输入价计费;而本地代理路径(f991726f 起)已正确从 usage.input_tokens_details.cache_write_tokens 记录缓存写入,两条路径口径不一致。内置定价表对缓存写入按 1.25× 输入计价(如 gpt-5.6-sol 为 $5 vs $4 / MTok),因此用户会被少收或多收取决于对比基准,相对正确口径而言缓存写入部分被低估。

  1. 确认你使用的 cc-switch 版本是否包含针对 issue #7634 的修复;若使用 3.20.2 或更早版本,请升级到最新 release。

  2. 若暂时无法升级,可在本地通过 SQL 修正历史数据:将 codex_session 来源记录中 cache_write_input_tokens 对应的数值从 input_tokens 中扣除,并写入 cache_creation_tokens,再按模型定价重新计算成本。

ToolCodex
Version3.20.2(本机观测);main @ 85caa69e(v3.20.4 之后)代码中问题仍在
PlatformsmacOS
为什么 Codex 会话导入后 cache_creation_tokens 总是 0?
因为 cc-switch 的会话导入解析器没有读取 rollout 日志中的 cache_write_input_tokens 字段,代码里把 cache_creation_tokens 写死为 0,注释标注「Codex 日志无此数据」。
这会影响计费金额吗?
会。缓存写入 token 被计入普通输入,按 1.0× 输入价计费;而正确口径应按缓存写入价(如 gpt-5.6-sol 为 1.25× 输入价)计费。issue 作者用 45 个 rollout 文件重放,gpt-5.6-sol 成本从 $0.3866 变为 $0.4314。
本地代理路径和会话导入路径的统计口径一致吗?
不一致。本地代理从 v3.17.0(commit f991726f)起已正确记录 usage.input_tokens_details.cache_write_tokens 为缓存写入;但会话导入路径直到 3.20.2 仍忽略该字段,导致同一批请求通过两种路径统计出的 cache_creation_tokens 不同。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。