Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

codex-model-watch

本地监控 Codex 的模型使用、5h/7d 额度水位与容量拒单,并用探针即时验证「请求 A 却被悄悄换成 B」的模型偷换。纯 Python 标准库,数据不出本机。

中文 | English

一个纯本地、零依赖的小工具:监控你 Codex 的模型使用、额度水位、容量拒单,并能主动探测「模型偷换」—— 你请求的是 A,服务端实际派出的却是 B。

面板总览

背景:什么是「模型偷换」

OpenAI 在容量紧张时会启用 safety buffering 机制:你请求高端模型(例如 gpt-6-astra), 服务端可能悄悄把请求改派到更快/更小的模型(例如 gpt-5.6-luna),界面不会有任何提示。 被偷换的输出质量会明显下降,而你完全不知道原因。

本工具把这个现象变成看得见的数据。

它能告诉你

问题 数据来源 说明
我都在用哪些模型?用了多少? 本地会话日志 每一轮实际生效的模型、轮次、token 用量、时长、项目分布
我的额度还剩多少? 本地会话日志 Codex 上报的 5 小时 / 7 天窗口用量百分比(含重置时间)
我被容量拒单了多少次? 本地会话日志 Selected model is at capacity 这类错误的次数与明细
现在请求 X 会被派什么? 主动探针 发一条最小请求,读服务端实际派出的模型,即时验证是否被偷换
历史上偷换过多少次? 探针历史 每次探针的「请求 → 实际」记录与偷换率

原理(重要,请先读)

工具有两条独立的数据通道:

1. 本地会话日志(零侵入、零额度消耗、全历史)

Codex 会把每一轮会话事件写入本地文件:

~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl

每个 JSONL 行是一个事件,本工具增量解析其中四类:

事件 提供什么
turn_context 该轮实际生效的模型(payload.model)、推理力度、所属项目(cwd)
token_usage_record 该轮 token 用量(输入/输出/缓存命中)
event_msg/task_complete 轮时长、首字延迟、错误信息(容量拒单就在这里)
event_msg/token_count rate_limits 字段里的 5h/7d 窗口额度用量百分比

已知限制(实测结论):当服务端偷换模型时,Codex 会把偷换后的模型一致化地写进本地日志 ——「请求字段」和「实际字段」都会变成偷换后的模型。因此历史日志无法还原偷换事件, 这是探针存在的根本原因。日志里的 safety_buffering 事件类型在 Codex 内部存在, 但不会被完整落盘。

2. 主动探针(偷换的即时验证)

用你本地的 Codex 登录态(~/.codex/auth.json),向 chatgpt.com/backend-api/codex/responses 发一条最小请求(“hi”,low 推理力度), 读取 SSE 流里 response.created 事件返回的模型名:

  • 请求 X,返回 X → 一致
  • 请求 X,返回别的 → 被偷换,同时记录响应头 x-codex-safety-buffering-enabled

每次探针只消耗极少量额度(一条 "hi"),面板上点一下即可,也可以自己挂 cron 定时跑。

快速开始

要求:Python 3.8+(仅标准库,无需 pip install 任何东西)。Windows / macOS / Linux 均可。

git clone https://github.com/<you>/codex-model-watch.git
cd codex-model-watch

# 用真实数据启动(自动扫描本地会话日志并打开浏览器)
python codex_model_watch.py

# 没有登录态 / 只想看看界面长什么样
python codex_model_watch.py --demo

然后浏览器会自动打开 http://127.0.0.1:8787。

探针与异常

常用参数

参数 说明
--port 8787 本地网页端口
--max-age-days 30 只解析最近 N 天的日志,0 = 全部(首次扫描建议先限定天数,历史越大越慢)
--codex-home PATH Codex 主目录(默认 ~/.codex)
--demo 内置演示数据,不读取真实日志
--scan-only 只扫描解析并打印模型分布摘要,不启动网页
--no-open 不自动打开浏览器

数据库存在 ~/.codex-model-watch/state.db(SQLite),重复启动是增量解析,不会重复计数。

探针怎么用

  1. 先用 Codex 正常登录一次(保证 ~/.codex/auth.json 存在且未过期);
  2. 打开面板,在「偷换探针」区输入要验证的请求模型(例如 gpt-6-astra);
  3. 点「立即探测」,几秒后显示:请求 X → 实际派出 Y,一致或被偷换一目了然;
  4. 探针历史会沉淀成偷换率曲线,配合定时任务(如每 2 小时一次)即可长期观察偷换窗口。

隐私

  • 所有解析、统计、存储都发生在本机;数据库在本机;网页只监听 127.0.0.1;
  • 唯一的外发请求是你手动触发的探针(发给你自己的 Codex 后端);
  • 仓库代码里没有任何凭据、遥测或上报。

已知限制

  • 历史偷换无法从本地日志还原(见上文「已知限制」),探针只能验证当下;
  • rollout 是 Codex 的内部格式,随版本演进可能变化(本工具在 Codex CLI 0.153–0.155 上实测通过);
  • 探针的结论只代表「探测那一刻」的状态,容量紧张时段偷换是动态开关的。

License

MIT

About

最近被codex的模型降智搞得很痛苦,所以做了这个用来监控,现在分享给大家,可以看看自己模型是否被替换掉(如果需要可以看任何AI的模型是否被替换掉,稍微改改登录凭证即可,包括中转站)。最后,这个还可以看到你是否被灰度到了最新模型上面。

Resources

Stars

154 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages