Skip to content

[codex] 修复 Chat Completions 兼容流式 tool_calls 桥接#238

Merged
qxcnm merged 1 commit into
qxcnm:mainfrom
izhaoqing:fix/opencode-chat-sse-role
May 18, 2026
Merged

[codex] 修复 Chat Completions 兼容流式 tool_calls 桥接#238
qxcnm merged 1 commit into
qxcnm:mainfrom
izhaoqing:fix/opencode-chat-sse-role

Conversation

@izhaoqing
Copy link
Copy Markdown

改动内容

  • 修复 OpenAI-compatible /v1/chat/completions 被适配到 /v1/responses 后,Responses API 的 function_call SSE 事件没有正确转回 Chat Completions tool_calls delta 的问题。
  • 为首个 assistant delta 补充 role: assistant,保持 Chat Completions 流式响应兼容性。
  • 当响应中包含 tool call 时,最终 chunk 使用 finish_reason: "tool_calls",让客户端继续执行工具调用。
  • 支持从 response.output_item.addedresponse.function_call_arguments.deltaresponse.function_call_arguments.doneresponse.output_item.done 中累计并补齐 tool call arguments。
  • 补充回归测试,覆盖正常 arguments delta 和缺失 delta 时从 done 事件补齐 arguments 的场景。

问题背景

部分 OpenAI-compatible 客户端,例如 opencode 和 Trae 自定义模型,会通过 /v1/chat/completions 访问 Codex/Responses 后端。

修复前,上游实际返回了 Responses API 的 function call 流式事件,但桥接层没有把它们转换成 Chat Completions 兼容的 delta.tool_calls。客户端因此只能看到 step 结束和 token 统计,却拿不到可展示文本或可执行的 tool call,表现为模型有返回但界面不显示内容。

修复方式

ChatCompletionsFromResponsesSseReader 中补齐 Responses function call SSE 到 Chat Completions tool_calls SSE 的转换逻辑,使 OpenAI-compatible 客户端能正确识别并继续执行工具调用。

测试说明

  • cargo test -p codexmanager-service chat_completions_reader_ -- --nocapture
  • pnpm run build:desktop

@qxcnm qxcnm marked this pull request as ready for review May 18, 2026 11:58
@qxcnm qxcnm merged commit a4b8471 into qxcnm:main May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants