SSE 流式调用:EventSource→onEvent 逐帧→send 收口

SSE 流式调用:EventSource→onEvent 逐帧→send 收口 由 Archify 生成的时序图。 ① chatCompletionStream(req, sseListener) ② newEventSource(POST, stream=true) ③ HTTPS 建立 SSE 长连接 ④ data: {...} 增量帧 ×N ⑤ onEvent → choices[0].delta ⑥ data: [DONE] → onClosed ⑦ send():拼装好的完整 ChatCompletionResponse ⑧ awaitCompletion(options):latch 阻塞等收尾 ⑨ cancelStream():可主动中断流 宿主调用方 · 提供 listener · 时序参与者 宿主调用方 提供 listener ChatService · chatCompletionStream · 时序参与者 ChatService chatCompletionStream EventSource · OkHttp SSE 通道 · 时序参与者 EventSource OkHttp SSE 通道 Provider · data: 帧流 · 时序参与者 Provider data: 帧流 SseListener · 子类接 delta · 时序参与者 SseListener 子类接 delta 图例 默认消息

分片重组

  • • tool_call 的 name/arguments 在多帧间分片到达:consumeFragmentedToolCalls 把 argumentsDelta 逐段 append 到 pending
  • • 帧解析成 ChatCompletionResponse 后取 choices[0].delta——增量语义与 OpenAI SSE 协议逐字段对齐

失败与重试

  • • onFailure → recordFailure + finishAttempt;prepareForRetry 复位状态后由 StreamExecutionSupport 重发
  • • onRetrying(failure, attempt, maxAttempts) 暴露重试进度;resetRetryState 在成功后清计数

并发原语

  • • awaitCompletion 走 CountDownLatch:onClosed/onFailure/cancel 都会 finishAttempt 归零放行
  • • StreamExecutionOptions 控制超时与重试上限;cancelStream 中止底层 EventSource