Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

token-meter

本机 token 计量和费用估算工具。

功能

  • codex:读取 ~/.codex/sessions 里的 token_count 事件,统计真实记录的 input/output/cached/reasoning token。
  • ccswitch:参考本机 ccswitch test 的算法,扫描配置目录文件大小,用 round(bytes / 4) 估算配置上下文 token。
  • text:统计文本、文件或目录的 token。安装了 tiktoken 时用精确 tokenizer;没安装时用内置估算器。
  • pricing.example.json:按模型配置每 100 万 token 的输入、缓存输入、输出单价。

快速使用

git clone https://github.com/w-tong2004/codex-token.git
cd codex-token
python3 token_meter.py codex --since 2026-06-01 --by-day

如果要用真实计费,建议复制一份 pricing.local.json,把 models.default 或实际模型名前缀里的价格改成你账号/代理的真实价格。pricing.example.json 里的 example 只作为写法模板,不会让仪表盘误判为已配置价格:

cp pricing.example.json pricing.local.json
python3 token_meter.py --pricing pricing.local.json codex --since 2026-06-01 --by-day

统计某段文本:

python3 token_meter.py text --model example --text "你好,统计一下这句话。"

参考 ccswitch 计算方式统计 ~/.claude 配置体积:

python3 token_meter.py ccswitch

统计某个项目目录里的 Python 文件:

python3 token_meter.py text /path/to/project --recursive --include "*.py"

输出 JSON:

python3 token_meter.py --json codex --since 2026-06-01

实时可视化

启动本地仪表盘:

python3 dashboard_server.py --host 127.0.0.1 --port 8765

可选启动参数:

python3 dashboard_server.py \
  --host 127.0.0.1 \
  --port 8765 \
  --sessions ~/.codex/sessions \
  --timezone Asia/Shanghai \
  --pricing ./pricing.local.json

然后打开:

http://127.0.0.1:8765/

仪表盘默认每 60s 自动刷新一次。每次刷新都会检查 .codex/sessions 是否有新日志、重新计算今日总 token,并更新页面顶部的“今日总 token”和“较上次新增”。也可以点击右上角刷新按钮立即更新。

当前仪表盘包含:

  • 今日总 token、最近三天/自选窗口总量、当前时间桶、峰值时间桶、活跃会话今日用量。
  • 今日、选中窗口、活跃会话的计费估算;未配置价格时会显示“未配置”。
  • input / cached input / output / reasoning output 分项。
  • 1/5/10/15/30/60 分钟时间线粒度。
  • 1/3/7/14/30 天统计窗口。
  • 会话明细,支持“全部 / 活跃 / 高耗”筛选和 session/prompt/model 搜索。
  • JSON 导出,以及时间线、日汇总、会话三类 CSV 导出。
  • 扫描健康状态、文件级缓存命中、去重状态和原始事件数量。

服务端 API:

GET /api/health
GET /api/usage?days=3&bucket=5
GET /api/export?format=csv&type=timeline&days=3&bucket=5
GET /api/export?format=csv&type=days&days=3&bucket=5
GET /api/export?format=csv&type=sessions&days=3&bucket=5

days 范围为 1..30,bucket 支持 1,5,10,15,30,60 分钟。所有接口都支持额外传入:

path=~/.codex/sessions
timezone=Asia/Shanghai
pricing=./pricing.local.json

页面也可以直接带这些参数,例如:

http://127.0.0.1:8765/?pricing=./pricing.local.json&bucket=1

页面上的刷新和 CSV 导出会自动沿用 URL 里的 path、timezone、pricing 参数。

性能策略:

  • 冷启动会完整解析所有 session 日志。
  • 后续刷新会先比较文件 size/mtime,只重读变化文件。
  • 如果日志完全没变,会命中整份结果缓存。
  • 如果仍有 Codex session 正在工作,通常会看到“复用 N / 读取 1”。

更换 API 或代理 URL:

  • 如果新的 URL/API 仍然通过 Codex 写入同样的 ~/.codex/sessions 日志,并包含 token_count 事件,仪表盘可以继续直接使用。
  • 如果新的工具不写 Codex session 日志,或 token 字段名不同,需要给 dashboard_server.py 增加一个日志适配器。
  • 价格和供应商无关,改 pricing.local.json 或 URL 参数里的 pricing=... 即可。

费用公式

费用按以下方式计算:

uncached_input = input_tokens - cached_input_tokens
cost = uncached_input * input_per_1m / 1_000_000
     + cached_input_tokens * cached_input_per_1m / 1_000_000
     + output_tokens * output_per_1m / 1_000_000

reasoning_output_tokens 作为输出 token 的子集展示,不额外重复计费。若你的供应商对 reasoning token 单独计费,可以把 output_per_1m 改成适合你的折算价格。

Codex 日志计数策略

Codex 的 total_token_usage 在部分 session 文件开头可能带有历史累计值。为避免高估,codex 模式默认对每个文件的第一个 token_count 事件只计 last_token_usage,后续事件按 total_token_usage 的正向差值计数。

可通过 --first-event 调整:

python3 token_meter.py codex --first-event last
python3 token_meter.py codex --first-event zero
python3 token_meter.py codex --first-event total

注意

Codex 订阅或本机代理不一定等同于 OpenAI API 按量账单;这个工具负责把本地记录里的 token 汇总出来,并按你配置的价格估算成本。

ccswitch 模式显示的是“配置上下文估算”,不是已消费账单,也不是剩余额度。codex 模式显示的是日志口径下的已使用 token。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages