group_ratio.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package setting
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "one-api/common"
  6. "sync"
  7. )
  8. var groupRatio = map[string]float64{
  9. "default": 1,
  10. "vip": 1,
  11. "svip": 1,
  12. }
  13. var groupRatioMutex sync.RWMutex
  14. func GetGroupRatioCopy() map[string]float64 {
  15. groupRatioMutex.RLock()
  16. defer groupRatioMutex.RUnlock()
  17. groupRatioCopy := make(map[string]float64)
  18. for k, v := range groupRatio {
  19. groupRatioCopy[k] = v
  20. }
  21. return groupRatioCopy
  22. }
  23. func ContainsGroupRatio(name string) bool {
  24. groupRatioMutex.RLock()
  25. defer groupRatioMutex.RUnlock()
  26. _, ok := groupRatio[name]
  27. return ok
  28. }
  29. func GroupRatio2JSONString() string {
  30. groupRatioMutex.RLock()
  31. defer groupRatioMutex.RUnlock()
  32. jsonBytes, err := json.Marshal(groupRatio)
  33. if err != nil {
  34. common.SysError("error marshalling model ratio: " + err.Error())
  35. }
  36. return string(jsonBytes)
  37. }
  38. func UpdateGroupRatioByJSONString(jsonStr string) error {
  39. groupRatioMutex.Lock()
  40. defer groupRatioMutex.Unlock()
  41. groupRatio = make(map[string]float64)
  42. return json.Unmarshal([]byte(jsonStr), &groupRatio)
  43. }
  44. func GetGroupRatio(name string) float64 {
  45. groupRatioMutex.RLock()
  46. defer groupRatioMutex.RUnlock()
  47. ratio, ok := groupRatio[name]
  48. if !ok {
  49. common.SysError("group ratio not found: " + name)
  50. return 1
  51. }
  52. return ratio
  53. }
  54. func CheckGroupRatio(jsonStr string) error {
  55. checkGroupRatio := make(map[string]float64)
  56. err := json.Unmarshal([]byte(jsonStr), &checkGroupRatio)
  57. if err != nil {
  58. return err
  59. }
  60. for name, ratio := range checkGroupRatio {
  61. if ratio < 0 {
  62. return errors.New("group ratio must be not less than 0: " + name)
  63. }
  64. }
  65. return nil
  66. }