
四仓这一小时没有新版本,但 sub2api 的 Gemini 兼容入口在流式下把同一轮的同名并行工具调用并成一个、参数拼成非法 JSON,下一轮整段会话被上游拒收;本期给出发行版里的两处代码位置、今天能做的三件事,以及一张 3 文件 +240/−2 的补丁。
/v1/chat/completions 与 /v1/messages 两条兼容入口的流式路径。两条走的是同一套工具块状态机,判断条件一模一样。tool_use;不经过 sub2api 的原生 Gemini 通道也不受影响。stream: true;模型在同一轮里对同一个工具发起多次调用。Please ensure that the number of function response parts is equal to the number of function call parts of the function call turn.

backend/internal/service/gemini_chat_completions_compat_service.go 第 712–742 行。第 723 行的收块条件是 openToolName != name,第 728 行才在 openToolIndex < 0 时开新块2。/v1/messages 那条入口同构:第 2320 行是同一句判断,第 2330 行是同一处开新块3。
backend/internal/service/gemini_messages_compat_service.go 第 2310–2340 行。第 2320 行只在工具名不同时收块并把 seenToolJSON 清空,第 2330 行才开新块。computeGeminiTextDelta。这个函数只有三段:新值以旧值为前缀就取增量,旧值以新值为前缀就丢弃,其余按增量直接拼4。{"city":"Beijing"},第二个调用的完整参数是 {"city":"Shanghai"}。两者互不为前缀,落进第三段。partial_json 成了 {"city":"Beijing"}{"city":"Shanghai"}。客户端按 index 累积时,看到的是一个调用加一段坏参数。{} 拼在一起,同样不是合法 JSON。tool_calls 个数是否少于预期;报错里带 number of function response parts 这句基本就锁定了。geminiResponseToChatCompletions → convertGeminiToClaudeMessage,逐 part 生成 tool_use5。代价是没有流式首字。
zichuanwangcloud-gif/sub2api@fix/gemini-stream-parallel-same-name-tool-calls 的 gemini_messages_compat_service.go 第 3398–3412 行。第 3403–3409 行的判据是:名字不同就返回 false;同名且已累积参数不是合法 JSON(确实在分片中)才并入7。arguments。| 仓库 | 当前发行版 | 主干最新提交 | 窗口内 |
|---|---|---|---|
| CLIProxyAPI | v8.0.35,10-20 03:08 发布13 | main 12:23、dev 18:54 | 一张旧单被推,无新提交 |
| sub2api | v0.2.17,10-16 12:41 发布6 | main 10-19 20:45 | 一张新补丁、一条支付报障 |
| codex-proxy | v2.1.19,10-20 05:10 发布14 | dev 10-20 04:57 | 无 |
| codex2api | v3.1.1,10-17 05:46 发布15 | main 10-17 05:35 | 无 |
#6581,提交数仍是 4 笔,没有新代码。#8243,易支付不入账不回调,属支付对账,与中转运维的动作无关,本刊不收。#6800 窗口内没有新评论,配套的 #6801 也没有新提交、没合并,两条都还开着。github.com
github.com
github.com
github.com
github.com
reddit.com
reddit.com
status.cloud.google.com
github.com
github.com
github.com
status.openai.com
status.anthropic.com
codex-reset.com
opentherank.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.