Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
临时故障后 deepseek-flash 从列表消失、余额耗尽被报成 503、/v1/models 只吐四个字段:三张单都还没合,改的是同一层
2026-10-22

临时故障后 deepseek-flash 从列表消失、余额耗尽被报成 503、/v1/models 只吐四个字段:三张单都还没合,改的是同一层

三张还没合并的单改的都是客户端能看见的那一层:模型列表怎么算、余额耗尽报什么码、模型条目带哪些字段。本篇给出各自的现状行号、影响范围,以及合并前今晚能做的事。

中
中转站风控与更新速报@Karuha
北京时间 13:23,sub2api 同一分钟里开出两张单。13:51,CLIProxyAPI 上一张挂了一周的单被强制推送了一次。
三张单改的是同一层:客户端能看见的那一层。模型列表怎么算、余额耗尽报什么码、每个模型条目带哪些字段。
三张都还没合并,也都不在任何发行版里。这一期把三张单各自的现象、根因和今晚的处置放在一起。
窗口从上一期发稿的 13:21 起,到发稿时约 50 分钟。
四个仓库没有新版本:CLIProxyAPI v8.0.38、sub2api v0.2.17、codex-proxy v2.1.20-beta.0543eaa、codex2api v3.1.1。
主干也没动。CLIProxyAPI dev 停在 11:55,sub2api main 停在 10:33。

一个号被临时停调度,它的模型就从目录里没了

报障人的场景很短:一次临时的上游故障之后,deepseek-flash 从模型列表里消失,连 display_name 和 description 一起没了。
那个账号本身还是可恢复的。模型却已经从目录里走了。1
原因在取数这一句。v0.2.17 的 GetAvailableModels 计算目录时,取的是「此刻可调度」的账号。
分组内用 ListSchedulableByGroupID,没有分组时才用 ListSchedulable。2
余额暂停、限流、过载、临时不可调度这四种状态,任何一种都会把账号踢出这个集合。它名下的模型跟着退出目录。
sub2api v0.2.17 的 gateway_service.go 第 1399–1425 行
sub2api v0.2.17 的 gateway_service.go 第 1399–1425 行
sub2api v0.2.17 backend/internal/service/gateway_service.go 第 1414–1418 行:分组内取 ListSchedulableByGroupID,全局取 ListSchedulable。这一段就是「目录成员」与「当前可调度」被绑在一起的地方。
影响不止 /v1/models。PR 说明里列了三处:/v1/models、composite 平台的列表、以及 Codex 客户端的模型清单。
修复也列了三处。目录改成按配置里的账号取,只有持久禁用才摘模型。
新增的方法是 ListModelAvailabilityCandidates;同时把 GetSchedulablePlatforms 换成 GetModelCatalogPlatforms,Codex 清单改用 catalog 而不是当前可见的那批账号。
PR 里附了回归测试,六个状态各跑一遍:健康、余额不足、限流、过载、恢复、持久禁用。
前五个都要求目录与健康时逐字节一致,只有第六个要求该模型消失。
这张单在北京 13:23:20 开出,作者 Gk0Wk,base main,open,6 文件 +194/−33,mergeable_state 是 unstable。
今天怎么判断。 模型从列表里消失时,先去面板看该账号是不是处在临时不可调度或余额暂停。是的话,改 model_mapping 是白改。
今天怎么应急。 目录是按需要动态算的,没有干净的绕法。能让客户端别掉线的做法,是别把 /v1/models 当唯一来源。

余额耗尽没有自己的错误码,还被算进路由容量

第二个报障更常见:一个 DeepSeek 账号没余额了,模型在配置里还在,网关回的是通用 503。
v0.2.17 的分类只有两档。
有账号但没人支持这个模型,回 404 model_not_found;其余全部落到 503 api_error。3
那句文案就是 Service temporarily unavailable。余额耗尽的账号仍在池里,也确实支持这个模型,于是它直接吃这句兜底。
sub2api v0.2.17 的 no_account_error.go 第 109–138 行
sub2api v0.2.17 的 no_account_error.go 第 109–138 行
sub2api v0.2.17 backend/internal/handler/no_account_error.go 第 109–113 行是那句 503 兜底,第 137 行 return fallback 是余额型失败的落点。整个函数只有 404 与 503 两个出口。
连带伤害在指标上。各调用点用 !cls.ModelNotFound 决定要不要调 markOpsRoutingCapacityLimitedIfNoAvailable。4
余额型失败于是被记成「路由容量受限」。运维看到容量告警去扩号池,实际该做的是充值。
修法分两半。一是给诊断结果加一个 AllModelSupportAccountsInsufficientBalance:只有每一个支持该模型的账号都带余额不足标记时才为真。5
混合、未知、查询失败、限流、过载一律按假处理,仍回 503。
为真时回 402,错误码 insufficient_balance,文案点名模型并提示充值或换模型。
二是新增 isGenericRoutingFailure,只有既不是 404 也不是 402 的失败才打容量指标。
那个标记来自国产平台的余额探测。账号响应过「余额不足」时写 balance_low,6 余额恢复时再清掉。7
所以这条 402 实际只覆盖有余额探测的平台。OpenAI、Anthropic 这类靠上游状态码判断的账号,耗尽时仍会落在 503 上。
这张单 13:23:56 开出,同一作者、同 base,17 文件 +218/−43,open,unstable。
今天怎么判断。 收到 503 Service temporarily unavailable 时,先看账号的 balance_low 标记与余额,再决定是扩池还是充值。

/v1/models 只吐四个字段,上下文长度在出口被丢掉

CLIProxyAPI 那边是另一件事:模型条目里的上下文长度,客户端读不到。
v8.0.38 的 OpenAI 兼容列表在写出前会把每个模型重新组一遍。
注释写得很直白:只保留 id、object、created、owned_by 四个必需字段。8
CLIProxyAPI v8.0.38 的 openai_handlers.go 第 82–108 行
CLIProxyAPI v8.0.38 的 openai_handlers.go 第 82–108 行
CLIProxyAPI v8.0.38 sdk/api/handlers/openai/openai_handlers.go 第 84 行注释「Filter to only include the 4 required fields」,第 87–100 行只挑 id、object、created、owned_by 四项。
注册表这边其实一直在算。同一个版本的 convertModelToMap 在 openai 分支里写三个键。9
这三个键是 context_length、max_context_length、max_completion_tokens。
CLIProxyAPI v8.0.38 的 model_registry.go 第 1744–1762 行
CLIProxyAPI v8.0.38 的 model_registry.go 第 1744–1762 行
CLIProxyAPI v8.0.38 internal/registry/model_registry.go 第 1749–1757 行:三个字段都在注册表里算好了。上一张图是出口,这一张是源头,中间被剥掉的正是上下文长度。
PR #6659 补两处。出口那边把三个键放行;源头那边,OpenAI 风格字段缺失时回落到 InputTokenLimit 与 OutputTokenLimit。10
回落有条护栏:只有当所有注册同一个模型的客户端都报同一个非零值时才吐,否则留空。
同名模型在不同上游报不同上限时,客户端会拿到一个不确定的数,那比没有更糟。
Home 模式另有一处:重复路由对上限说法不一致的模型,直接从 Codex 客户端清单里不列。
这张单 10 月 15 日就开了。13:51 被强制推送,13:55 状态转 clean,单笔提交 122ff652,6 文件 +394/−42,base dev,仍未合并。
dev 分支上的过滤器也还是旧写法。所以这张合进去之前,两个分支都读不到上下文长度。
今天怎么读上下文长度。 走 Gemini 兼容的 /v1beta/models,这条路由是现成的(开了 Home 模式的实例由另一条 handler 出这份列表)。11
它查的是同一条注册表,只是走 gemini 分支,条目里带 inputTokenLimit 与 outputTokenLimit。12

补一条上期漏掉的:Anthropic 11:50 开的 Connectors 事件

这条要标时间,因为它比上一期发稿早。
事件 wj6r4t6mxq1r 在 11:50:12 开出,上一期 13:21 发稿时没写。13
名称是「Elevated errors affecting Connectors」,影响级别 minor,状态至今仍是 investigating。14
正文只有一句:正在排查影响 connector 的错误,有进展会更新。到发稿时,事件下只有这一条更新,已经过去两个小时。
组件表把 claude.ai 与 Claude Cowork 标成降级。Claude API、Claude Code、Claude Console 都是正常,整体页面是 Partially Degraded Service。
r/ClaudeAI 的机器人账号在 11:51 顶了讨论帖,正文直接引用了事件原文。15
对中转站来说,这条只影响走 claude.ai 会话侧的通道。api.anthropic.com 直连、Claude Code、Console 都不在降级名单里。

上游与额度:OpenAI 那条还挂着,重置仍停在 10-20

OpenAI 的事件 01M5GPE9C4E19HE461P8JAMYXD 仍是 monitoring。16
自 10:42:24 转监控之后,三个半小时没有新更新。受影响组件还是 Responses 与 Conversations,两个都标 degraded_performance。
Codex 重置两边读数一致:最近一次已验证的全局重置是 10 月 20 日 06:33(北京 14:33),距今约 48 小时。17
codex-reset.com 记 56 次全局重置、10 次 banked,节奏约每两天一次。它还写明今日 UTC 尚未重置、Tibo 自那次重置后没有新提示。
opentherank 记 64 次、中位间隔 3.1 天、最长 68 天。18
Google Cloud 状态页首条仍是 10 月 20 日 europe-west2 那条,已在当天结束。19
窗口里还有一张功能请求:sub2api #8290 在 14:02 开出,希望重置卡在到期前自动使用。20
0 评论,没有实现。

今晚能做的四件事

模型从列表消失,先查账号状态。 临时不可调度、余额暂停、限流、过载四类都会让模型退出目录。确认是这四类之一,就别动 model_mapping。
收到 503 先看 balance_low,那就是余额问题。 在 #8289 合入前它不会变成 402,容量指标也会被这条失败污染。
看到容量告警时顺手核一下余额。
要读上下文长度,走 /v1beta/models。 OpenAI 兼容的 /v1/models 在 v8.0.38 与 dev 上都只有四个字段。
要按模型开思考签名兼容,现网就能配。 per-model 的 is-compat 在 v8.0.38 里就有,不必等新版本。21
写法是 claude: 段的 models[].is-compat: true,22 运行时经 APIKeyModelIsCompat 落到 Claude 执行器。

References

  1. 1
    fix(models): keep model catalogs stable during temporary outages(sub2api PR 8288)

    github.com

  2. 2
    sub2api v0.2.17 gateway_service.go 第 1414–1418 行

    github.com

  3. 3
    sub2api v0.2.17 no_account_error.go 第 109–137 行

    github.com

  4. 4
    sub2api v0.2.17 ops_error_logger.go 第 492–497 行

    github.com

  5. 5
    fix(gateway): report insufficient balance for exhausted model pools(sub2api PR 8289)

    github.com

  6. 6
    sub2api v0.2.17 ratelimit_cn_providers.go 第 135 行

    github.com

  7. 7
    sub2api v0.2.17 cn_provider_balance_service.go 第 253 行

    github.com

  8. 8
    CLIProxyAPI v8.0.38 openai_handlers.go 第 84–100 行

    github.com

  9. 9
    CLIProxyAPI v8.0.38 model_registry.go 第 1749–1757 行

    github.com

  10. 10
    feat(api): improve context metadata propagation and InputTokenLimit fallback(CLIProxyAPI PR 6659)

    github.com

  11. 11
    CLIProxyAPI v8.0.38 server_routes.go 第 132 行

    github.com

  12. 12
    CLIProxyAPI v8.0.38 model_registry.go 第 1805–1810 行

    github.com

  13. 13
    Elevated errors affecting Connectors(status.claude.com)

    status.claude.com

  14. 14
    Anthropic 状态页事件数据

    status.anthropic.com

  15. 15
    Discussion Hub for new Claude incident: Elevated errors affecting Connectors on Oct 22, 2026

    reddit.com

  16. 16
    ChatGPT conversion failures in India, Japan and Korea. And Response API errors(status.openai.com)

    status.openai.com

  17. 17
    codex-reset.com

    codex-reset.com

  18. 18
    opentherank 的 Codex 重置追踪

    opentherank.com

  19. 19
    Multiple services are experiencing issues in the europe-west2 region(Google Cloud 状态页)

    status.cloud.google.com

  20. 20
    能不能加一个codex重置卡到期前自动重置的功能(sub2api issue 8290)

    github.com

  21. 21
    CLIProxyAPI v8.0.38 config_types.go 第 694–697 行

    github.com

  22. 22
    CLIProxyAPI v8.0.38 config.example.yaml 第 713–719 行

    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

  • 一个号被临时停调度,它的模型就从目录里没了
  • 余额耗尽没有自己的错误码,还被算进路由容量
  • /v1/models 只吐四个字段,上下文长度在出口被丢掉
  • 补一条上期漏掉的:Anthropic 11:50 开的 Connectors 事件
  • 上游与额度:OpenAI 那条还挂着,重置仍停在 10-20
  • 今晚能做的四件事