(resp *http.Response, showBodyWhenFail bool)
| 80 | } |
| 81 | |
| 82 | func RelayErrorHandler(resp *http.Response, showBodyWhenFail bool) (newApiErr *types.NewAPIError) { |
| 83 | newApiErr = &types.NewAPIError{ |
| 84 | StatusCode: resp.StatusCode, |
| 85 | ErrorType: types.ErrorTypeOpenAIError, |
| 86 | } |
| 87 | |
| 88 | responseBody, err := io.ReadAll(resp.Body) |
| 89 | if err != nil { |
| 90 | return |
| 91 | } |
| 92 | common.CloseResponseBodyGracefully(resp) |
| 93 | var errResponse dto.GeneralErrorResponse |
| 94 | |
| 95 | err = common.Unmarshal(responseBody, &errResponse) |
| 96 | if err != nil { |
| 97 | if showBodyWhenFail { |
| 98 | newApiErr.Err = fmt.Errorf("bad response status code %d, body: %s", resp.StatusCode, string(responseBody)) |
| 99 | } else { |
| 100 | newApiErr.Err = fmt.Errorf("bad response status code %d", resp.StatusCode) |
| 101 | } |
| 102 | return |
| 103 | } |
| 104 | if errResponse.Error.Message != "" { |
| 105 | // General format error (OpenAI, Anthropic, Gemini, etc.) |
| 106 | newApiErr = types.WithOpenAIError(errResponse.Error, resp.StatusCode) |
| 107 | } else { |
| 108 | newApiErr = types.NewErrorWithStatusCode(errors.New(errResponse.ToMessage()), types.ErrorCodeBadResponseStatusCode, resp.StatusCode) |
| 109 | newApiErr.ErrorType = types.ErrorTypeOpenAIError |
| 110 | } |
| 111 | return |
| 112 | } |
| 113 | |
| 114 | func ResetStatusCode(newApiErr *types.NewAPIError, statusCodeMappingStr string) { |
| 115 | if statusCodeMappingStr == "" || statusCodeMappingStr == "{}" { |
no test coverage detected