diff --git a/controller/relay.go b/controller/relay.go index c3de5b58a..10dfd502f 100644 --- a/controller/relay.go +++ b/controller/relay.go @@ -341,6 +341,9 @@ func shouldRetry(c *gin.Context, openaiErr *types.NewAPIError, retryTimes int) b if code < 100 || code > 599 { return true } + if operation_setting.IsAlwaysSkipRetryCode(openaiErr.GetErrorCode()) { + return false + } return operation_setting.ShouldRetryByStatusCode(code) } diff --git a/setting/operation_setting/status_code_ranges.go b/setting/operation_setting/status_code_ranges.go index 7e3bc847a..14cfacad7 100644 --- a/setting/operation_setting/status_code_ranges.go +++ b/setting/operation_setting/status_code_ranges.go @@ -5,6 +5,8 @@ import ( "sort" "strconv" "strings" + + "github.com/QuantumNous/new-api/types" ) type StatusCodeRange struct { @@ -31,6 +33,10 @@ var alwaysSkipRetryStatusCodes = map[int]struct{}{ 524: {}, } +var alwaysSkipRetryCodes = map[types.ErrorCode]struct{}{ + types.ErrorCodeBadResponseBody: {}, +} + func AutomaticDisableStatusCodesToString() string { return statusCodeRangesToString(AutomaticDisableStatusCodeRanges) } @@ -66,6 +72,11 @@ func IsAlwaysSkipRetryStatusCode(code int) bool { return exists } +func IsAlwaysSkipRetryCode(errorCode types.ErrorCode) bool { + _, exists := alwaysSkipRetryCodes[errorCode] + return exists +} + func ShouldRetryByStatusCode(code int) bool { if IsAlwaysSkipRetryStatusCode(code) { return false