errors.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. o(&opt)
  48. }
  49. switch m {
  50. case mode.Anthropic:
  51. return NewAnthropicError(statusCode, AnthropicError{
  52. Message: message,
  53. Type: opt.Type,
  54. })
  55. case mode.VideoGenerationsJobs,
  56. mode.VideoGenerationsGetJobs,
  57. mode.VideoGenerationsContent:
  58. return NewOpenAIVideoError(statusCode, OpenAIVideoError{
  59. Detail: message,
  60. })
  61. default:
  62. return NewOpenAIError(statusCode, OpenAIError{
  63. Message: message,
  64. Type: opt.Type,
  65. Code: opt.Code,
  66. })
  67. }
  68. }