| package setting |
|
|
| import ( |
| "encoding/json" |
| "fmt" |
| "math" |
| "sync" |
|
|
| "github.com/QuantumNous/new-api/common" |
| ) |
|
|
| var ModelRequestRateLimitEnabled = false |
| var ModelRequestRateLimitDurationMinutes = 1 |
| var ModelRequestRateLimitCount = 0 |
| var ModelRequestRateLimitSuccessCount = 1000 |
| var ModelRequestRateLimitGroup = map[string][2]int{} |
| var ModelRequestRateLimitMutex sync.RWMutex |
|
|
| func ModelRequestRateLimitGroup2JSONString() string { |
| ModelRequestRateLimitMutex.RLock() |
| defer ModelRequestRateLimitMutex.RUnlock() |
|
|
| jsonBytes, err := json.Marshal(ModelRequestRateLimitGroup) |
| if err != nil { |
| common.SysLog("error marshalling model ratio: " + err.Error()) |
| } |
| return string(jsonBytes) |
| } |
|
|
| func UpdateModelRequestRateLimitGroupByJSONString(jsonStr string) error { |
| ModelRequestRateLimitMutex.RLock() |
| defer ModelRequestRateLimitMutex.RUnlock() |
|
|
| ModelRequestRateLimitGroup = make(map[string][2]int) |
| return json.Unmarshal([]byte(jsonStr), &ModelRequestRateLimitGroup) |
| } |
|
|
| func GetGroupRateLimit(group string) (totalCount, successCount int, found bool) { |
| ModelRequestRateLimitMutex.RLock() |
| defer ModelRequestRateLimitMutex.RUnlock() |
|
|
| if ModelRequestRateLimitGroup == nil { |
| return 0, 0, false |
| } |
|
|
| limits, found := ModelRequestRateLimitGroup[group] |
| if !found { |
| return 0, 0, false |
| } |
| return limits[0], limits[1], true |
| } |
|
|
| func CheckModelRequestRateLimitGroup(jsonStr string) error { |
| checkModelRequestRateLimitGroup := make(map[string][2]int) |
| err := json.Unmarshal([]byte(jsonStr), &checkModelRequestRateLimitGroup) |
| if err != nil { |
| return err |
| } |
| for group, limits := range checkModelRequestRateLimitGroup { |
| if limits[0] < 0 || limits[1] < 1 { |
| return fmt.Errorf("group %s has negative rate limit values: [%d, %d]", group, limits[0], limits[1]) |
| } |
| if limits[0] > math.MaxInt32 || limits[1] > math.MaxInt32 { |
| return fmt.Errorf("group %s [%d, %d] has max rate limits value 2147483647", group, limits[0], limits[1]) |
| } |
| } |
|
|
| return nil |
| } |
|
|