Browse Source

Merge pull request #3151 from seefs001/feature/bad-responses-body-no-retry

fix(relay): skip retries for bad response body errors
Calcium-Ion 2 months ago
parent
commit
9905599d27
2 changed files with 14 additions and 0 deletions
  1. 3 0
      controller/relay.go
  2. 11 0
      setting/operation_setting/status_code_ranges.go

+ 3 - 0
controller/relay.go

@@ -341,6 +341,9 @@ func shouldRetry(c *gin.Context, openaiErr *types.NewAPIError, retryTimes int) b
 	if code < 100 || code > 599 {
 	if code < 100 || code > 599 {
 		return true
 		return true
 	}
 	}
+	if operation_setting.IsAlwaysSkipRetryCode(openaiErr.GetErrorCode()) {
+		return false
+	}
 	return operation_setting.ShouldRetryByStatusCode(code)
 	return operation_setting.ShouldRetryByStatusCode(code)
 }
 }
 
 

+ 11 - 0
setting/operation_setting/status_code_ranges.go

@@ -5,6 +5,8 @@ import (
 	"sort"
 	"sort"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
+
+	"github.com/QuantumNous/new-api/types"
 )
 )
 
 
 type StatusCodeRange struct {
 type StatusCodeRange struct {
@@ -31,6 +33,10 @@ var alwaysSkipRetryStatusCodes = map[int]struct{}{
 	524: {},
 	524: {},
 }
 }
 
 
+var alwaysSkipRetryCodes = map[types.ErrorCode]struct{}{
+	types.ErrorCodeBadResponseBody: {},
+}
+
 func AutomaticDisableStatusCodesToString() string {
 func AutomaticDisableStatusCodesToString() string {
 	return statusCodeRangesToString(AutomaticDisableStatusCodeRanges)
 	return statusCodeRangesToString(AutomaticDisableStatusCodeRanges)
 }
 }
@@ -66,6 +72,11 @@ func IsAlwaysSkipRetryStatusCode(code int) bool {
 	return exists
 	return exists
 }
 }
 
 
+func IsAlwaysSkipRetryCode(errorCode types.ErrorCode) bool {
+	_, exists := alwaysSkipRetryCodes[errorCode]
+	return exists
+}
+
 func ShouldRetryByStatusCode(code int) bool {
 func ShouldRetryByStatusCode(code int) bool {
 	if IsAlwaysSkipRetryStatusCode(code) {
 	if IsAlwaysSkipRetryStatusCode(code) {
 		return false
 		return false