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 。此处为按公开协议构造的合成事件,不含真实会话/凭据。
response.output_item.done
state.text = b.text
ResponseOutputMessage.content
Response.output_text
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。
Hello
wor
world
Hello world
server.ts handleStream
9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837
按最终content顺序合并所有有效文本块,完成快照一次性替换先前partial文本,避免重复;单块、无文本快照回退、tool calls、usage和TTFT保持原行为。公共捕获格式/CLI不变,无新增依赖或版本修改。 单提交 52463e61917fb0fb3c94f1361f3450568a1788f1。修复前focused20项测试4失败/16控制通过;修复后受影响cpx全部19文件/185项Host UT通过、无跳过,适用precommit/OAT2文件零非法类型/许可头/diff通过。初轮全量UT的npm缺失、稀疏跨包文件缺失和macOS临时路径差异已补齐环境后重跑,不算产品缺陷、没有关闭测试。
52463e61917fb0fb3c94f1361f3450568a1788f1
核对53个全部状态Issue和38个开放PR;#13是Chat Completions reasoning_content,#52/#53是请求解码/脱敏,不是Responses最终多个文本块被覆盖。
/assign @Ethan_Zou
问题背景
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最终多个文本块被覆盖。