errors.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package model
  2. import (
  3. "github.com/labring/aiproxy/core/relay/adaptor"
  4. "github.com/labring/aiproxy/core/relay/mode"
  5. )
  6. const (
  7. ErrorTypeAIPROXY = "aiproxy_error"
  8. ErrorTypeUpstream = "upstream_error"
  9. ErrorCodeBadResponse = "bad_response"
  10. )
  11. func WrapperError(
  12. m mode.Mode,
  13. statusCode int,
  14. err error,
  15. opts ...WrapperErrorOptionFunc,
  16. ) adaptor.Error {
  17. return WrapperErrorWithMessage(m, statusCode, err.Error(), opts...)
  18. }
  19. type WrapperErrorOption struct {
  20. Type string
  21. Code any
  22. }
  23. type WrapperErrorOptionFunc func(o *WrapperErrorOption)
  24. func WithType(typ string) WrapperErrorOptionFunc {
  25. return func(o *WrapperErrorOption) {
  26. o.Type = typ
  27. }
  28. }
  29. func WithCode(code any) WrapperErrorOptionFunc {
  30. return func(o *WrapperErrorOption) {
  31. o.Code = code
  32. }
  33. }
  34. func DefaultWrapperErrorOption() WrapperErrorOption {
  35. return WrapperErrorOption{
  36. Type: ErrorTypeAIPROXY,
  37. }
  38. }
  39. func WrapperErrorWithMessage(
  40. m mode.Mode,
  41. statusCode int,
  42. message string,
  43. opts ...WrapperErrorOptionFunc,
  44. ) adaptor.Error {
  45. opt := DefaultWrapperErrorOption()
  46. for _, o := range opts {
  47. if o == nil {
  48. continue
  49. }
  50. o(&opt)
  51. }
  52. switch m {
  53. case mode.Anthropic:
  54. return NewAnthropicError(statusCode, AnthropicError{
  55. Message: message,
  56. Type: opt.Type,
  57. })
  58. case mode.VideoGenerationsJobs,
  59. mode.VideoGenerationsGetJobs,
  60. mode.VideoGenerationsContent:
  61. return NewOpenAIVideoError(statusCode, OpenAIVideoError{
  62. Detail: message,
  63. })
  64. case mode.Gemini:
  65. return NewGeminiError(statusCode, GeminiError{
  66. Message: message,
  67. Status: opt.Type,
  68. Code: statusCode,
  69. })
  70. default:
  71. return NewOpenAIError(statusCode, OpenAIError{
  72. Message: message,
  73. Type: opt.Type,
  74. Code: opt.Code,
  75. })
  76. }
  77. }