error.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package gemini
  2. import (
  3. "net/http"
  4. "github.com/bytedance/sonic"
  5. "github.com/labring/aiproxy/core/common"
  6. "github.com/labring/aiproxy/core/relay/adaptor"
  7. relaymodel "github.com/labring/aiproxy/core/relay/model"
  8. )
  9. func ErrorHandler(resp *http.Response) adaptor.Error {
  10. defer resp.Body.Close()
  11. respBody, err := common.GetResponseBody(resp)
  12. if err != nil {
  13. return relaymodel.NewGeminiError(resp.StatusCode, relaymodel.GeminiError{
  14. Message: err.Error(),
  15. Status: relaymodel.ErrorTypeUpstream,
  16. Code: resp.StatusCode,
  17. })
  18. }
  19. return ErrorHandlerWithBody(resp.StatusCode, respBody)
  20. }
  21. func ErrorHandlerWithBody(statusCode int, respBody []byte) adaptor.Error {
  22. var errResponse relaymodel.GeminiErrorResponse
  23. err := sonic.Unmarshal(respBody, &errResponse)
  24. if err != nil {
  25. // Maybe it's not a JSON response or different format
  26. return relaymodel.NewGeminiError(statusCode, relaymodel.GeminiError{
  27. Message: string(respBody),
  28. Status: relaymodel.ErrorTypeUpstream,
  29. Code: statusCode,
  30. })
  31. }
  32. if errResponse.Error.Message == "" {
  33. errResponse.Error.Message = string(respBody)
  34. }
  35. if errResponse.Error.Code == 0 {
  36. errResponse.Error.Code = statusCode
  37. }
  38. return relaymodel.NewGeminiError(statusCode, errResponse.Error)
  39. }