feat(relay-claude): mapping stop reason and send text delta on block start type

- convert claude stop reason "max_tokens" to openai "length"
- send content_block_start content text delta
This commit is contained in:
creamlike1024
2025-09-07 23:03:19 +08:00
parent 80cfa0d0df
commit de73bfff78

View File

@@ -32,7 +32,7 @@ func stopReasonClaude2OpenAI(reason string) string {
case "end_turn": case "end_turn":
return "stop" return "stop"
case "max_tokens": case "max_tokens":
return "max_tokens" return "length"
case "tool_use": case "tool_use":
return "tool_calls" return "tool_calls"
default: default:
@@ -426,7 +426,10 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse
choice.Delta.Role = "assistant" choice.Delta.Role = "assistant"
} else if claudeResponse.Type == "content_block_start" { } else if claudeResponse.Type == "content_block_start" {
if claudeResponse.ContentBlock != nil { if claudeResponse.ContentBlock != nil {
//choice.Delta.SetContentString(claudeResponse.ContentBlock.Text) // 如果是文本块,尽可能发送首段文本(若存在)
if claudeResponse.ContentBlock.Type == "text" && claudeResponse.ContentBlock.Text != nil {
choice.Delta.SetContentString(*claudeResponse.ContentBlock.Text)
}
if claudeResponse.ContentBlock.Type == "tool_use" { if claudeResponse.ContentBlock.Type == "tool_use" {
tools = append(tools, dto.ToolCallResponse{ tools = append(tools, dto.ToolCallResponse{
Index: common.GetPointer(fcIdx), Index: common.GetPointer(fcIdx),