From 214ca4db56dc7fbaff955e475b431fa1d5dc5341 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Tue, 15 Apr 2025 04:52:33 +0800 Subject: [PATCH] fix: claude parallel function calling --- relay/channel/claude/relay-claude.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 5a240d58..95e7c4be 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -300,6 +300,13 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse response.Model = claudeResponse.Model response.Choices = make([]dto.ChatCompletionsStreamResponseChoice, 0) tools := make([]dto.ToolCallResponse, 0) + fcIdx := 0 + if claudeResponse.Index != nil { + fcIdx = *claudeResponse.Index - 1 + if fcIdx < 0 { + fcIdx = 0 + } + } var choice dto.ChatCompletionsStreamResponseChoice if reqMode == RequestModeCompletion { choice.Delta.SetContentString(claudeResponse.Completion) @@ -319,7 +326,7 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse //choice.Delta.SetContentString(claudeResponse.ContentBlock.Text) if claudeResponse.ContentBlock.Type == "tool_use" { tools = append(tools, dto.ToolCallResponse{ - Index: common.GetPointer(0), + Index: common.GetPointer(fcIdx), ID: claudeResponse.ContentBlock.Id, Type: "function", Function: dto.FunctionResponse{ @@ -338,7 +345,7 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse case "input_json_delta": tools = append(tools, dto.ToolCallResponse{ Type: "function", - Index: common.GetPointer(0), + Index: common.GetPointer(fcIdx), Function: dto.FunctionResponse{ Arguments: *claudeResponse.Delta.PartialJson, },