From 4313ede13298495c5494680edeab88acc19192e2 Mon Sep 17 00:00:00 2001 From: CaIon Date: Sat, 19 Jul 2025 11:15:34 +0800 Subject: [PATCH 1/3] fix: set ErrorType to OpenAIError in RelayErrorHandler for better error categorization --- service/error.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service/error.go b/service/error.go index e655f448..a0713b55 100644 --- a/service/error.go +++ b/service/error.go @@ -82,6 +82,7 @@ func ClaudeErrorWrapperLocal(err error, code string, statusCode int) *dto.Claude func RelayErrorHandler(resp *http.Response, showBodyWhenFail bool) (newApiErr *types.NewAPIError) { newApiErr = &types.NewAPIError{ StatusCode: resp.StatusCode, + ErrorType: types.ErrorTypeOpenAIError, } responseBody, err := io.ReadAll(resp.Body) @@ -105,6 +106,7 @@ func RelayErrorHandler(resp *http.Response, showBodyWhenFail bool) (newApiErr *t newApiErr = types.WithOpenAIError(errResponse.Error, resp.StatusCode) } else { newApiErr = types.NewErrorWithStatusCode(errors.New(errResponse.ToMessage()), types.ErrorCodeBadResponseStatusCode, resp.StatusCode) + newApiErr.ErrorType = types.ErrorTypeOpenAIError } return } From d19a6914f9be83a1100defe201d16a5225610ad3 Mon Sep 17 00:00:00 2001 From: CaIon Date: Sat, 19 Jul 2025 11:28:18 +0800 Subject: [PATCH 2/3] fix: create NewOpenAIError function for improved error handling in Relay --- relay/relay-text.go | 2 +- types/error.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/relay/relay-text.go b/relay/relay-text.go index 9ca86a7c..60327074 100644 --- a/relay/relay-text.go +++ b/relay/relay-text.go @@ -210,7 +210,7 @@ func TextHelper(c *gin.Context) (newAPIError *types.NewAPIError) { resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } statusCodeMappingStr := c.GetString("status_code_mapping") diff --git a/types/error.go b/types/error.go index 40d141cd..5c8b37d2 100644 --- a/types/error.go +++ b/types/error.go @@ -152,6 +152,14 @@ func NewError(err error, errorCode ErrorCode) *NewAPIError { } } +func NewOpenAIError(err error, errorCode ErrorCode, statusCode int) *NewAPIError { + openaiError := OpenAIError{ + Message: err.Error(), + Type: string(errorCode), + } + return WithOpenAIError(openaiError, statusCode) +} + func NewErrorWithStatusCode(err error, errorCode ErrorCode, statusCode int) *NewAPIError { return &NewAPIError{ Err: err, From a3059597fbc1bf2cc6a0fb6fe9dbd09dddde1e8c Mon Sep 17 00:00:00 2001 From: CaIon Date: Sat, 19 Jul 2025 11:29:31 +0800 Subject: [PATCH 3/3] fix: replace NewError with NewOpenAIError for improved error handling in multiple handlers --- relay/claude_handler.go | 2 +- relay/embedding_handler.go | 2 +- relay/image_handler.go | 2 +- relay/rerank_handler.go | 2 +- relay/responses_handler.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/relay/claude_handler.go b/relay/claude_handler.go index da0edfd9..5f38960e 100644 --- a/relay/claude_handler.go +++ b/relay/claude_handler.go @@ -125,7 +125,7 @@ func ClaudeHelper(c *gin.Context) (newAPIError *types.NewAPIError) { var httpResp *http.Response resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } if resp != nil { diff --git a/relay/embedding_handler.go b/relay/embedding_handler.go index 20b028ed..be11bb2b 100644 --- a/relay/embedding_handler.go +++ b/relay/embedding_handler.go @@ -91,7 +91,7 @@ func EmbeddingHelper(c *gin.Context) (newAPIError *types.NewAPIError) { statusCodeMappingStr := c.GetString("status_code_mapping") resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } var httpResp *http.Response diff --git a/relay/image_handler.go b/relay/image_handler.go index 8349307f..8e059863 100644 --- a/relay/image_handler.go +++ b/relay/image_handler.go @@ -209,7 +209,7 @@ func ImageHelper(c *gin.Context) (newAPIError *types.NewAPIError) { resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } var httpResp *http.Response if resp != nil { diff --git a/relay/rerank_handler.go b/relay/rerank_handler.go index 72ca6a0b..a092de4b 100644 --- a/relay/rerank_handler.go +++ b/relay/rerank_handler.go @@ -84,7 +84,7 @@ func RerankHelper(c *gin.Context, relayMode int) (newAPIError *types.NewAPIError } resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } statusCodeMappingStr := c.GetString("status_code_mapping") diff --git a/relay/responses_handler.go b/relay/responses_handler.go index 10fa448b..52d1db6e 100644 --- a/relay/responses_handler.go +++ b/relay/responses_handler.go @@ -137,7 +137,7 @@ func ResponsesHelper(c *gin.Context) (newAPIError *types.NewAPIError) { var httpResp *http.Response resp, err := adaptor.DoRequest(c, relayInfo, requestBody) if err != nil { - return types.NewError(err, types.ErrorCodeDoRequestFailed) + return types.NewOpenAIError(err, types.ErrorCodeDoRequestFailed, http.StatusInternalServerError) } statusCodeMappingStr := c.GetString("status_code_mapping")