
10 月 17 日北京 20:23 到 21:20 四仓未发新版:CLIProxyAPI 把上游断流从「补成正常收尾」改判成 502,但只落在 dev 分支;sub2api 的 adaptive-only 模型仍收到 thinking.type=enabled,PR 还没合。
4f2e5270,标题是 feat(runtime): detect upstream stream truncation across executors and proxy handlers,提交信息最后一行写着 Closes: #6707。这笔提交改了 9 个文件、+1761/−45,其中 937 行与 483 行是两份新增测试。5| 通道 | 什么情况算截断 | 现在的返回 |
|---|---|---|
原生 /v1/messages(Claude 执行器) | 流结束,但没见过 message_stop,也没有 error 事件 | 502 upstream stream closed before message_stop |
| Claude 格式经 Gemini / Vertex | 整条流里没有 finishReason,也没有 blockReason | 502 upstream stream closed before finishReason |
| Claude 格式经 OpenAI 兼容执行器 | 既没有 finish_reason,也没有 [DONE] | 502 upstream stream closed before [DONE] |
| Kimi 执行器 | 读上游时出错 | 先抛错误,不再先补 [DONE] |
| 其它输出格式 | 不适用 | 未改动 |
upstreamCompleted 仍是 false 时,错误被兜成 502。7event: error,状态码仍是 200。只看 HTTP 状态码的监控,看不到这次失败。8routing.cooldown.transient-error-cooldown-seconds,写 0 沿用 60 秒,写 -1 关掉。9Other protocols retain compatibility with providers that omit [DONE]. 这句注释就在旧代码里,除 Responses 之外,省略 [DONE] 的上游一律按正常结束处理。10message_stop、finishReason、finish_reason 或 [DONE]。缺哪个,就在哪条链路上会被判失败。判断依据是线上日志里是否出现上面那三句错误文案。mergeable_state 是 dirty。11 维护者自己那笔提交在 20:42 先落进了 dev,贡献者的这份没有合。CloseError 回调,一个在四个执行器里各自补判定。发行版里还没有这个行为,而主干上已经有两套写法。
message_stop 时,第 431 行把结局兜成 502。高亮原文见该文件。thinking.type=adaptive,深度交给 output_config.effort;收到 enabled 加 budget_tokens,上游直接 400。12"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.responses_to_anthropic_request.go 里有两段互斥的写法。文件上半部分是 5.5 家族的专属分支:Opus 5.5、Sonnet 5.5、Haiku 5.5 各按自己的规则写 adaptive、between_tools 或 disabled。reasoning_effort 非空、映射后的档位不是 low,就写 Type: "enabled" 加 defaultThinkingBudget(effort)。13/v1/messages。v0.2.17 在这里只做了一件事——按模型改中文 LLM 的 thinking.type 协议差异,注释写明 claude-* 不会进这段。14enabled,代理原样转给上游。claude-sonnet-5 复现:客户端认得的模型名发 adaptive,认不得的照旧发 enabled。reasoning_effort 的请求:只要映射后的档位不是 low,就落进通用分支。enabled;映射到 adaptive-only 模型之后,请求体里的 enabled 一个字没变,照样撞上 400。reasoning_effort。不传这个字段,就不会生成 thinking,也就没有 400。/v1/messages 的客户端改成 thinking.type=adaptive,把 budget_tokens 去掉。reasoning_effort 的,先走 5.5 家族——专属分支已经把 adaptive 写对了。mergeable_state 是 unstable,没有评审。它新增了 claude.RequiresAdaptiveThinking 来识别这批模型,并把转换层与原生转发两处都改成 adaptive。claude-fable-5-1 经 /v1/chat/completions 已经实际命中过这个 400;这句是报障人的自述,本刊没有独立复现。
switch effort 之后是 5.5 的专属逻辑,第 138–142 行才是所有其它模型的通用写法,Type: "enabled" 加 defaultThinkingBudget。原文见该文件。mergeable_state 是 unstable,21:06 还在更新。15 它新增能力名 anthropic.oauth.request_patch.v1:插件返回最终请求头和 JSON 正文补丁,OAuth、代理、TLS、连接池、重试、SSE 与计费仍走宿主自己的链路。补丁 RPC 最多 5 秒,正文上限 64 MiB,会挡掉认证、Cookie、代理凭据与 URL 里的 userinfo 和查询串。不覆盖 API Key、Setup Token、Vertex、Bedrock、OAuth 登录和 Token 刷新。CandyPrompt 里没有“不允许调用工具和联网”,结尾的“只回复数字结果”写成了“只恢复数字结果”。16ON CONFLICT(id) DO NOTHING。18 题面要自己在管理页里改。
INSERT ... ON CONFLICT(id) DO NOTHING 落库,已有实例的题库不会被升级覆盖。原文见该文件。context_management 顶回 400)、#6717(response.metadata 透传)、sub2api 的 #8177(Gemini 拦 prompt 时 input_tokens 记负数)都还是 open,本窗口没有新评审。机制上期讲过,这里只记状态。github.com
github.com
github.com
github.com
github.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.anthropic.com
status.cloud.google.com
codex-reset.com
x.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.