Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
disable-cooling 打开时,一个下架的模型让同一张凭证每秒被重试
2026-10-26

disable-cooling 打开时,一个下架的模型让同一张凭证每秒被重试

CLIProxyAPI 关掉冷却之后,「模型不存在」也不再记冷却:本地先把时限写成零,再把不可用标记清掉,同一张坏凭证于是每秒被重选。这篇给出两处源码、一个三分钟自查和今晚的三档处置,另附同一小时里三条还没发版的动态。

中
中转站风控与更新速报@Karuha
10 月 27 日凌晨 1 点 01 分,CLIProxyAPI 收到一张新单。标题写得很直白:就算关掉冷却,model_not_found 也要按 12 小时处理。1
这张单接得上上一期的处置建议。上一期说别用 routing.cooldown.disable-cooling 全局关冷却来绕 429,理由是它连真正的额度耗尽一起关掉。今天补上的是另一半后果:模型根本不存在时,本地也不再留下任何记录。
窗口是北京时间 00:28 到 01:20。四个仓库都没有新版本,CLIProxyAPI 的 main 与 dev 都停在 v8.0.44 发布时那个提交 1f917e77。2

关掉冷却之后,永久错误也不再被记账

v8.0.44 的 MarkResult 按错误类型分派。命中「模型不被支持」这一类时,第 1041 行先看 disableCooling:为真就把 NextRetryAfter 写成零时刻,为假才轮到 12 小时。3
零时刻还只是第一步。同一函数第 1229 行另有一道收尾:disableCooling 为真、且两个恢复时刻都为空时,把 Unavailable 与 Quota.Exceeded 一并清掉。4
这两行让这张凭证在这个模型上重新算作正常状态,下一次选号照常选它。
v8.0.44 的冷却分支
v8.0.44 的 sdk/cliproxy/auth/conductor_cooldown.go 第 1039–1049 行:第 1042 行判 disableCooling,为真时第 1043 行把冷却写成零时刻;12 小时只出现在第 1046 行的 else 分支里。3
冷却为零时清掉不可用标记
v8.0.44 的同一文件第 1227–1233 行:第 1229 行同时要求关闭冷却与两个时刻为空,第 1230–1231 行把 Unavailable 与 Quota.Exceeded 都置回假。4
报障人给了一次真实复现:glm-5.3-flash 已从上游配置里删掉,账户写着 disable-cooling: true,同一个坏凭证大约每秒被重试一次。1
哪些报错会落进「模型不被支持」这一支?除了结构化的 model_not_found,还有 400、422、404 里带这几句文案的回复:model not supported、requested model is unavailable、not available for your plan。5
最后一句「你的套餐用不了这个模型」,在实际报错里出现得比 model_not_found 更多。
disableCooling 有四个来源:全局的 routing.cooldown.disable-cooling、单凭证或单 key 的 disable-cooling 覆盖、OpenAI 兼容分组里的同名键,以及 Home 模式。6 那个解析函数第一句就因为 cfg.Home.Enabled 返回真。

三分钟自查

  • 配置:grep -rn "disable-cooling" config.yaml。命中全局那一行,或者某张凭证下的 disable-cooling: true,就有嫌疑。
  • 冷却表:GET /v8/management/credentials 每条凭证带一个 cooldowns 数组,元素形如 {scope, model_key, reason, retry_at, remaining_seconds}。78
  • 撞上这条洞的模型,在 cooldowns 里查不到条目:它被判成可用,就没有冷却可报。真的按 12 小时生效时,这里会有一条 scope: model、reason: model_not_supported、remaining_seconds 接近 43200 的记录。
  • 日志:同一个模型名反复 404,而冷却表干净,基本就能对上。
Home 模式下这个数组恒为 null,因为冷却表由中枢那侧维护;这个判断写在 auth_files.go 第 131 行。

今晚能做的

三档,按代价从小到大。
  1. 把会撞下架模型的那张凭证改回 disable-cooling: false。解析函数先读单凭证覆盖、再读全局,所以其他凭证继续不受冷却影响。6 代价是这张凭证重新有冷却,当初想躲掉的黑屏期会回来。
  2. 把下架模型从这张账号的可用模型里摘掉。选号阶段就排掉它,请求不会再打到不存在的模型上。代价是还在调用它的客户端直接拿到 404。
  3. 等 #7019 进版。它把这条分支的 12 小时改成无条件执行,测试里的期望值也一起改成约 12 小时;目前仍是 open。1
站上有多张凭证、只有个别账号删过模型,第 1 条最省事:坏的那张安静下来,其他账号照旧不冷却。

补丁没堵住的两处

#7019 只动了「模型不被支持」这一支。同一个函数里另两处写法一模一样:
  • 模型级的通用 404,第 1078–1086 行,关掉冷却时同样清零。9
  • 凭证级的 404,第 2768–2776 行,12 小时同样只写在 else 里。这一支在失败记到整张凭证时才走,清理动作放在一个 defer 里,效果一样。10
这两类 404 常见的来源是端点写错、base_url 指到不存在的路径、上游把整条路由下线。开着冷却,它们会安静 12 小时;关掉冷却,同一张凭证会被反复重试。
排查这类反复 404 时,顺手看一眼这两个分支,比只等补丁快。

同一小时里的另外三件事

interactions 的图片请求,v8.0.44 仍被一句 stream 打回

PR #7002 的作者在 00:33 补了一条复测。他拿 eceasy/cli-proxy-api:latest 的 v8.0.44 容器,POST /v1beta/interactions 带 response_format:{"type":"image"} 与 stream:false,回的是 400 INVALID_ARGUMENT: Unknown name "stream" at 'request'。11
同一个模型走 POST /v1beta/models/gemini-3.1-flash-image:generateContent,正常出图。
这个字段是本地写进去的。interactions 的翻译层在 stream 为真、或请求体自带 stream:true 时,会写一个 request.stream。12
所谓「非流式」那条路,其实也以流式建上游请求。executeClaudeNonStream 翻译时传 Stream: true,随后按 SSE 收、聚合成一份非流式响应。13
删字段的动作只写在流式执行器里,非流式这条没有。14
非流式路径仍以流式翻译
v8.0.44 的 internal/runtime/executor/antigravity_executor_execute.go 第 293–300 行:第 297 行组装翻译请求时写死 Stream: true,第 298 行据此译出带 request.stream 的请求体;这条聚合路径上没有对应的删除。13
影响范围比图片更宽。分派条件把 claude 系列、gemini-3-pro、gemini-3.1-flash-image 都送进同一个函数。15 按这条代码路径推,这三类模型走 interactions 且 stream:false 时都会带上该字段;报障人只实测了图片这一条。
补丁把删除挪到 buildRequest,也就是所有 Antigravity 请求都要经过的最后一站,顺便删掉流式执行器里那行重复动作。11 3 个文件 +23/−2,mergeable clean,仍未合并。
今天绕开的办法是走 :generateContent,或者照常流式调用。

Meta 的订阅额度只活在一次流里

issue #7018 是功能提案:Meta/Muse Code 订阅账号挂在代理后面时,5 小时与周额度看不见。上游每条流里都会发 response.subscription_usage 事件,带 window 与 weekly 的 used_percent 与 resets_at。16
本地认了这个事件,然后直接跳过。meta_executor_execute.go 第 204 行命中即 continue,落库动作一个都没有。17
SSE 侧还有一道统一过滤,把这个事件和 responsesapi.* 一起挡在客户端之外。18
Meta 额度事件被跳过
v8.0.44 的 internal/runtime/executor/meta_executor_execute.go 第 202–213 行:第 204 行认出 response.subscription_usage 后第 206 行直接 continue,这段代码里没有任何保存或计数动作。17
客户端也补不回来。Muse Code 指向代理时用 API key 认证,muse usage --json 回的是 {"allowance":null,"reason":"api_key"}。16
提案给了两种形状:在 /v0/management/auth-files 的每条账号上加一个 subscription_usage 字段,或者开一个按 auth id 查的独立端点。目前只是一张 issue,还没有补丁。

codex-proxy 的桌面端内更新只进了 dev

PR #878 在北京时间 00:34 合并,14 个文件 +161/−86,合并提交 84ea94d9。19
它把桌面端从「打开 Release 页手动下载」改成应用内闭环:打包模式下静默发现并下载新版本,Dashboard 顶栏显示进度,下载完一键重启安装。macOS 因为 ad-hoc 签名无法自动安装,仍然只给提示。
服务器部署不受影响。作者在说明里写明,注册这一步有门控,要求应用处于打包模式且不是 macOS。
进没进发行版,看一个文件就够:src/desktop-updater.ts 在 dev 上返回 200,在 main 与 v2.1.20 都是 404。20

sub2api #7962 重基到 0.2.18

同一小时里 #7962 落下第 6 笔提交(北京 00:36),把分支重基到上游 0.2.18。21
现在 60 个文件 +3208/−378,mergeable_state 是 unstable,仍未合并。
它要解决的是三件事:下游断开后上游还在跑、写失败被记成成功、用量已经上报之后重试又记一笔。
顺带给 usage_logs 加一列 response_outcome。这一列在 v0.2.18 与主干都没有,迁移文件 242_add_usage_log_response_outcome.sql 只在补丁分支上。21

版本面

  • CLIProxyAPI v8.0.44 于北京 10 月 26 日 23:49 发出,tag、main、dev 是同一个提交 1f917e77;窗口内零新提交。2
  • sub2api 仍是 v0.2.18(北京 10 月 23 日 15:44),主干停在 10 月 25 日 21:48。22
  • codex-proxy v2.1.20(北京 10 月 23 日 03:56)、codex2api v3.1.1(北京 10 月 17 日 05:42),两仓窗口内零新版本。2324
  • 上游全绿:OpenAI 没有活动事件,最近一条是 10 月 24 日早上的 CIMD 降级;Claude 全系统正常,最近一条是 10 月 25 日的 Fable 5.1;GCP 八条记录里最新仍是 10 月 22 日的 europe-west2。252627
  • 重置信号没动:最新帖仍是 10 月 26 日 14:05 那条「Not enough resets」,signal 未激活,10 月 23 日、25 日、26 日三条事件都还挂着 pending。28

今晚要做的三件事

  1. 查 disable-cooling。开着它的站,先确认有没有哪个模型已经下架。
  2. 用 GET /v8/management/credentials 看 cooldowns。模型撞了 404 却查不到冷却条目,就是这条洞。
  3. 要把图片走 interactions 的请求先改道 :generateContent,或者干脆走流式。

References

  1. 1
    PR 7019:model_not_found 在 disableCooling 下也走 12 小时冷却

    github.com

  2. 2
    CLIProxyAPI v8.0.44 发布页

    github.com

  3. 3
    v8.0.44 conductor_cooldown.go 第 1039–1049 行

    github.com

  4. 4
    v8.0.44 conductor_cooldown.go 第 1227–1233 行

    github.com

  5. 5
    v8.0.44 conductor_cooldown.go 第 2271–2294 行

    github.com

  6. 6
    v8.0.44 conductor_cooldown.go 第 55–72 行

    github.com

  7. 7
    v8.0.44 auth_files.go 第 149–152 行

    github.com

  8. 8
    v8.0.44 cooldown_view.go 第 11–20 行

    github.com

  9. 9
    v8.0.44 conductor_cooldown.go 第 1078–1086 行

    github.com

  10. 10
    v8.0.44 conductor_cooldown.go 第 2768–2776 行

    github.com

  11. 11
    PR 7002:把 request.stream 在发送前删掉

    github.com

  12. 12
    v8.0.44 interactions_antigravity_request.go 第 24–28 行

    github.com

  13. 13
    v8.0.44 antigravity_executor_execute.go 第 293–300 行

    github.com

  14. 14
    v8.0.44 antigravity_executor_stream.go 第 100–110 行

    github.com

  15. 15
    v8.0.44 antigravity_executor_execute.go 第 57–59 行

    github.com

  16. 16
    issue 7018:把每个 Meta 账号的订阅额度存下来并在管理接口暴露

    github.com

  17. 17
    v8.0.44 meta_executor_execute.go 第 202–213 行

    github.com

  18. 18
    v8.0.44 openai_responses_handlers.go 第 148–154 行

    github.com

  19. 19
    PR 878:Electron 桌面端应用内更新

    github.com

  20. 20
    codex-proxy dev 分支上的 src/desktop-updater.ts

    raw.githubusercontent.com

  21. 21
    sub2api PR 7962:传播取消,并把投递与消费分开

    github.com

  22. 22
    sub2api 发行页

    github.com

  23. 23
    codex-proxy 发行页

    github.com

  24. 24
    codex2api 发行页

    github.com

  25. 25
    OpenAI 状态页事件接口

    status.openai.com

  26. 26
    Claude 状态页摘要

    status.claude.com

  27. 27
    Google Cloud 状态页事件接口

    status.cloud.google.com

  28. 28
    codex-reset 结构化 feed

    codex-reset.com

中
中转站风控与更新速报@Karuha

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

  • 关掉冷却之后,永久错误也不再被记账
  • 三分钟自查
  • 今晚能做的
  • 补丁没堵住的两处
  • 同一小时里的另外三件事
  • interactions 的图片请求,v8.0.44 仍被一句 stream 打回
  • Meta 的订阅额度只活在一次流里
  • codex-proxy 的桌面端内更新只进了 dev
  • sub2api 7962 重基到 0.2.18
  • 版本面
  • 今晚要做的三件事