已开启
[Bug] cpx Responses 完成事件仅保留最后一个文本块 #54
tianjun创建于  6 天前
tianjun
6 天前 创建

问题背景

cpx 的 Responses 流式重组器在 response.output_item.done 中逐个执行 state.text = b.text,最终只保留最后一个 output_text 内容块。先前已积累完整的流式 delta 也被尾块覆盖,捕获输出丢失前半部分,影响 insight 会话内容。
公开SDK的 ResponseOutputMessage.content 为内容列表,Response.output_text 按序拼接各文本块: https://github.com/openai/openai-python/blob/main/src/openai/types/responses/response_output_message.py ; https://github.com/openai/openai-python/blob/main/src/openai/types/responses/response.py 。此处为按公开协议构造的合成事件,不含真实会话/凭据。

重现步骤

cd packages/cpx
node_modules/.bin/vitest run tests/ut/reassembler.test.ts

事件:output_item.added(type=message,index=0),可选两个delta Hello / wor,output_item.done(content=[output_text("Hello "),output_text("world")])。原结果只剩 world,预期 Hello world。源码入口 server.ts handleStream 实际通过 createReassembler(protocol)/feed/result 保存捕获。
master 9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837 / macOS arm64 / Node24.19.0 / Vitest3.2.7 / npm10.9.2。

预期行为与修复

按最终content顺序合并所有有效文本块,完成快照一次性替换先前partial文本,避免重复;单块、无文本快照回退、tool calls、usage和TTFT保持原行为。公共捕获格式/CLI不变,无新增依赖或版本修改。
单提交 52463e61917fb0fb3c94f1361f3450568a1788f1。修复前focused20项测试4失败/16控制通过;修复后受影响cpx全部19文件/185项Host UT通过、无跳过,适用precommit/OAT2文件零非法类型/许可头/diff通过。初轮全量UT的npm缺失、稀疏跨包文件缺失和macOS临时路径差异已补齐环境后重跑,不算产品缺陷、没有关闭测试。

去重

核对53个全部状态Issue和38个开放PR;#13是Chat Completions reasoning_content,#52/#53是请求解码/脱敏,不是Responses最终多个文本块被覆盖。

likedislike
Ttianjun
6 天前 添加了label:bug-report
tianjun
6 天前 评论:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robot成员
6 天前 将 Ethan_Zou 设为负责人
Ttianjun
6 天前 关联了pull request:fix(cpx): preserve completed Responses text parts