rate_limit.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package setting
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "one-api/common"
  6. "sync"
  7. )
  8. var ModelRequestRateLimitEnabled = false
  9. var ModelRequestRateLimitDurationMinutes = 1
  10. var ModelRequestRateLimitCount = 0
  11. var ModelRequestRateLimitSuccessCount = 1000
  12. var ModelRequestRateLimitGroup map[string][2]int
  13. var ModelRequestRateLimitGroupMutex sync.RWMutex
  14. func UpdateModelRequestRateLimitGroup(jsonStr string) error {
  15. ModelRequestRateLimitGroupMutex.Lock()
  16. defer ModelRequestRateLimitGroupMutex.Unlock()
  17. var newConfig map[string][2]int
  18. if jsonStr == "" || jsonStr == "{}" {
  19. ModelRequestRateLimitGroup = make(map[string][2]int)
  20. common.SysLog("Model request rate limit group config cleared")
  21. return nil
  22. }
  23. err := json.Unmarshal([]byte(jsonStr), &newConfig)
  24. if err != nil {
  25. return fmt.Errorf("failed to unmarshal ModelRequestRateLimitGroup config: %w", err)
  26. }
  27. ModelRequestRateLimitGroup = newConfig
  28. return nil
  29. }
  30. func GetGroupRateLimit(group string) (totalCount, successCount int, found bool) {
  31. ModelRequestRateLimitGroupMutex.RLock()
  32. defer ModelRequestRateLimitGroupMutex.RUnlock()
  33. if ModelRequestRateLimitGroup == nil {
  34. return 0, 0, false
  35. }
  36. limits, found := ModelRequestRateLimitGroup[group]
  37. if !found {
  38. return 0, 0, false
  39. }
  40. return limits[0], limits[1], true
  41. }