
上一期报的两处工具调用翻错已被直接提交进 CLIProxyAPI 的 dev:非流式有工具就写 tool_use,流式并行调用按位置分累加器;v8.0.35 与 main 都还没有,本期给出两处改法、自验路径,以及插件版本号必须三段式的定论。
internal/translator/openai/claude/openai_claude_response.go,上一期核的就是这个文件。6OmittedToolCallIndexes,也没有新加的映射函数。6openai-compatibility 上的 Claude→Gemini 通道,要么换回内置 gemini,要么先别走非流式。convertOpenAINonStreamingToAnthropic 里加了 hasToolCall 标记:只要这一轮里有 tool_calls,它就置真。
convertOpenAINonStreamingToAnthropic 修复后:第 538 行把条件改成 finishReason.Exists() || hasToolCall,第 539 行交给新函数判断,不再直接查旧表。mapOpenAINonStreamFinishReasonToAnthropic,第 577 行起。9finish_reason 不是 length 也不是 content_filter,就回 tool_use;其余情况照旧查表。length 还得翻成 max_tokens;content_filter 仍算 end_turn。ConvertOpenAIResponseToClaudeNonStream 的改法不同。它原来先写一次 stop_reason,再置一个「已设置」标记。finish_reason 先只存字符串,走到最后统一写一次。10convertOpenAIStreamingChunkToAnthropic,第 331 到 364 行。OmittedToolCallIndexes,注释写明它记的是「chunk 内数组位置」到「累加器键」的对应关系。
pos 记到新键上,后续没有 id 的碎片靠它回位。stop、null、省略 finish_reason 三种,都期望 tool_use。length 期望 max_tokens。content_filter 与空的 tool_calls 数组,都期望 end_turn。index,然后断言:content_block_start,分别对应 call_paris 与 call_tokyo。input_json_delta,参数分别是 {"city":"Paris"} 与 {"city":"Tokyo"}。content_block_stop,收尾的 stop_reason 是 tool_use。
TestStreamingTool_OmittedToolCallIndexSeparateChunksPreservesParallelCalls:第 1614–1616 行要求两个起始块,第 1641–1647 行比对两份参数里的城市,第 1650 行要求两块都收尾。openai_claude_response_test.go 里,从第 1548 行起。12compare v8.0.35...dev 只有 2 个文件。13go test ./internal/translator/openai/claude/,三个新用例都过才算真带上。content_block_start、参数各自完整。-v 会被切错身份。今天 08:03,维护者以 not planned 关了这张单。14v1.0.0(MAJOR.MINOR.PATCH)这套写法。v1.0.0-preview 这类预发布或带后缀的格式不应该使用。151.0.0,别带 -preview、-v2 这类后缀。1.0.0-preview-v2 被发现成 alpha-v1.0.0-preview 与 2 两个名字;1.0.0-preview-vnext 的版本直接是空的。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
opentherank.com
community.openai.com
reddit.com
reddit.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.