group_ratio.go 1.2 KB

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