refactor: Change ClaudeError field type to non-pointer and enhance response handling with reasoning content

This commit is contained in:
1808837298@qq.com
2025-03-14 17:48:26 +08:00
parent 69e44a03b1
commit 19bfa158cc
2 changed files with 10 additions and 2 deletions

View File

@@ -183,7 +183,7 @@ type ClaudeResponse struct {
Completion string `json:"completion,omitempty"` Completion string `json:"completion,omitempty"`
StopReason string `json:"stop_reason,omitempty"` StopReason string `json:"stop_reason,omitempty"`
Model string `json:"model,omitempty"` Model string `json:"model,omitempty"`
Error *ClaudeError `json:"error,omitempty"` Error ClaudeError `json:"error,omitempty"`
Usage *ClaudeUsage `json:"usage,omitempty"` Usage *ClaudeUsage `json:"usage,omitempty"`
Index *int `json:"index,omitempty"` Index *int `json:"index,omitempty"`
ContentBlock *ClaudeMediaMessage `json:"content_block,omitempty"` ContentBlock *ClaudeMediaMessage `json:"content_block,omitempty"`

View File

@@ -376,8 +376,10 @@ func ResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse) *dto
Created: common.GetTimestamp(), Created: common.GetTimestamp(),
} }
var responseText string var responseText string
var responseThinking string
if len(claudeResponse.Content) > 0 { 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) tools := make([]dto.ToolCallResponse, 0)
thinkingContent := "" thinkingContent := ""
@@ -424,6 +426,9 @@ func ResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse) *dto
FinishReason: stopReasonClaude2OpenAI(claudeResponse.StopReason), FinishReason: stopReasonClaude2OpenAI(claudeResponse.StopReason),
} }
choice.SetStringContent(responseText) choice.SetStringContent(responseText)
if len(responseThinking) > 0 {
choice.ReasoningContent = responseThinking
}
if len(tools) > 0 { if len(tools) > 0 {
choice.Message.SetToolCalls(tools) choice.Message.SetToolCalls(tools)
} }
@@ -590,6 +595,9 @@ func ClaudeHandler(c *gin.Context, resp *http.Response, requestMode int, info *r
if err != nil { if err != nil {
return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), nil return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), nil
} }
if common.DebugEnabled {
println("responseBody: ", string(responseBody))
}
var claudeResponse dto.ClaudeResponse var claudeResponse dto.ClaudeResponse
err = json.Unmarshal(responseBody, &claudeResponse) err = json.Unmarshal(responseBody, &claudeResponse)
if err != nil { if err != nil {