| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package setting
- import (
- "encoding/json"
- "fmt"
- "one-api/common"
- "sync"
- )
- 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.SysError("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])
- }
- }
- return nil
- }
|