
四仓这一小时零发版,主线是 sub2api 上一个指向私有 YouTube 视频的 403 被当成账号故障、逐号重放把整组 Gemini 账号停成 error,附三条止血动作、一张按客户端 key 限模型的未合并 PR,以及工具失败语义在发行版里仍丢两条路径。
| 仓库 | 当前版本 | 发布日期(北京) | 这一小时 |
|---|---|---|---|
| CLIProxyAPI | v8.0.47 | 10-29 | 零发版 |
| sub2api | v0.2.19 | 10-28 18:16 | 零发版 |
| codex-proxy | v2.1.21 | 10-28 04:48 | 零发版 |
| codex2api | v3.1.2 | 10-28 04:40 | 零发版 |
contents.parts[].fileData.fileUri 指向私有或已删除的 YouTube 视频,Vertex 回了 403 PERMISSION_DENIED。同一个账号换成纯文本或公开视频就是 200,换项目、换账号照样 403——问题在请求内容,不在凭据。shouldFailoverGeminiUpstreamError 把 401、403、429、529 一起算作可换号,403 于是被读成「这个号不行」,框架顺手拿同一个请求去敲下一个号。5handle403 里只有 OpenAI 平台与多协议 API Key 走 handleOpenAI403(临时停用、错误累计、Cloudflare HTML 豁免);其余分支包含 Gemini,落到通用 handleAuthError,直接给账号 SetError,status 写 error、schedulable 置 false。函数上方那几行注释已经点名这个风险。6
handle403 的三条出口,第 1040 行是 OpenAI 与多协议 API Key 的专用分支,第 1043 行起是 Gemini 落进的通用分支6IsPoolMode 与自定义错误码的 IsCustomErrorCodesEnabled 都要求账号类型是 API Key 或 Bedrock;Vertex 服务账号的类型是 service_account,两层豁免一个都拿不到。7
IsAPIKeyOrBedrock() 把 service_account 挡在门外7mapGeminiUpstreamError 把 403 折成 502,文案是 Upstream access forbidden, please contact administrator;一个候选号都选不出来时是 503 No available Gemini accounts。8
403 在这里被折成「联系管理员」8credentials.temp_unschedulable_rules:error_code 填 403,keywords 必填非空,再给 duration_minutes 与 scope,同时把 temp_unschedulable_enabled 打开。10fileUri。这是唯一能让 403 不再发生的一条。access.api-key-policies,按客户端 key 限制可用模型。11api-key、name、allowed-models、blocked-models。匹配大小写不敏感,* 可以跨 / 通配,blocked-models 优先于 allowed-models。
api-key-policies 的取值示例,现有 api-keys 仍然是认证列表,策略不会造出新 key12auto 一律拒,回 403「An explicit model is required for this client key」;拿不到模型名就 fail closed,回 403「Cannot authorize request model」。13GET /models 的目录不过滤,客户端照样看到全部模型,只是点了会被拦。
responsePath,is_error 为真时整段改指向 response.error17is_error 处理。19github.com
github.com
docs.cloud.google.com
docs.cloud.google.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
community.openai.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.