(resp *http.Response)
| 53 | } |
| 54 | |
| 55 | func RelayErrorHandler(resp *http.Response) (ErrorWithStatusCode *model.ErrorWithStatusCode) { |
| 56 | if resp == nil { |
| 57 | return &model.ErrorWithStatusCode{ |
| 58 | StatusCode: 500, |
| 59 | Error: model.Error{ |
| 60 | Message: "resp is nil", |
| 61 | Type: "upstream_error", |
| 62 | Code: "bad_response", |
| 63 | }, |
| 64 | } |
| 65 | } |
| 66 | ErrorWithStatusCode = &model.ErrorWithStatusCode{ |
| 67 | StatusCode: resp.StatusCode, |
| 68 | Error: model.Error{ |
| 69 | Message: "", |
| 70 | Type: "upstream_error", |
| 71 | Code: "bad_response_status_code", |
| 72 | Param: strconv.Itoa(resp.StatusCode), |
| 73 | }, |
| 74 | } |
| 75 | responseBody, err := io.ReadAll(resp.Body) |
| 76 | if err != nil { |
| 77 | return |
| 78 | } |
| 79 | if config.DebugEnabled { |
| 80 | logger.SysLog(fmt.Sprintf("error happened, status code: %d, response: \n%s", resp.StatusCode, string(responseBody))) |
| 81 | } |
| 82 | err = resp.Body.Close() |
| 83 | if err != nil { |
| 84 | return |
| 85 | } |
| 86 | var errResponse GeneralErrorResponse |
| 87 | err = json.Unmarshal(responseBody, &errResponse) |
| 88 | if err != nil { |
| 89 | return |
| 90 | } |
| 91 | if errResponse.Error.Message != "" { |
| 92 | // OpenAI format error, so we override the default one |
| 93 | ErrorWithStatusCode.Error = errResponse.Error |
| 94 | } else { |
| 95 | ErrorWithStatusCode.Error.Message = errResponse.ToMessage() |
| 96 | } |
| 97 | if ErrorWithStatusCode.Error.Message == "" { |
| 98 | ErrorWithStatusCode.Error.Message = fmt.Sprintf("bad response status code %d", resp.StatusCode) |
| 99 | } |
| 100 | return |
| 101 | } |
no test coverage detected