Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
10/15 下午续报:sub2api 合并防扫号修复,含 OpenAI OAuth 的跨平台同名映射升级后会直接 400
2026-10-15

10/15 下午续报:sub2api 合并防扫号修复,含 OpenAI OAuth 的跨平台同名映射升级后会直接 400

补报 10 月 15 日 14:59 到 16:00(北京):sub2api 合并了一条防扫号的路由歧义修复但尚未发版,含 OpenAI OAuth 的跨平台同名映射升级后会稳定回 400;上期那条 502 的两个修复版本这一窗口都已关闭,main 上也还没有修复。

中
中转站风控与更新速报@Karuha
这一期覆盖 10 月 15 日 14:59 到 16:00(北京),承接第十三期的发稿时间。
四个仓库这一窗口都没有出新版本。
素材集中在 sub2api:一条修复已经合进 main、还没发版,上期那条 502 的两个修复版本这一窗口都关掉了。

现在就做

  1. composite 分组现在就核一遍同名映射,不必等发版。 同一个模型被 OpenAI OAuth 账号和另一个平台的账号同时显式声明,是分组配置错误;修复合并后的代码会直接回 400。1
  2. 要升级就先改配置,因为含 OpenAI OAuth 的这类分组升级后会稳定 400。 现在的发行版 v0.2.16 里还没有这段代码。23
  3. 上期那条 502 至今仍没有可用修复,放开反代缓冲只是先止血。 报障与修复两个版本这一窗口都关掉了,main 上的透传路径也还在逐个 Add。456
  4. 拿筛选结果批量改分组之前,先确认勾选真的生效。 有人选三个未分组账号、只勾两个,三个一起被改并分组了。7
  5. 开着 routing.cooldown.disable-cooling: true 的话,把 request-retry 往下调。 刚吃 429 的凭证会被立刻重发,而 max-retry-interval 在这条路径上不参与判断。89

sub2api #8106:一条会扫空号池的路由歧义,已合进 main 但没发版

main 上的合并提交是 3856a028,合并于 10 月 15 日 15:08(北京),13 个文件 +282/−15。1
症状。 生产环境里 OpenAI OAuth 账号会偶发成批出现 OAuth 401: Invalid bearer token,随后全部被打成临时不可调度。1
同一批账号在后台点「测试」是通的,账号本身看起来没问题。1
根因链是五步。 作者写明已经用生产日志核实过:
  1. composite 分组里,一个 openai OAuth 账号与一个 deepseek API Key 账号,在 model_mapping 里同时显式声明了 gpt-6-astra 这类模型。1
  2. 归属判定把它判成跨平台歧义,路由中间件于是不解析平台。1
  3. 分组平台是 composite,/v1/responses 与 /v1/chat/completions 落到默认的 Anthropic GatewayHandler。1
  4. handler 内又按模型名前缀猜回 openai,选中那个 OpenAI OAuth 账号。1
  5. 出站时带着 ChatGPT token 去请求 api.anthropic.com,Anthropic 回 401。按 OAuth 401 逐号临时不可调度,再叠上 failover(max_switches=10),单个请求就能扫空号池。1
日志特征。 这类请求的 component 是 handler.gateway.responses,而不是 handler.openai_gateway.*。1
同时 OpenAI 账号上会出现 Claude 专用的 identity_service 指纹日志。两者一起出现,基本可以判定凭据走错了管线。1
修复的第一层是歧义拒绝。 声明方里含 OpenAI 网关族的 OAuth / setup-token 凭据,且模型名兜底也落在 OpenAI 网关族时,路由中间件与 Responses WS 入口直接回 400。1
纯 API Key 的歧义、以及 Anthropic / Antigravity / Gemini 的 OAuth 歧义保持原行为。1
第二层是归属改按配置计算。 改用 ListModelAvailabilityCandidates,忽略限流与临时不可调度这类瞬时状态。1
这一层解释了故障为什么间歇出现——同一模型原本会在「唯一归属」与「歧义」之间来回翻转。1
第三层是出站凭据守卫。 buildUpstreamRequest 拒绝非 Anthropic 网关族的 OAuth / setup-token 凭据,返回一个只换号、不处罚账号的 failover 错误。1
ForwardCountTokens 对这类账号返回 404 不支持,API Key 不受这条限制。1
sub2api 合并提交 3856a028 里 composite_route_resolver.go 第 12 至 34 行
画面取自合并提交 3856a028 下的该文件,高亮区间为第 12 至 34 行。第 15 行是普通的跨平台歧义原因,第 22 行是本期新增的 OAuth 歧义原因;第 27 行的 OAuthAmbiguous() 只在未匹配且原因为后者时才为真。第 32 至 33 行给出的 400 原文是 Model "%s" is mapped on multiple provider platforms in this group; configure an explicit composite route,升级后在你自己的日志里会看到这一句。10
升级后会变两件事。 一是含 OpenAI 网关 OAuth 账号的跨平台同名映射,只要模型名能被识别为 OpenAI 族,就会稳定返回 400,提示你去配显式 composite 路由或去掉重复映射。1
二是显式声明某模型的平台账号全部处于限流时,不再自动退回按模型名探测的平台。1
这条修复覆盖的是扫号。 作者列出的未包含项有两条:同一请求内多账号连续普通 401 时提前停止 failover,以及 OAuth 401 写临时不可调度时改用请求 context。1
后一条意味着客户端断开时那次写库仍可能失败,这次改动没有覆盖它。1
本刊核对。 合并提交上 composite_route_resolver.go 的三个标识、gateway_upstream_request.go 的 anthropicMessagesCredentialAllowed 与 anthropic_messages_foreign_oauth 都在。1011
v0.2.16 整包里一个都搜不到,resolveCompositeModelOwnership 第 1504 行用的还是 ListSchedulableByGroupID。3
这一条只存在于 main,任何 Tag 版本都还没有。 2

上期主线闭环:那两份 502 修复,这一窗口全关

上一期报的那条 502 是:OpenAI 流式响应重复写入 x-codex-turn-state,响应头涨到约 27KB,撞上下游 nginx 默认的 proxy_buffer_size。4
报障的 #8104 现在 closed,关闭理由是 not_planned。4
那条更正归因的修复 PR #8105 也 closed,未合并。5
本刊在 main 的合并提交上看了透传路径:writeOpenAIPassthroughResponseHeaders 仍在第 2489 行 dst.Del,第 2499 至 2501 行对 x-codex-turn-state 先 Del 再 for … Add。6
上游给几份,这一段就写几份,这一窗口没有代码侧修复落地。12
动作不变。 反代这一侧先放开响应头缓冲,把 502 止住。4
再在自己的链路上只保留首个 x-codex-turn-state。5

sub2api 这一窗口的其余几条

#8108 批量更新会带上没勾选的账号。 状态 open、0 条评论、没有对应修复 PR,正文只有一句复现描述。7
有人筛出三个未分组账号,只勾其中两个做批量更新与分组,结果三个都被改了。7
对中转站来说后果落在分组归属上:账号会被塞进你原本没打算放的分组,后面的路由与限额跟着一起变。7
#8107 admin 侧的用户级 Key 与增量用量游标。 open、非草稿,作者 joeeeeey。13
它新增用户级 API Key 的创建、查询、更新与带审计的吊销。创建要求 Idempotency-Key,指纹含目标用户,幂等存储不可用时 fail closed。13
同一 PR 把 GET /api/v1/admin/usage/incremental 改成 (ingestion_txid, id) seek 游标,只导出快照里最早活跃事务之下的记录。13
这条对运维的意义在计费对账:按时间戳与偏移分页,会跳过晚提交的那批行。13
作者自述 go test -tags=integration 全量通过。另有一处既有失败在未改动的基线提交上同样复现:本地 DNS 把 api.openai.com 与 api.kimi.com 解析进了 198.18.0.0/15。13
#8109 channel monitor 的分档最小样本数。 open、非草稿,作者 reallyfeishi。14
它给 90m / 24h / 7d / 30d 各自加一个可选的最小健康样本数,未设置或清空时沿用原来的公共最小值。14
动机写得很具体:公共最小值偏大时,90 分钟视图的 5 分钟桶会一直是灰的,长窗口却采样充足。14
改动落在已有 JSON 配置里,不需要 schema 迁移或聚合回填。14
#8110 GLM Coding Plan 原生 Responses 接入被关闭。 这条登记为需求,状态 closed,理由 not_planned。15
请求方列出智谱官方「快速开始」里的三条端点:Anthropic Message 走 https://open.bigmodel.cn/api/anthropic。15
Chat Completion 走 https://open.bigmodel.cn/api/coding/paas/v4,Responses 走 https://open.bigmodel.cn/api/v1。15
现状是 sub2api 的智谱 / GLM 渠道预设只有 Chat Completions 与 Anthropic 两种,原生 Responses 仍未提供。15
这条请求被关掉了,更早的同一个需求 #7429 还开着,按未采纳登记。16

CLIProxyAPI #6413:冷却关掉之后,刚吃 429 的凭证会被立刻重发

这条 PR 是 10 月 6 日开的,这一窗口 15:32(北京)有一次更新,现在仍 open、非草稿、可合并状态 clean。8
作者的场景是 routing.cooldown.disable-cooling: true 配 request-retry: 3,在追一条很慢的 429。8
机制是:冷却关闭时 429 不会在凭证上留下 NextRetryAfter。8
closestCooldownWaitWithAttempted 于是对刚失败的那张凭证返回 (0, true),下一轮立刻重发。8
一张已经耗尽的账号会被打满 request-retry + 1 次,客户端才拿到 429;上游代理自己也退避时,一次失败约 4 分钟。8
本刊在 v8.0.29 整包里核过这段。 conductor_selection.go 第 1204 行是该函数,第 1262 行的条件把 coolingDisabled 和 status == 429 一起放进了「立即重试」那一支。9
调用侧在第 1419 行收到 wait == 0 时直接返回「立刻重试」,max-retry-interval 在这条路径上不参与判断。17
PR 的做法是:冷却关闭时按上游 hint 等待,hint 超过 max-retry-interval 就直接结束重试并返回 429。8
同一条 PR 还顺手修了一条日志噪声。 Claude Code 每次启动都会发 HEAD {ANTHROPIC_BASE_URL}/api/hello 预热连接,并忽略结果。8
CLIProxyAPI 没有这条路由,于是每个会话启动都往错误请求日志里写一条 404。8
本刊在 v8.0.29 的 internal/api/server_routes.go 里搜不到 /api/hello,两处改动都还没进任何版本。18

版本与上游:这一窗口没有版本可升

组件最新发行版发行时间本期相关修复是否已含
sub2apiv0.2.1610 月 13 日否,#8106 只在 main
CLIProxyAPIv8.0.2910 月 14 日否,#6413 未合并
codex-proxyv2.1.1710 月 14 日本窗口无相关条目
codex2apiv3.1.010 月 12 日本窗口 0 条更新
CLIProxyAPI 的 dev 分支这一窗口 0 条新提交,codex-proxy 与 codex2api 这一窗口 0 条 issue 或 PR 更新。19
窗口内另有几条旧条目出现更新,本刊没能核到变更内容:CLIProxyAPI #6268、#6603、#6605、#6625,sub2api #764、#7429、#8060、#8076、#8078、#8087、#8103。2021
官方状态页。 Anthropic 这一窗口 0 条事件,全部组件正常。22
Google Cloud 的事件源里,最近一条仍是 10 月 8 日开始、10 月 9 日结束的 Cloud Storage 上传与写入延迟。23
OpenAI 状态页上仍只有那一条 Compliance API 成本数据延迟,窗口内没有新更新,官方写明不影响 API 与 ChatGPT。24
重置追踪。 两个站这一窗口都没有新增记录,也没有新的上游信号。2526
上一期报过的口径分裂仍在:codex-reset.com 首页头条写今天没有重置、最近一次已验证全局重置是 10 月 13 日 05:03 UTC,它的模型侧却把最近一次记在 10 月 15 日 06:13 UTC。25
本刊按两站各自字段分别列出。2526
社区侧。 r/OpenAI 窗口内有两条新帖,都与额度或封号无关。27
r/ClaudeAI 与 r/GeminiAI 在这一窗口里都没有新帖。2829
OpenAI 开发者社区的 Codex 分区,最新一条停在 14:04(北京)的界面帖,窗口内没有新话题。30
linux.do 原站这一窗口仍返回 403,它的晚报镜像最新一期还是 10 月 14 日的第 006 期。31

References

  1. 1
    PR #8106

    github.com

  2. 2
    Sub2API v0.2.16

    github.com

  3. 3
    v0.2.16 的归属计算清单

    github.com

  4. 4
    Issue #8104

    github.com

  5. 5
    PR #8105

    github.com

  6. 6
    openai_gateway_passthrough.go at main

    github.com

  7. 7
    Issue #8108

    github.com

  8. 8
    PR #6413

    github.com

  9. 9
    conductor_selection.go at v8.0.29

    github.com

  10. 10
    composite_route_resolver.go at 3856a028

    github.com

  11. 11
    gateway_upstream_request.go

    github.com

  12. 12
    openai_gateway_passthrough.go

    github.com

  13. 13
    PR #8107

    github.com

  14. 14
    PR #8109

    github.com

  15. 15
    Issue #8110

    github.com

  16. 16
    Issue #7429

    github.com

  17. 17
    conductor_selection.go at v8.0.29

    github.com

  18. 18
    server_routes.go at v8.0.29

    github.com

  19. 19
    CLIProxyAPI v8.0.29

    github.com

  20. 20
    CLIProxyAPI issues

    github.com

  21. 21
    sub2api issues

    github.com

  22. 22
    Claude Status

    status.anthropic.com

  23. 23
    Google Cloud Service Health

    status.cloud.google.com

  24. 24
    OpenAI Status

    status.openai.com

  25. 25
    Codex Reset

    codex-reset.com

  26. 26
    OpenTheRank

    opentherank.com

  27. 27
    r/OpenAI

    reddit.com

  28. 28
    r/ClaudeAI

    reddit.com

  29. 29
    r/GeminiAI

    reddit.com

  30. 30
    Codex · OpenAI Developer Community

    community.openai.com

  31. 31
    linux.do 晚报 · 板块汇总

    linuxdo.club

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

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

Related content

  • 现在就做
  • sub2api 8106:一条会扫空号池的路由歧义,已合进 main 但没发版
  • 上期主线闭环:那两份 502 修复,这一窗口全关
  • sub2api 这一窗口的其余几条
  • CLIProxyAPI 6413:冷却关掉之后,刚吃 429 的凭证会被立刻重发
  • 版本与上游:这一窗口没有版本可升