63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
|
package monitor
|
||
|
|
||
|
import (
|
||
|
"github.com/songquanpeng/one-api/common/config"
|
||
|
"github.com/songquanpeng/one-api/relay/model"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func ShouldDisableChannel(err *model.Error, statusCode int) bool {
|
||
|
if !config.AutomaticDisableChannelEnabled {
|
||
|
return false
|
||
|
}
|
||
|
if err == nil {
|
||
|
return false
|
||
|
}
|
||
|
if statusCode == http.StatusUnauthorized {
|
||
|
return true
|
||
|
}
|
||
|
switch err.Type {
|
||
|
case "insufficient_quota":
|
||
|
return true
|
||
|
// https://docs.anthropic.com/claude/reference/errors
|
||
|
case "authentication_error":
|
||
|
return true
|
||
|
case "permission_error":
|
||
|
return true
|
||
|
case "forbidden":
|
||
|
return true
|
||
|
}
|
||
|
if err.Code == "invalid_api_key" || err.Code == "account_deactivated" {
|
||
|
return true
|
||
|
}
|
||
|
if strings.HasPrefix(err.Message, "Your credit balance is too low") { // anthropic
|
||
|
return true
|
||
|
} else if strings.HasPrefix(err.Message, "This organization has been disabled.") {
|
||
|
return true
|
||
|
}
|
||
|
//if strings.Contains(err.Message, "quota") {
|
||
|
// return true
|
||
|
//}
|
||
|
if strings.Contains(err.Message, "credit") {
|
||
|
return true
|
||
|
}
|
||
|
if strings.Contains(err.Message, "balance") {
|
||
|
return true
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
func ShouldEnableChannel(err error, openAIErr *model.Error) bool {
|
||
|
if !config.AutomaticEnableChannelEnabled {
|
||
|
return false
|
||
|
}
|
||
|
if err != nil {
|
||
|
return false
|
||
|
}
|
||
|
if openAIErr != nil {
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|