
补报 10 月 15 日 05:48 到 11:57(北京):同一张凭证上的在途请求成功回来,会把刚写下的模型级额度冷却清掉,已耗尽的凭证于是被反复选中,修它的 PR 还没合并;另有三条会让整单失败的上游 400,以及窗口内扎堆的 Gemini 4 Argon 额度抱怨。
discriminator 被原样透传给 Google 上游就会被拒。报障给的两个工具都来自同一个 MCP 服务,关掉整个服务也有效。5Resets in 140h36m。同一张凭证上还有别的请求在外面跑。它们正常返回 200 的时候,会顺手把这条冷却清掉。1sdk/cliproxy/auth/conductor_cooldown.go 里的 Manager.MarkResult,从第 762 行开始。8auth.Quota.Reason == "credential_quota" 的情况;按模型记账的额度走到第 827 行那一支,第 830 行直接调 resetModelState(state, now)。9
// Retain active credential-scoped cooldown,管不到按模型记账的额度;绕过它之后,第 827 行的 } else if modelKey != "" { 和第 830 行的 resetModelState(state, now) 之间只隔两次赋值。9resetModelState 自己从第 1273 行开始,它把模型状态整组清干净:Unavailable 置回 false、状态改回 StatusActive、错误清空,其中 applyCooldownFields(&state.Quota, QuotaState{}) 把额度字段全部归零,最后把 UpdatedAt 写成当前时刻。10Result 结构体里没有任何时间字段可以区分这两种成功,它只有凭证版本与注册世代。2Result 加了 StartedAt(派出时刻),并新增 successPredatesQuotaCooldown:冷却还活着、并且这个成功请求的派出时间早于冷却写入时间(startedAt.Before(state.UpdatedAt))时,冷却保持不变。派发晚于冷却的成功、已经过期的冷却,以及没带 StartedAt 的外部调用,行为都和现在一样。2dev,动 7 个文件、+210/−23,GitHub 给的可合并状态是 clean。到发稿仍开着、未合并,所以 v8.0.29 上这个循环还在。2Resets in 140h36m),而每次在途请求成功回来都会把它清一次。把并发压下来则能降低撞上的概率,触发条件本来就是同一个模型、同一张凭证上有多个请求同时在跑。1web_search 上带了 search_context_size。 OpenAI Responses 的客户端如果在 web_search 工具上设了这个字段(让用户自选搜索范围的客户端常这么发),它会被原样转给 xAI,xAI 直接拒掉整单:HTTP 400 {"code":"400","error":"Argument not supported: search_context_size"}。字段挂在工具声明上,所以这类客户端发往 Grok 模型的每个请求都会失败。3normalizeXAITool 早就对同源的 external_web_access 做过剔除,漏掉的是 search_context_size。修复 PR #6642 把这条一次性分支换成一张「xAI 不接受的 web_search 选项」表,并且选择用黑名单而非白名单,理由是 xAI 还文档了 enable_image_understanding、enable_image_search 等字段,白名单会把它们静默丢掉。该 PR 在 12:01(北京)合进 dev,动 2 个文件、+81/−5。4discriminator。 报障人在 antigravity 上挂了 292 个工具(含一个 MCP 服务的两件),上游回的是 Invalid JSON payload received. Unknown name "discriminator" at 'request.tools[0].function_declarations[90]...'。触发形状是参数 schema 里 anyOf 联合旁边挂着 discriminator。5internal/util/gemini_schema.go 的 removeUnsupportedKeywords(第 1507 行)会删掉 dependentRequired、dependentSchemas、dependencies、if/then/else 等一批 Gemini 不认的关键字,这份名单里没有 discriminator。11discriminator 这类兄弟键顺带就没了。这一段是他的判断,本刊这次核到的是关键字名单本身。这条 issue 到发稿开着、没有对应 PR。5gemini-4-argon 不在目录里。 v8.0.29 上走 gemini API-key 通道请求这个模型,本地直接回 HTTP 400 unknown provider for model gemini/gemini-4-argon;同一把 key 直连 Google AI Studio 的 gemini-4-argon:generateContent 是 200。6internal/registry/models/models.json 里 gemini-4-argon 只出现在 vertex 段,antigravity 段叫 gemini-4-argon-high,而 gemini 段一共 13 个模型,里面没有它。7/v1beta/models 拉到的模型写进 api-keys.gemini[].models。他做完之后 Gemini 目录从 13 个涨到 34 个,原生接口、countTokens、generateContent、SSE、Chat Completions、Responses 全部回到 200。这条到发稿也开着、没有对应 PR。6status 在翻译里丢了。 POST /v1/responses 的输入里带 function_call_output 并标了 "status": "incomplete" 时,翻译出来的 Claude tool_result 只剩 tool_use_id 和 content,没有 is_error。整条链路没有任何报错,只是送上去的 payload 少了一个字段。13internal/translator/claude/openai/responses/claude_openai-responses_request.go 第 523 行那个分支从 item 里取 output 和 call id,整个文件里没有一处读 Responses 侧的 status 字段,is_error 只在「工具调用被中断」那条兜底文案里出现过一次(第 1158 行)。14/v1/models 把应用版本当成 Codex CLI 版本比。 EasyCLIProxyAPI 面板请求 /v1/models?client_version=0.3.37 时,服务端拿 0.3.37 去和 Codex CLI 的门槛 0.144.0 比,判定为旧客户端,于是剥掉 max、ultra 两个扩展推理档,也跳过 cpa_capabilities;另外 client_version 传空值时不会回退到从 User-Agent 里取版本。15internal/client/codex/models/models.go。supportsExtendedReasoningLevels 从第 898 行开始,只有版本能解析成数字、并且小于 0.144.0 时才返回 false;版本为空或者解析不出数字时它返回 true,保留新特性。所以触发条件是「客户端报出去的是个数字形式的应用版本号」。16EasyCLIProxyAPI/* 归一成 cpa,并在 client_version 为空时从 User-Agent 推断版本(认得 codex_cli_rs/、codex_exec/、Codex Desktop/、codex/ 四种前缀)。它 base 是 dev,动 5 个文件、+87/−2,到发稿开着、未合并。17Content-Encoding: zstd 的请求体加一条快速路径。请求体恰好是一个完整帧、帧头声明了原始大小(且不超过 64 MiB、不超过压缩体的 32 倍)时,一次性解码到定长缓冲区;其余情况退回原来的流式解码,截断、上限与报错行为不变。18Model、PromptCacheKey 等字段是请求体的子串,请求体被改写之后,这几个短字符串还拖着旧版本不放。改动是给它们做 strings.Clone。20src/proxy/fetch-dispatcher.ts 是这样取代理的:先看配置里的 tls.proxy_url,再看环境里的 HTTPS_PROXY,有就把 new ProxyAgent(proxyUrl) 缓存起来,交给每个请求的 withFetchDispatcher。23EnvHttpProxyAgent,并把默认的 NO_PROXY 设成 localhost,127.0.0.1,::1,再与环境变量里的 NO_PROXY 合并。此前配了外部代理的实例,指向本地后端(比如 Ollama)的请求也会被代理接走,代理拒绝回环流量时整个请求就失败。24ApiKeyEntry 多一个 proxyId 字段,新增 PATCH /auth/api-keys/:id/proxy 接口,取值里 direct 表示直连、global 表示走全局代理、auto 表示轮询代理池,也可以直接填某个代理节点的 UUID;管理面板的「新增密钥」表单和每行密钥都会多一个代理选择框。24dev,动 23 个文件、+556/−76,到发稿开着、0 条评论。github.com
github.com
github.com
github.com
github.com
github.com
status.anthropic.com
status.cloud.google.com
status.openai.com
codex-reset.com
reddit.com
reddit.com
support.google.com
linuxdo.club
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.