背景
ConversationReplyGenerator、ToolCallLoop、ChatRuntime 在 streaming 主路径上已经有不少局部保护,但 closeout contract 还没有稳定成仓库内共识。
尤其当前还没有明确拍板的问题包括:
- terminal signaling 是 round-local 还是 overall-stream-local
- multi-round tool use 后,outer stream 是否应该只暴露一个 overall terminal chunk
Usage / FinishReason 应该挂在哪个 chunk 上
- provider 若先发
Usage 再发纯 IsLast,runtime 是否应该重排
- warning path / tool-result path / final-answer path / closeout path 如何避免重复收尾
问题
如果 contract 没先定,测试很容易把目标态假设误写成当前既有不变量。
目标
先明确 closeout contract,再按契约调整 ConversationReplyGenerator / ChatRuntime 及相关消费侧行为。
范围
- 定义 streaming closeout contract
- 明确 generator 与 runtime 的职责边界
- 对齐 provider / runtime / consumer 对 terminal chunk 的理解
- 契约确定后,按需要改生产代码
验收标准
- 有清晰的 closeout contract 说明
ConversationReplyGenerator 与 ChatRuntime 的职责边界明确
Usage / FinishReason / terminal signaling 规则明确
- 下游消费者不再依赖模糊的 closeout 行为
背景
ConversationReplyGenerator、ToolCallLoop、ChatRuntime在 streaming 主路径上已经有不少局部保护,但 closeout contract 还没有稳定成仓库内共识。尤其当前还没有明确拍板的问题包括:
Usage/FinishReason应该挂在哪个 chunk 上Usage再发纯IsLast,runtime 是否应该重排问题
如果 contract 没先定,测试很容易把目标态假设误写成当前既有不变量。
目标
先明确 closeout contract,再按契约调整
ConversationReplyGenerator/ChatRuntime及相关消费侧行为。范围
验收标准
ConversationReplyGenerator与ChatRuntime的职责边界明确Usage/FinishReason/ terminal signaling 规则明确