mirror of
https://github.com/alibaba/higress.git
synced 2026-06-07 11:47:30 +08:00
fix(ai-proxy): add missing event field in Claude streaming response (#3502)
This commit is contained in:
@@ -338,7 +338,7 @@ func (c *ClaudeToOpenAIConverter) ConvertOpenAIStreamResponseToClaude(ctx wrappe
|
|||||||
Index: &c.thinkingBlockIndex,
|
Index: &c.thinkingBlockIndex,
|
||||||
}
|
}
|
||||||
stopData, _ := json.Marshal(stopEvent)
|
stopData, _ := json.Marshal(stopEvent)
|
||||||
result.WriteString(fmt.Sprintf("data: %s\n\n", stopData))
|
result.WriteString(fmt.Sprintf("event: %s\ndata: %s\n\n", stopEvent.Type, stopData))
|
||||||
}
|
}
|
||||||
if c.textBlockStarted && !c.textBlockStopped {
|
if c.textBlockStarted && !c.textBlockStopped {
|
||||||
c.textBlockStopped = true
|
c.textBlockStopped = true
|
||||||
@@ -348,7 +348,7 @@ func (c *ClaudeToOpenAIConverter) ConvertOpenAIStreamResponseToClaude(ctx wrappe
|
|||||||
Index: &c.textBlockIndex,
|
Index: &c.textBlockIndex,
|
||||||
}
|
}
|
||||||
stopData, _ := json.Marshal(stopEvent)
|
stopData, _ := json.Marshal(stopEvent)
|
||||||
result.WriteString(fmt.Sprintf("data: %s\n\n", stopData))
|
result.WriteString(fmt.Sprintf("event: %s\ndata: %s\n\n", stopEvent.Type, stopData))
|
||||||
}
|
}
|
||||||
// Send final content_block_stop events for any remaining unclosed tool calls
|
// Send final content_block_stop events for any remaining unclosed tool calls
|
||||||
for index, toolCall := range c.toolCallStates {
|
for index, toolCall := range c.toolCallStates {
|
||||||
@@ -360,7 +360,7 @@ func (c *ClaudeToOpenAIConverter) ConvertOpenAIStreamResponseToClaude(ctx wrappe
|
|||||||
Index: &toolCall.claudeContentIndex,
|
Index: &toolCall.claudeContentIndex,
|
||||||
}
|
}
|
||||||
stopData, _ := json.Marshal(stopEvent)
|
stopData, _ := json.Marshal(stopEvent)
|
||||||
result.WriteString(fmt.Sprintf("data: %s\n\n", stopData))
|
result.WriteString(fmt.Sprintf("event: %s\ndata: %s\n\n", stopEvent.Type, stopData))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,7 +375,7 @@ func (c *ClaudeToOpenAIConverter) ConvertOpenAIStreamResponseToClaude(ctx wrappe
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
stopData, _ := json.Marshal(messageDelta)
|
stopData, _ := json.Marshal(messageDelta)
|
||||||
result.WriteString(fmt.Sprintf("data: %s\n\n", stopData))
|
result.WriteString(fmt.Sprintf("event: %s\ndata: %s\n\n", messageDelta.Type, stopData))
|
||||||
c.pendingStopReason = nil
|
c.pendingStopReason = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,7 +386,7 @@ func (c *ClaudeToOpenAIConverter) ConvertOpenAIStreamResponseToClaude(ctx wrappe
|
|||||||
Type: "message_stop",
|
Type: "message_stop",
|
||||||
}
|
}
|
||||||
stopData, _ := json.Marshal(messageStopEvent)
|
stopData, _ := json.Marshal(messageStopEvent)
|
||||||
result.WriteString(fmt.Sprintf("data: %s\n\n", stopData))
|
result.WriteString(fmt.Sprintf("event: %s\ndata: %s\n\n", messageStopEvent.Type, stopData))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset all state for next request
|
// Reset all state for next request
|
||||||
@@ -722,7 +722,9 @@ func (c *ClaudeToOpenAIConverter) buildClaudeStreamResponse(ctx wrapper.HttpCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle usage information
|
// Handle usage information
|
||||||
if openaiResponse.Usage != nil && choice.FinishReason == nil {
|
// Note: Some providers may send usage in the same chunk as finish_reason,
|
||||||
|
// so we check for usage regardless of whether finish_reason is present
|
||||||
|
if openaiResponse.Usage != nil {
|
||||||
log.Debugf("[OpenAI->Claude] Processing usage info - input: %d, output: %d",
|
log.Debugf("[OpenAI->Claude] Processing usage info - input: %d, output: %d",
|
||||||
openaiResponse.Usage.PromptTokens, openaiResponse.Usage.CompletionTokens)
|
openaiResponse.Usage.PromptTokens, openaiResponse.Usage.CompletionTokens)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user