diff --git a/dto/claude.go b/dto/claude.go index 2af43dae..9bca7de5 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 4d4da247..41b16c66 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -485,7 +485,7 @@ func HandleStreamResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud common.SysError("error unmarshalling stream response: " + err.Error()) return service.OpenAIErrorWrapper(err, "stream_response_error", http.StatusInternalServerError) } - if claudeResponse.Error.Type != "" { + if claudeResponse.Error != nil && claudeResponse.Error.Type != "" { return &dto.OpenAIErrorWithStatusCode{ Error: dto.OpenAIError{ Code: "stream_response_error", @@ -598,7 +598,7 @@ func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud if err != nil { return service.OpenAIErrorWrapper(err, "unmarshal_claude_response_failed", http.StatusInternalServerError) } - if claudeResponse.Error.Type != "" { + if claudeResponse.Error != nil && claudeResponse.Error.Type != "" { return &dto.OpenAIErrorWithStatusCode{ Error: dto.OpenAIError{ Message: claudeResponse.Error.Message,