fix(relay): skip retries for bad response body errors

This commit is contained in:
Seefs
2026-03-06 18:22:25 +08:00
parent 57d525869a
commit 329416d67b
2 changed files with 14 additions and 0 deletions

View File

@@ -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)
} }

View File

@@ -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