Merge pull request #1623 from sakurawztlt/fix/anthropic-buffered-empty-output

fix: anthropic 非流式路径丢失 delta 内容(镜像 b2e379cf)
This commit is contained in:
Wesley Liddick
2026-04-13 21:11:48 +08:00
committed by GitHub

View File

@@ -270,6 +270,7 @@ func (s *OpenAIGatewayService) handleAnthropicBufferedStreamingResponse(
var finalResponse *apicompat.ResponsesResponse var finalResponse *apicompat.ResponsesResponse
var usage OpenAIUsage var usage OpenAIUsage
acc := apicompat.NewBufferedResponseAccumulator()
for scanner.Scan() { for scanner.Scan() {
line := scanner.Text() line := scanner.Text()
@@ -288,8 +289,12 @@ func (s *OpenAIGatewayService) handleAnthropicBufferedStreamingResponse(
continue continue
} }
// Accumulate delta content for fallback when terminal output is empty.
acc.ProcessEvent(&event)
// Terminal events carry the complete ResponsesResponse with output + usage. // Terminal events carry the complete ResponsesResponse with output + usage.
if (event.Type == "response.completed" || event.Type == "response.incomplete" || event.Type == "response.failed") && if (event.Type == "response.completed" || event.Type == "response.done" ||
event.Type == "response.incomplete" || event.Type == "response.failed") &&
event.Response != nil { event.Response != nil {
finalResponse = event.Response finalResponse = event.Response
if event.Response.Usage != nil { if event.Response.Usage != nil {
@@ -318,6 +323,10 @@ func (s *OpenAIGatewayService) handleAnthropicBufferedStreamingResponse(
return nil, fmt.Errorf("upstream stream ended without terminal event") return nil, fmt.Errorf("upstream stream ended without terminal event")
} }
// When the terminal event has an empty output array, reconstruct from
// accumulated delta events so the client receives the full content.
acc.SupplementResponseOutput(finalResponse)
anthropicResp := apicompat.ResponsesToAnthropic(finalResponse, originalModel) anthropicResp := apicompat.ResponsesToAnthropic(finalResponse, originalModel)
if s.responseHeaderFilter != nil { if s.responseHeaderFilter != nil {