Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
压缩触发送进 opencode go 就回 400;6.1 sol 过了 272k 整次加价
2026-10-22

压缩触发送进 opencode go 就回 400;6.1 sol 过了 272k 整次加价

Codex 的压缩触发被原样送进 opencode go 的模型会直接回 400,今晚在客户端或分组改一处就能绕开;gpt-6.1-sol 那个 272k 是价格数据里的计费线,越线后整次加价;codex2api 共享组新加 OAuth 号会让整组推理档位变空,可以自助补快照恢复。

中
中转站风控与更新速报@Karuha
今天 18 点到 18 点半,这个窗口里四个仓库都没有发新版。
有三条新报障值得今晚看。一条会让 Codex 的会话压缩直接失败,一条解释账单为什么在 272k 上跳档,一条让共享组的推理档位先变空。
再往前二十分钟,Claude 撞上下文这条线在 Responses 侧也补上了映射,目前只到 dev。

一、Claude 撞上下文,Responses 侧这一笔补上了

北京 17:40 的提交 d495e24c 改了一处映射,把 model_context_window_exceeded 从「失败」改成了「截断」。1
改动落在两个函数上。claudeResponsesIncompleteDetails 的 case 里加上了这个停因,返回 max_output_tokens。
与此同时,合成 context_length_exceeded 的那个错误对象被删掉,直接返回 response.failed 的分支也被删掉。
流式与非流式两条出口现在都写 response.incomplete。
这么改是为了照顾客户端。单子 #6862 里写明:Codex 读到 response.failed 加 context_length_exceeded,会把上下文记成已满、提示开新会话。2
同一趟的 usage 也就跟着丢了。读到 response.incomplete,它才会把这笔用量记下来。
发行版还没跟上。v8.0.38 的同名文件第 224 行仍返回 response.failed,第 1274 与 1680 行仍往信封里塞 error。3
所以今晚撞上上下文,你看到的现象照旧:先出半截内容,再收到一个失败信封。
这时候换号帮不上忙。下一个号跑到同一个长度,还会在同一位置停下。
dev 分支 claude_openai-responses_response.go 第 172 至 208 行
dev 分支 claude_openai-responses_response.go 第 172 至 208 行
dev 分支 internal/translator/claude/openai/responses/claude_openai-responses_response.go 第 174 行把 model_context_window_exceeded 与 max_tokens 并列,第 203–208 行的输出状态函数里只剩 incomplete 与 completed 两种结果。

二、压缩触发被送进 opencode go,回的是 400

sub2api #8299 里的复现条件很短:裸 /responses、stream: true、带上 remote_compaction_v2 的 beta 头,input 末尾再放一个 {"type":"compaction_trigger"}。4
上游回的是 input[1] did not match any supported type。
先看这条请求走的是哪条路。v0.2.17 的 handler 判得很干脆:裸 /responses、body 里有触发项、stream 为真,就原样返回(第 1044–1046 行)。5
三条里缺一条,才把路径改写成 /compact(第 1047 行)。前一条是原生 v2 直通,后一条是老路。
直通这条路不看账号会不会压缩。调度参数里 RequireCompact 的注释写明:它只服务老式 /responses/compact 的能力筛选。6
原生 v2 一律传 false,于是 opencode go 的账号照样会被选中。
而在它的协议表里,muse-spark-*、gpt-*、grok-* 这三类正是走 Responses 协议。7
上游不认这个 input 类型,直接回 400。sub2api 这里也没有兜底。
回退判据只认三种情况:模型不可用、上下文超限、空的失败壳。8
这句带着 message 的 invalid_request_error 一种都不占,于是原样回到客户端。
有一处容易白折腾:账号级的 openai_compact_mode=force_off。它作用于上面那个筛号环节,原生 v2 不走那里,设了也没用。
能关的是客户端这一侧。Codex 的配置参考里,model_providers.<id>.capabilities.remote_compaction 取 unsupported 就走本地压缩,取 v2 才把触发发到上游。9
把接了 opencode go 的那个 provider 改成 unsupported,这条路上就不会再冒出触发项。
不想动客户端,就动分组:跑 Codex 压缩的组只放 Codex 账号,opencode go 的模型单独成组。
两条路今晚都能生效,代价都是改一次配置。
sub2api v0.2.17 openai_gateway_handler.go 第 1027 至 1060 行
sub2api v0.2.17 openai_gateway_handler.go 第 1027 至 1060 行
v0.2.17 的 normalizeOpenAIResponsesCompactRequest:第 1044–1046 行命中「stream 加触发」就原样返回,第 1047 行是另一条把路径改写成 /compact 的出口。

三、6.1 sol 的 272k 是计费线,不是上下文线

#8298 问的是「要不要单独设置」。答案是没有这个开关:阶梯写在价格数据里。10
v0.2.17 的兜底条目给 gpt-6.1-sol 配了 LongContextInputThreshold: 272_000、输入 ×2、输出 ×1.5。11
判定看的是本次输入、缓存创建、缓存读三者之和。一旦越过 272000,整次请求的单价都乘上去。
只有超出的那一截单独加价,在这里做不到。乘的是整次。
阶梯来自两份价格数据,写法不同、结果一样。随包快照直接写 long_context_* 三个键。
远端目录写的是 *_above_272k_tokens 绝对价,由 deriveLongContextFromAboveTierFields 按「above 价除以基础价」折成倍率。12
同一段注释里有句话:「阶梯已完全数据驱动」。这就是它没有开关的原因。
两个数出自两处。sub2api 写给客户端的上下文是 500k,位置在 openai_codex_models_service.go 第 543–545 行。
官方价目页给 gpt-6.1-sol 只列了 Standard、Batch、Fast、Ultrafast 四档,272k 长上下文档在页面上找不到。13
要按 500k 的口径收,只能自己动价格:在 pricing.override_file 里写 long_context_input_token_threshold: 0,或者把两个倍率都写成 1。
折算会被跳过,阶梯随之关闭。文件改动按内容哈希自动重载,不用重启。
代价是这一段你自己少收。这个取舍得你来定。
同族还有一条。#8300 报的是 Gemini 原生接口用 file_data 回图时记成 0 张。14
计数函数只认 inlineData 与 inline_data 两种写法,兜底再按模型名白名单判一次。15
自定义的模型名两边都命中不了,于是落进 token 计费。这一条是漏收,动的是站主自己的账。
sub2api v0.2.17 billing_service.go 第 594 至 614 行
sub2api v0.2.17 billing_service.go 第 594 至 614 行
v0.2.17 的 billing_service.go 第 594–606 行:gpt-6.1-sol 的兜底价格条目,阈值 272_000、输入倍率 2、输出倍率 1.5;上一条 gpt-6-sol 用的是同一组数。

四、codex2api 共享组加一个新号,整组档位先变空

#816 的现象是:共享组里导入一个新的 ChatGPT OAuth 号之后,几个模型的 supported_reasoning_levels 变成空数组。16
桌面端因此选不出推理强度。
原因在清单只挑一个账号。scopedCodexManifestAccount 按 DBID 升序取第一个可见账号。17
老号一直符合条件,新号就永远轮不到。
新号还没有与当前 credential_generation 匹配的快照,applyModelCapabilities 仍把它放进候选。交集那一步遇到缺字段,就把非布尔能力写成 null。
序列化之后,推理档位就成了空列表。
快照只在清单请求正好选中该号时才学。管理端的「同步上游模型」不走这条路。18
POST /api/admin/accounts/:id/models/sync-upstream 只记 Daybreak 与模型注册表,这份能力快照它不写。
恢复动作可以自己做完。建一个只关联新号的分组 Key,用它拉一次 GET /v1/models?client_version=,等快照落库,再回共享组 Key 验一遍。
报障人的记录里,17:50:11 补上快照,八个模型的档位数从 0 回到 5 到 6。16
v3.1.1 与当前 main 的这份实现逐行相同,还没有修复;窗口内也没有相关 PR。
codex2api v3.1.1 proxy/model_capabilities.go 第 204 至 234 行
codex2api v3.1.1 proxy/model_capabilities.go 第 204 至 234 行
v3.1.1(commit 5ee6c292)的 intersectCodexCapabilities:第 218–220 行判定任一候选缺字段,第 225–230 行把非布尔能力写成 null,这就是整组档位一起变空的那一步。

五、版本与上游读数

四仓零新版本:CLIProxyAPI v8.0.38(北京 10-21 23:11)、sub2api v0.2.17(10-16 12:41)、codex-proxy v2.1.20-beta.0543eaa(10-21 17:30)、codex2api v3.1.1(10-17 05:46)。
主干头:CLIProxyAPI dev 停在今天 17:40 的 d495e24c,main 停在 10-21 23:04;sub2api main 今天 10:33。
codex-proxy dev 停在 10-21 09:58,codex2api main 停在 10-21 01:01。
窗口扫描:codex-proxy 0 条,CLIProxyAPI 4 条、sub2api 8 条、codex2api 1 条,其余几条是被顶起的旧单。
上游三条。OpenAI 那句「ChatGPT 会话与 Responses 报错」的事件已在今天 16:50 标为恢复,状态页回到全绿。19
Anthropic 今天没有事故记录。20
Codex 的额度今天 UTC 还没重置,最近一次已验证的全局重置在两天前;节奏约每两天,另有 10 次 banked(存着没用的一次性重置)。21

References

  1. 1
    CLIProxyAPI 提交 d495e24c

    github.com

  2. 2
    CLIProxyAPI #6862

    github.com

  3. 3
    v8.0.38 的同一文件

    github.com

  4. 4
    sub2api #8299

    github.com

  5. 5
    v0.2.17 的 openai_gateway_handler.go

    github.com

  6. 6
    v0.2.17 的 openai_account_scheduler.go

    github.com

  7. 7
    v0.2.17 的 opencode_go.go

    github.com

  8. 8
    v0.2.17 的 openai_compact_fallback.go

    github.com

  9. 9
    Codex 配置参考

    learn.chatgpt.com

  10. 10
    sub2api #8298

    github.com

  11. 11
    v0.2.17 的 billing_service.go

    github.com

  12. 12
    v0.2.17 的 pricing_service.go

    github.com

  13. 13
    OpenAI 价目页

    platform.openai.com

  14. 14
    sub2api #8300

    github.com

  15. 15
    v0.2.17 的 gemini_image_output_accounting.go

    github.com

  16. 16
    codex2api #816

    github.com

  17. 17
    v3.1.1 的 scoped_models.go

    github.com

  18. 18
    v3.1.1 的 admin/handler.go

    github.com

  19. 19
    OpenAI 状态事件数据

    status.openai.com

  20. 20
    Anthropic 状态页

    status.anthropic.com

  21. 21
    Codex Reset 首页读数

    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

  • 一、Claude 撞上下文,Responses 侧这一笔补上了
  • 二、压缩触发被送进 opencode go,回的是 400
  • 三、6.1 sol 的 272k 是计费线,不是上下文线
  • 四、codex2api 共享组加一个新号,整组档位先变空
  • 五、版本与上游读数