445559bfea
字节流干净结束不等于协议收尾:代理超时、网关掐断和 HTTP/2 提前 END_STREAM 都表现为干净 EOF。此前只要工具参数恰好是合法 JSON 就会 返回并执行该调用,且并行槽位在断流后会被静默丢弃。 新增 ParsedStreamEvent::is_completion 与 StreamAccumulation:: completion_observed,按协议判定收尾:Chat 用非空 finish_reason 或 [DONE],Responses 用 response.completed,Anthropic 用带 stop_reason 的 message_delta 或 message_stop。不能统一用 [DONE],MiniMax 兼容层 不发该标记。message_stop 改为产生只带 is_completion 的事件,保持不 伪造 finish_reason 覆盖真实 end_turn 的既有约束。 聚合出过工具 slot 但未观察到收尾信号时返回 Deserialize;判定使用未 固化槽位,使参数恰好闭合的截断仍按截断归因。StreamUnavailable 语义 不变,仍只表示事件形状不受支持。本轮只收严工具路径,纯文本缺收尾信 号仍返回成功并打 warn。 真实端点验证:MiniMax Anthropic 兼容层 stop_reason=tool_use、 MiniMax OpenAI 兼容层 finish_reason=tool_calls,均通过门禁。