fix: auto ban

This commit is contained in:
1808837298@qq.com 2024-06-18 11:03:24 +08:00
parent e3f66807ee
commit 5abb0a9c4e
3 changed files with 18 additions and 10 deletions

View File

@ -219,7 +219,12 @@ func testAllChannels(notify bool) error {
if channel.AutoBan != nil && *channel.AutoBan == 0 { if channel.AutoBan != nil && *channel.AutoBan == 0 {
ban = false ban = false
} }
if isChannelEnabled && service.ShouldDisableChannel(openaiErr, -1) && ban { openAiErrWithStatus := dto.OpenAIErrorWithStatusCode{
StatusCode: -1,
Error: *openaiErr,
LocalError: false,
}
if isChannelEnabled && service.ShouldDisableChannel(&openAiErrWithStatus) && ban {
service.DisableChannel(channel.Id, channel.Name, err.Error()) service.DisableChannel(channel.Id, channel.Name, err.Error())
} }
if !isChannelEnabled && service.ShouldEnableChannel(err, openaiErr, channel.Status) { if !isChannelEnabled && service.ShouldEnableChannel(err, openaiErr, channel.Status) {

View File

@ -128,7 +128,7 @@ func shouldRetry(c *gin.Context, channelId int, openaiErr *dto.OpenAIErrorWithSt
func processChannelError(c *gin.Context, channelId int, err *dto.OpenAIErrorWithStatusCode) { func processChannelError(c *gin.Context, channelId int, err *dto.OpenAIErrorWithStatusCode) {
autoBan := c.GetBool("auto_ban") autoBan := c.GetBool("auto_ban")
common.LogError(c.Request.Context(), fmt.Sprintf("relay error (channel #%d, status code: %d): %s", channelId, err.StatusCode, err.Error.Message)) common.LogError(c.Request.Context(), fmt.Sprintf("relay error (channel #%d, status code: %d): %s", channelId, err.StatusCode, err.Error.Message))
if service.ShouldDisableChannel(&err.Error, err.StatusCode) && autoBan { if service.ShouldDisableChannel(err) && autoBan {
channelName := c.GetString("channel_name") channelName := c.GetString("channel_name")
service.DisableChannel(channelId, channelName, err.Error.Message) service.DisableChannel(channelId, channelName, err.Error.Message)
} }

View File

@ -24,17 +24,20 @@ func EnableChannel(channelId int, channelName string) {
notifyRootUser(subject, content) notifyRootUser(subject, content)
} }
func ShouldDisableChannel(err *relaymodel.OpenAIError, statusCode int) bool { func ShouldDisableChannel(err *relaymodel.OpenAIErrorWithStatusCode) bool {
if !common.AutomaticDisableChannelEnabled { if !common.AutomaticDisableChannelEnabled {
return false return false
} }
if err == nil { if err == nil {
return false return false
} }
if statusCode == http.StatusUnauthorized || statusCode == http.StatusForbidden { if err.LocalError {
return false
}
if err.StatusCode == http.StatusUnauthorized || err.StatusCode == http.StatusForbidden {
return true return true
} }
switch err.Code { switch err.Error.Code {
case "invalid_api_key": case "invalid_api_key":
return true return true
case "account_deactivated": case "account_deactivated":
@ -42,7 +45,7 @@ func ShouldDisableChannel(err *relaymodel.OpenAIError, statusCode int) bool {
case "billing_not_active": case "billing_not_active":
return true return true
} }
switch err.Type { switch err.Error.Type {
case "insufficient_quota": case "insufficient_quota":
return true return true
// https://docs.anthropic.com/claude/reference/errors // https://docs.anthropic.com/claude/reference/errors
@ -53,13 +56,13 @@ func ShouldDisableChannel(err *relaymodel.OpenAIError, statusCode int) bool {
case "forbidden": case "forbidden":
return true return true
} }
if strings.HasPrefix(err.Message, "Your credit balance is too low") { // anthropic if strings.HasPrefix(err.Error.Message, "Your credit balance is too low") { // anthropic
return true return true
} else if strings.HasPrefix(err.Message, "This organization has been disabled.") { } else if strings.HasPrefix(err.Error.Message, "This organization has been disabled.") {
return true return true
} else if strings.HasPrefix(err.Message, "You exceeded your current quota") { } else if strings.HasPrefix(err.Error.Message, "You exceeded your current quota") {
return true return true
} else if strings.HasPrefix(err.Message, "Permission denied") { } else if strings.HasPrefix(err.Error.Message, "Permission denied") {
return true return true
} }
return false return false