From 19bfa158cce25d5c52f5bc390e34fdf99689a7be Mon Sep 17 00:00:00 2001 From: "1808837298@qq.com" <1808837298@qq.com> Date: Fri, 14 Mar 2025 17:48:26 +0800 Subject: [PATCH] refactor: Change ClaudeError field type to non-pointer and enhance response handling with reasoning content --- dto/claude.go | 2 +- relay/channel/claude/relay-claude.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dto/claude.go b/dto/claude.go index f7354230..f9a6024a 100644 --- a/dto/claude.go +++ b/dto/claude.go @@ -183,7 +183,7 @@ type ClaudeResponse struct { Completion string `json:"completion,omitempty"` StopReason string `json:"stop_reason,omitempty"` Model string `json:"model,omitempty"` - Error *ClaudeError `json:"error,omitempty"` + Error ClaudeError `json:"error,omitempty"` Usage *ClaudeUsage `json:"usage,omitempty"` Index *int `json:"index,omitempty"` ContentBlock *ClaudeMediaMessage `json:"content_block,omitempty"` diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 7e84f70d..3dbca4a9 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -376,8 +376,10 @@ func ResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse) *dto Created: common.GetTimestamp(), } var responseText string + var responseThinking string if len(claudeResponse.Content) > 0 { - responseText = *claudeResponse.Content[0].Text + responseText = claudeResponse.Content[0].GetText() + responseThinking = claudeResponse.Content[0].Thinking } tools := make([]dto.ToolCallResponse, 0) thinkingContent := "" @@ -424,6 +426,9 @@ func ResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse) *dto FinishReason: stopReasonClaude2OpenAI(claudeResponse.StopReason), } choice.SetStringContent(responseText) + if len(responseThinking) > 0 { + choice.ReasoningContent = responseThinking + } if len(tools) > 0 { choice.Message.SetToolCalls(tools) } @@ -590,6 +595,9 @@ func ClaudeHandler(c *gin.Context, resp *http.Response, requestMode int, info *r if err != nil { return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), nil } + if common.DebugEnabled { + println("responseBody: ", string(responseBody)) + } var claudeResponse dto.ClaudeResponse err = json.Unmarshal(responseBody, &claudeResponse) if err != nil {