From 1819c4d5f51582c89192767f325f1b80c5768dda Mon Sep 17 00:00:00 2001 From: "1808837298@qq.com" <1808837298@qq.com> Date: Tue, 11 Mar 2025 17:25:06 +0800 Subject: [PATCH] feat(error): Enhance error handling with optional detailed error messages --- controller/channel-test.go | 2 +- relay/relay-audio.go | 2 +- relay/relay-image.go | 2 +- relay/relay-text.go | 2 +- relay/relay_embedding.go | 2 +- relay/relay_rerank.go | 2 +- service/error.go | 7 ++++++- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/controller/channel-test.go b/controller/channel-test.go index 46fb6e9f..39af95e1 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -125,7 +125,7 @@ func testChannel(channel *model.Channel, testModel string) (err error, openAIErr if resp != nil { httpResp = resp.(*http.Response) if httpResp.StatusCode != http.StatusOK { - err := service.RelayErrorHandler(httpResp) + err := service.RelayErrorHandler(httpResp, true) return fmt.Errorf("status code %d: %s", httpResp.StatusCode, err.Error.Message), err } } diff --git a/relay/relay-audio.go b/relay/relay-audio.go index b77ee80e..deb45c58 100644 --- a/relay/relay-audio.go +++ b/relay/relay-audio.go @@ -117,7 +117,7 @@ func AudioHelper(c *gin.Context) (openaiErr *dto.OpenAIErrorWithStatusCode) { if resp != nil { httpResp = resp.(*http.Response) if httpResp.StatusCode != http.StatusOK { - openaiErr = service.RelayErrorHandler(httpResp) + openaiErr = service.RelayErrorHandler(httpResp, false) // reset status code 重置状态码 service.ResetStatusCode(openaiErr, statusCodeMappingStr) return openaiErr diff --git a/relay/relay-image.go b/relay/relay-image.go index 90b423f9..f9f542a7 100644 --- a/relay/relay-image.go +++ b/relay/relay-image.go @@ -155,7 +155,7 @@ func ImageHelper(c *gin.Context) *dto.OpenAIErrorWithStatusCode { httpResp = resp.(*http.Response) relayInfo.IsStream = relayInfo.IsStream || strings.HasPrefix(httpResp.Header.Get("Content-Type"), "text/event-stream") if httpResp.StatusCode != http.StatusOK { - openaiErr := service.RelayErrorHandler(httpResp) + openaiErr := service.RelayErrorHandler(httpResp, false) // reset status code 重置状态码 service.ResetStatusCode(openaiErr, statusCodeMappingStr) return openaiErr diff --git a/relay/relay-text.go b/relay/relay-text.go index 2f080033..a0a97617 100644 --- a/relay/relay-text.go +++ b/relay/relay-text.go @@ -183,7 +183,7 @@ func TextHelper(c *gin.Context) (openaiErr *dto.OpenAIErrorWithStatusCode) { httpResp = resp.(*http.Response) relayInfo.IsStream = relayInfo.IsStream || strings.HasPrefix(httpResp.Header.Get("Content-Type"), "text/event-stream") if httpResp.StatusCode != http.StatusOK { - openaiErr = service.RelayErrorHandler(httpResp) + openaiErr = service.RelayErrorHandler(httpResp, false) // reset status code 重置状态码 service.ResetStatusCode(openaiErr, statusCodeMappingStr) return openaiErr diff --git a/relay/relay_embedding.go b/relay/relay_embedding.go index e5bfa863..b4909849 100644 --- a/relay/relay_embedding.go +++ b/relay/relay_embedding.go @@ -98,7 +98,7 @@ func EmbeddingHelper(c *gin.Context) (openaiErr *dto.OpenAIErrorWithStatusCode) if resp != nil { httpResp = resp.(*http.Response) if httpResp.StatusCode != http.StatusOK { - openaiErr = service.RelayErrorHandler(httpResp) + openaiErr = service.RelayErrorHandler(httpResp, false) // reset status code 重置状态码 service.ResetStatusCode(openaiErr, statusCodeMappingStr) return openaiErr diff --git a/relay/relay_rerank.go b/relay/relay_rerank.go index a3761387..201166d6 100644 --- a/relay/relay_rerank.go +++ b/relay/relay_rerank.go @@ -90,7 +90,7 @@ func RerankHelper(c *gin.Context, relayMode int) (openaiErr *dto.OpenAIErrorWith if resp != nil { httpResp = resp.(*http.Response) if httpResp.StatusCode != http.StatusOK { - openaiErr = service.RelayErrorHandler(httpResp) + openaiErr = service.RelayErrorHandler(httpResp, false) // reset status code 重置状态码 service.ResetStatusCode(openaiErr, statusCodeMappingStr) return openaiErr diff --git a/service/error.go b/service/error.go index c7601349..82fbda18 100644 --- a/service/error.go +++ b/service/error.go @@ -50,7 +50,7 @@ func OpenAIErrorWrapperLocal(err error, code string, statusCode int) *dto.OpenAI return openaiErr } -func RelayErrorHandler(resp *http.Response) (errWithStatusCode *dto.OpenAIErrorWithStatusCode) { +func RelayErrorHandler(resp *http.Response, showBodyWhenFail bool) (errWithStatusCode *dto.OpenAIErrorWithStatusCode) { errWithStatusCode = &dto.OpenAIErrorWithStatusCode{ StatusCode: resp.StatusCode, Error: dto.OpenAIError{ @@ -70,6 +70,11 @@ func RelayErrorHandler(resp *http.Response) (errWithStatusCode *dto.OpenAIErrorW var errResponse dto.GeneralErrorResponse err = json.Unmarshal(responseBody, &errResponse) if err != nil { + if showBodyWhenFail { + errWithStatusCode.Error.Message = string(responseBody) + } else { + errWithStatusCode.Error.Message = fmt.Sprintf("bad response status code %d", resp.StatusCode) + } return } if errResponse.Error.Message != "" {