"frontend/vscode:/vscode.git/clone" did not exist on "0b8e84f9427cda58a27e5446a37500710ea745a3"
  • Elysia's avatar
    fix(gateway): 防止流式 failover 拼接腐化导致客户端收到双 message_start · 0e237326
    Elysia authored
    
    
    当上游在 SSE 流中途返回 event:error 时,handleStreamingResponse 已将
    部分 SSE 事件写入客户端,但原先的 failover 逻辑仍会切换到下一个账号
    并写入完整流,导致客户端收到两个 message_start 进而产生 400 错误。
    
    修复方案:在每次 Forward 调用前记录 c.Writer.Size(),若 Forward 返回
    UpstreamFailoverError 后 writer 字节数增加,说明 SSE 内容已不可撤销地
    发送给客户端,此时直接调用 handleFailoverExhausted 发送 SSE error 事件
    终止流,而非继续 failover。
    
    Ping-only 场景不受影响:slot 等待期的 ping 字节在 Forward 前后相等,
    正常 failover 流程照常进行。
    Co-Authored-By: default avatarClaude Sonnet 4.6 <noreply@anthropic.com>
    0e237326
gateway_handler.go 61.4 KB