group_ratio.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. var GroupGroupRatio = map[string]map[string]float64{
  15. "vip": {
  16. "edit_this": 0.9,
  17. },
  18. }
  19. func GetGroupRatioCopy() map[string]float64 {
  20. groupRatioMutex.RLock()
  21. defer groupRatioMutex.RUnlock()
  22. groupRatioCopy := make(map[string]float64)
  23. for k, v := range groupRatio {
  24. groupRatioCopy[k] = v
  25. }
  26. return groupRatioCopy
  27. }
  28. func ContainsGroupRatio(name string) bool {
  29. groupRatioMutex.RLock()
  30. defer groupRatioMutex.RUnlock()
  31. _, ok := groupRatio[name]
  32. return ok
  33. }
  34. func GroupRatio2JSONString() string {
  35. groupRatioMutex.RLock()
  36. defer groupRatioMutex.RUnlock()
  37. jsonBytes, err := json.Marshal(groupRatio)
  38. if err != nil {
  39. common.SysError("error marshalling model ratio: " + err.Error())
  40. }
  41. return string(jsonBytes)
  42. }
  43. func UpdateGroupRatioByJSONString(jsonStr string) error {
  44. groupRatioMutex.Lock()
  45. defer groupRatioMutex.Unlock()
  46. groupRatio = make(map[string]float64)
  47. return json.Unmarshal([]byte(jsonStr), &groupRatio)
  48. }
  49. func GetGroupRatio(name string) float64 {
  50. groupRatioMutex.RLock()
  51. defer groupRatioMutex.RUnlock()
  52. ratio, ok := groupRatio[name]
  53. if !ok {
  54. common.SysError("group ratio not found: " + name)
  55. return 1
  56. }
  57. return ratio
  58. }
  59. func GetGroupGroupRatio(group, name string) (float64, bool) {
  60. gp, ok := GroupGroupRatio[group]
  61. if !ok {
  62. return -1, false
  63. }
  64. ratio, ok := gp[name]
  65. if !ok {
  66. return -1, false
  67. }
  68. return ratio, true
  69. }
  70. func GroupGroupRatio2JSONString() string {
  71. jsonBytes, err := json.Marshal(GroupGroupRatio)
  72. if err != nil {
  73. common.SysError("error marshalling group-group ratio: " + err.Error())
  74. }
  75. return string(jsonBytes)
  76. }
  77. func UpdateGroupGroupRatioByJSONString(jsonStr string) error {
  78. GroupGroupRatio = make(map[string]map[string]float64)
  79. return json.Unmarshal([]byte(jsonStr), &GroupGroupRatio)
  80. }
  81. func CheckGroupRatio(jsonStr string) error {
  82. checkGroupRatio := make(map[string]float64)
  83. err := json.Unmarshal([]byte(jsonStr), &checkGroupRatio)
  84. if err != nil {
  85. return err
  86. }
  87. for name, ratio := range checkGroupRatio {
  88. if ratio < 0 {
  89. return errors.New("group ratio must be not less than 0: " + name)
  90. }
  91. }
  92. return nil
  93. }