Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
v8.0.56 修好了 WS 429 的那一半:额度耗尽回终局帧,传输中断仍静默
2026-11-05

v8.0.56 修好了 WS 429 的那一半:额度耗尽回终局帧,传输中断仍静默

CLIProxyAPI v8.0.56 半小时前发布:升级不必改配置,Responses WebSocket 上的额度耗尽现在会回 429 终局帧,但传输中断仍静默——附三条十分钟内能做完的验证。

中
中转站风控与更新速报@Karuha
半小时前,CLIProxyAPI 发了 v8.0.56。发行说明把三笔改动拎出来,实际是 15 笔提交、68 个文件。
可以先给结论:能升,不用改配置,只有一类行为变化会改变你现场看到的东西。就是 Responses WebSocket 上那条额度耗尽时的裸关。
sub2api 这一窗口零发版,v0.2.19 没动。所以这一版跟「默认导出模型换成 gpt-5.6-sol」那件事无关,两者别混。

一、版本位与升级成本

先看清四个仓各自停在哪,免得把别人的版本号记成本仓的。
仓当前版本主干位
CLIProxyAPIv8.0.56标签 = main = dev = 62c58a74
sub2apiv0.2.19main 领先标签(8e92c892 vs dece2615)
codex-proxyv2.1.23dev 领先 main(20a50532 vs 2bed0ed0)
codex2apiv3.1.3main = a4bbb455
CLIProxyAPI 这行的重点是「标签、main、dev 是同一个提交」。发版后主干零待发提交,你不用等下一笔补丁 1。
从 v8.0.55 到 v8.0.56 是 15 笔提交、68 个文件。规模不小,但两版的配置样例逐字节相同 —— 没有新增开关,没有默认值改动 2。
所以升级动作就三步:换二进制或换镜像标签,重启一次,然后按第三节验一遍。不需要动 config.yaml,也不需要提前备份配置。

二、主线:429 终局帧只覆盖「该暴露的那一类」

前两期写过现象:额度耗尽时 CPA 把 WebSocket 直接关掉,客户端只能重连重放。这一笔(b5e6027c)修的是关之前要不要把错误交出去。
判定在一个函数里。它按顺序放行三类:终局性鉴权错误、429 或 model_cooldown 一类额度冷却、以及被 IsRequestFault 判成请求过错的(含一部分 400)。三条都不命中,就仍然静默 3。
代码里的注释把取舍说得很直白:命中这几类要暴露给客户端,好让它把最终错误报出来、而不是一直重连;临时凭证失败和传输失败则继续静默,让客户端带着完整上下文重发 4。
Responses WebSocket 上行错误是否暴露给客户端的判定函数
shouldExposeResponsesUpstreamError 本体:三条放行条件加末尾回落的 IsRequestFault,不命中即静默 —— 也就是说「静默」现在是显式的默认分支,不再是漏掉的路径。3
真正影响现场的是 1012 重放收窄。原来撞上额度错误一律让客户端重放,现在多了一个条件:只有当这个模型还有别的可用目标时,才继续重放。
没有备选目标,就直接落终局错误帧,不再发 1012 5。
1012 不重放的收窄条件
收窄处:额度类错误再叠加一个「没有备选目标」的否定条件才停掉重放。有备选时仍发 1012 —— 换句话说,池子里还有号,它照旧默默换号。5
还有一处细节值得记:额度或冷却类错误如果本身没带状态码、或带的是 5xx,发出的帧会被强制改写成 429。客户端拿到的仍然是那个它认得的语义。
把这三件事合起来,这一版之后你在现场会看到:
  • 单凭证、或者整池都耗尽 → 收到 429 终局帧,带 Retry-After,连接不再无声消失。
  • 池里还有别的号 → 照旧 1012 重放,日志里只看到一次换号。
  • 上游中途断 TLS、或代理隧道被掐 → 仍然静默,客户端仍会重连重放。
第三条不是没修好,是这一笔没碰它。下一节的一条维护者答复正好解释了为什么。

三、怎么验(三条,十分钟内能做完)

第一,挑一个单独的耗尽凭证试。 客户端应当拿到 429 错误帧而不是连接直接消失。Retry-After 头如果在,值就是剩余冷却秒数。
第二,看多凭证场景还重不重放。 有备选目标时仍应看到 1012 —— 如果你期望它这时候也别重放,那是对这一笔的误解。
第三,翻日志目录。 这版起 4xx/5xx 的请求日志文件名带 error- 前缀,499 除外 6。以前满目录都是普通名字、要按大小挑,现在可以直接按前缀筛。
错误日志文件名加上 error- 前缀的触发条件
error- 前缀只在两种情况下生效:强制写且日志本身没开,或者状态码 ≥400 且不等于 499。后者是这一版真正给运维的那半句。6
与之配套的是请求体缓冲的上限:只记错误时抓 1 MiB,延迟缓冲放到 32 MiB。也就是说大请求体出错时,日志里能看到的内容比过去多,但不会无上限地吃内存。

四、图片这条线,一版里改了三处

绕开 SIWC。 图片请求现在会先给上下文打一个「这是 Codex 客户端请求」的标记,IsCodexUseSIWCForRequest 因此直接返回否,凭证改用外层 OAuth 的 access_token,并直连 Codex 的图片端点 7。
在 v8.0.55 里,开了 use_siwc 的凭证走图片会落到 SIWC 那条链上,拿到的 400/401 也落在那条链的语义里。所以如果你之前给图片配过单独的凭证,现在可以直接复用主凭证。
图片请求先打上 Codex 客户端标记,从而跳过 SIWC
落点:WithCodexClientRequest 这一句写在图片请求组装的入口,之后的 IsCodexUseSIWCForRequest 才会返回否。同一文件的流式分支也补了同一句。7
gpt-image-2.6 三档进来。 gpt-image-2.6-flare、gpt-image-2.6-sunburst、以及裸名 gpt-image-2.6 三个都登记进了模型定义表 8。名称不同、走同一条图片链路,客户端里能选到。
同类症状在 codex2api 里还开着。 PR #854 说 /v1/images/generations、/v1/images/edits 与 Image Studio 共用模板,固定发 reasoning.effort=medium,而上游按图片 complexity 拒收,回的是 Complexity 'medium' is not supported for this image model. 9。
那张单 10:30 才开,现在是 open 且 mergeable_state 为 unstable,三个文件 +20/−3。不要当成下版会带,它连合并都还没有。

五、两条「不打算改」的口径

这两条都是维护者今天上午亲自回的,比猜有用。
模型列表要能力元数据,加参数。 默认的 GET /v1/models 严格按 OpenAI 规范只回 id/object/created/owned_by,不打算加非标字段。要 context window、最大输出、thinking 能力,用 GET /v1/models?client_version=1 或 ?client_version=cpa。要给特定下游定制,走 response-interceptor 插件 10。
这条能直接解释很多人抱怨的「客户端看不到上下文长度」。改一个查询参数就够,不用等版本。
unexpected EOF 不是 CPA 断的。 维护者给了三条排查线索:CPA 侧 http.Client 超时是 0,bufio.Scanner 单行上限 50 MB(真超限报的是 token too long,不是 unexpected EOF);到下游的 keepalive 只作用于 CPA→客户端;CPA←上游是 HTTP/1.1 chunked over TLS,请求体发完之后发不出应用层心跳 11。
所以两种来源:代理或出口节点的隧道 idle timeout 主动 FIN,或者 Google 上游中途断 TLS 没写终止块。排查顺序也给了 —— 先看代理日志里那个主机的连接,再开 debug: true 看上游连接是复用还是新建、空闲了多久,最后量「最后一个 data: 到报错」的静默时长是不是稳定落在 60 秒或 120 秒。
同一段答复里还有两条对运维有价值的:这类错误已被归成传输中断、不冷却凭证;流中不自动重试,是因为已经发过 response.created,重放会再烧一次约 52 万输入 token。

六、其余随版本落地的四笔

改了什么谁受影响要不要动手
三类 policy / cyber 拒绝归 400 请求过错用 Gemini、Antigravity、Claude 的站,触发内容策略时不用。单条 prompt 触发不再罚号,凭证照旧可用
插件直连路由记录首包耗时用插件执行器承接流量的站要。你之前的 TTFT 统计这一路是缺的,升级后才有数
Chat Completions 里桥接 tool_search用 Chat 协议但声明工具检索的客户端不用。原本会被静默丢掉的声明现在能过
Claude 响应的 typed content-part 数组上游回数组形态内容块的链路不用。之前这种块会被写成字符串
第一行值得多说一句。PR #7242 的说明里有一句原话:单条 prompt 触发的 safety 或 cyber 判定,不惩罚、也不冷却健康的凭证 12。如果你的号池最近因为敏感词或策略拒绝掉过可用率,这一版是对症的。
第二行对应 #7253。插件执行器这条路原来根本不记首包时间,现在补上了 13。
第三、四行分别是 #7254 与 #7255 1415。两条都影响翻译正确性、不影响配置,升级后生效。

七、上游与额度

OpenAI 那条「付费套餐错误率升高」已经恢复。事故从昨晚 22:38(北京 11-05 06:38)开始,08:32 标了恢复,上一期发布时它还是开着的 16。
Anthropic 与 Google Cloud 这一窗口都没有新事故 1718。
重置侧没有新承诺。追踪站的信号位仍是关的,最近一条明确承诺还停在 10 月 22 日那句「明天上午 10 点前落地」,累计 61 次全局重置 19。按这个口径,今天不要等重置来救额度。
sub2api 那边只有一句要澄清:#8495 把面板默认导出模型换成 gpt-5.6-sol 的改动只在 main 上,v0.2.19 里仍是 gpt-5.5 20。这跟今天这一版没有任何关系。

今天要做的事

  1. 升级到 v8.0.56。不用改配置,重启一次即可。
  2. 拿一个耗尽凭证验 429 终局帧与 Retry-After。
  3. 确认多凭证场景仍在 1012 重放,别把它当回退。
  4. 日志按 error- 前缀筛一遍,看有没有长期被埋掉的 4xx。
  5. 用了图片链路的,把 SIWC 专用凭证并回主凭证。
  6. 客户端看不到上下文长度的,给 /v1/models 加 client_version=1。
还开着的两笔先别算进下一版:Antigravity 连接复用的 PR #7264(10:27 开出、clean、未合并)21,和 codex2api 的 #854。

References

  1. 1
    CLIProxyAPI v8.0.56 发行页

    github.com

  2. 2
    v8.0.56 的 config.example.yaml

    github.com

  3. 3
    forward.go 第 396–412 行

    github.com

  4. 4
    issue #7256 已在 11:00 关闭

    github.com

  5. 5
    openai_responses_websocket.go 第 940–958 行

    github.com

  6. 6
    request_logger_writer.go 第 110–122 行

    github.com

  7. 7
    codex_openai_images.go 第 91–103 行

    github.com

  8. 8
    model_definitions.go 里的三处登记

    github.com

  9. 9
    codex2api PR #854

    github.com

  10. 10
    issue #7266 的关闭说明

    github.com

  11. 11
    issue #7263 的关闭说明

    github.com

  12. 12
    PR #7242 说明

    github.com

  13. 13
    issue #7253

    github.com

  14. 14
    issue #7254

    github.com

  15. 15
    issue #7255

    github.com

  16. 16
    OpenAI 状态页事故 01M6MBCX

    status.openai.com

  17. 17
    Anthropic 状态页 API

    status.anthropic.com

  18. 18
    Google Cloud 事故列表

    status.cloud.google.com

  19. 19
    codex-reset 首页

    codex-reset.com

  20. 20
    v0.2.19 的导出模型常量

    github.com

  21. 21
    CLIProxyAPI PR #7264

    github.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

  • 一、版本位与升级成本
  • 二、主线:429 终局帧只覆盖「该暴露的那一类」
  • 三、怎么验(三条,十分钟内能做完)
  • 四、图片这条线,一版里改了三处
  • 五、两条「不打算改」的口径
  • 六、其余随版本落地的四笔
  • 七、上游与额度
  • 今天要做的事