Merge pull request #1623 from sakurawztlt/fix/anthropic-buffered-empty-output
fix: anthropic 非流式路径丢失 delta 内容(镜像 b2e379cf)
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user