Skip to content

流重建

流重建是桥接层,负责将异构的提供者流增量转换为统一的 OpenAI 兼容 ResponseStreamEvent 对象序列。没有它,每个上游提供者都会以自己的格式发出数据块,下游消费者(SSE 编码器、追踪日志器、会话持久化)就需要针对每个提供者编写特定逻辑。重建层让 GodeX 拥有单一、可预测的事件模型,无论请求由哪个 LLM 提供者处理。

概览

关注点组件关键文件
状态机阶段ResponseStreamStateMachineresponse-stream-state-machine.ts:37
增量到事件映射mapProviderDeltasToEventsstream-reconstructor.ts:17
增量验证validateDelta + 辅助函数stream-reconstructor.ts:69
增量类型契约ProviderStreamDeltastream-delta.ts:28
延迟终止事件deferFinish / deferTerminalresponse-stream-state-machine.ts:263

流状态机阶段

ResponseStreamPhase 枚举定义了每个流经历的五个阶段:

阶段描述
IDLE初始状态;尚未发出任何事件
IN_PROGRESS流正在活跃接收增量
COMPLETED流正常结束
INCOMPLETE流达到长度或上下文窗口限制
FAILED流因错误而终止

转换逻辑位于 response-stream-state-machine.ts:787,负责将提供者完成原因映射到正确的终止阶段。

块管理

IN_PROGRESS 阶段,状态机管理四类输出块:

块类型字段追踪方式
文本itemIdoutputIndexcontentIndextextactiveText
拒绝与文本相同结构activeRefusal
推理itemIdoutputIndexcontentIndextextactiveReasoning
工具调用callIdproviderNameargumentscustomInputactiveToolCalls Map

每个块在收到第一个增量时延迟创建,当流通过 closeActiveBlocks (response-stream-state-machine.ts:428) 到达终止阶段时关闭。

增量验证管道

mapProviderDeltasToEvents (stream-reconstructor.ts:17) 是核心循环。在任何状态机转换之前,每个原始增量都通过 validateDelta 验证,强制执行 ProviderStreamDelta 契约 (stream-delta.ts:28)。

验证字段规则
text可选字符串
reasoning可选字符串
refusal可选字符串
toolCall可选对象;index 必须为非负整数;id/type/name/arguments 必须为字符串
usage包含必需的 input_tokensoutput_tokenstotal_tokens(有限数字)的对象
finishReason字符串、null 或 undefined
error包含必需的 message 字符串和可选的 code 字符串的对象

无法识别的字段会引发错误码为 BRIDGE_STREAM_INVALID_TRANSITIONBridgeError (stream-reconstructor.ts:120)。

延迟终止事件

deferTerminal 为 true(在流式管道中如此)时,状态机的 deferFinish 方法存储完成原因而不转换到终止阶段 (response-stream-state-machine.ts:263)。这允许下游转换器——特别是输出契约验证转换器——在终止事件到达客户端之前检查并可能重写它。

ProviderStreamEventBridge.flush 方法 (stream-pipeline.ts:123) 在上游流关闭时调用 machine.finish(machine.deferredFinishReason),确保终止事件总是被发出。

工具调用重建

工具调用块通过 streamIndexMap<number, ToolCallBlock> 中追踪 (response-stream-state-machine.ts:94)。当工具调用块关闭时,状态机:

  1. 验证 callIdproviderName 都存在(否则抛出 BRIDGE_STREAM_INCOMPLETE_TOOL_CALL
  2. 检查 ToolIdentityMap 以确定工具是否为自定义工具
  3. 调用 restoreToolCall(来自 call-restorer.ts:16)将提供者函数调用映射回正确的 Responses API 类型(function_calllocal_shell_callshell_callapply_patch_callcustom_tool_call

错误规范化

提供者错误通过 normalizeError (response-stream-state-machine.ts:753) 进行规范化,将提供者错误代码映射到一组已知的 ResponseErrorCode 值。未知代码回退为 server_error

交叉引用

参考