From 99efc1fbb6366960e8d1b97fa6fe7a138dc1a6f1 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Tue, 15 Apr 2025 01:16:06 +0800 Subject: [PATCH] fix: try to fix claude to openai format mcp #966 --- relay/channel/claude/relay-claude.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 5aaed5f8..5a240d58 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -24,6 +24,8 @@ func stopReasonClaude2OpenAI(reason string) string { return "stop" case "max_tokens": return "max_tokens" + case "tool_use": + return "tool_calls" default: return reason } @@ -317,8 +319,9 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse //choice.Delta.SetContentString(claudeResponse.ContentBlock.Text) if claudeResponse.ContentBlock.Type == "tool_use" { tools = append(tools, dto.ToolCallResponse{ - ID: claudeResponse.ContentBlock.Id, - Type: "function", + Index: common.GetPointer(0), + ID: claudeResponse.ContentBlock.Id, + Type: "function", Function: dto.FunctionResponse{ Name: claudeResponse.ContentBlock.Name, Arguments: "", @@ -330,11 +333,12 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse } } else if claudeResponse.Type == "content_block_delta" { if claudeResponse.Delta != nil { - choice.Index = *claudeResponse.Index choice.Delta.Content = claudeResponse.Delta.Text switch claudeResponse.Delta.Type { case "input_json_delta": tools = append(tools, dto.ToolCallResponse{ + Type: "function", + Index: common.GetPointer(0), Function: dto.FunctionResponse{ Arguments: *claudeResponse.Delta.PartialJson, },