cache_ratio.go 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package operation_setting
  2. import (
  3. "encoding/json"
  4. "one-api/common"
  5. "sync"
  6. )
  7. var defaultCacheRatio = map[string]float64{
  8. "gpt-4": 0.5,
  9. "o1": 0.5,
  10. "o1-2024-12-17": 0.5,
  11. "o1-preview-2024-09-12": 0.5,
  12. "o1-preview": 0.5,
  13. "o1-mini-2024-09-12": 0.5,
  14. "o1-mini": 0.5,
  15. "gpt-4o-2024-11-20": 0.5,
  16. "gpt-4o-2024-08-06": 0.5,
  17. "gpt-4o": 0.5,
  18. "gpt-4o-mini-2024-07-18": 0.5,
  19. "gpt-4o-mini": 0.5,
  20. "gpt-4o-realtime-preview": 0.5,
  21. "gpt-4o-mini-realtime-preview": 0.5,
  22. "deepseek-chat": 0.25,
  23. "deepseek-reasoner": 0.25,
  24. "deepseek-coder": 0.25,
  25. "claude-3-sonnet-20240229": 0.1,
  26. "claude-3-opus-20240229": 0.1,
  27. "claude-3-haiku-20240307": 0.1,
  28. "claude-3-5-haiku-20241022": 0.1,
  29. "claude-3-5-sonnet-20240620": 0.1,
  30. "claude-3-5-sonnet-20241022": 0.1,
  31. "claude-3-7-sonnet-20250219": 0.1,
  32. "claude-3-7-sonnet-20250219-thinking": 0.1,
  33. }
  34. var defaultCreateCacheRatio = map[string]float64{
  35. "claude-3-sonnet-20240229": 1.25,
  36. "claude-3-opus-20240229": 1.25,
  37. "claude-3-haiku-20240307": 1.25,
  38. "claude-3-5-haiku-20241022": 1.25,
  39. "claude-3-5-sonnet-20240620": 1.25,
  40. "claude-3-5-sonnet-20241022": 1.25,
  41. "claude-3-7-sonnet-20250219": 1.25,
  42. "claude-3-7-sonnet-20250219-thinking": 1.25,
  43. }
  44. //var defaultCreateCacheRatio = map[string]float64{}
  45. var cacheRatioMap map[string]float64
  46. var cacheRatioMapMutex sync.RWMutex
  47. // GetCacheRatioMap returns the cache ratio map
  48. func GetCacheRatioMap() map[string]float64 {
  49. cacheRatioMapMutex.Lock()
  50. defer cacheRatioMapMutex.Unlock()
  51. if cacheRatioMap == nil {
  52. cacheRatioMap = defaultCacheRatio
  53. }
  54. return cacheRatioMap
  55. }
  56. // CacheRatio2JSONString converts the cache ratio map to a JSON string
  57. func CacheRatio2JSONString() string {
  58. GetCacheRatioMap()
  59. jsonBytes, err := json.Marshal(cacheRatioMap)
  60. if err != nil {
  61. common.SysError("error marshalling cache ratio: " + err.Error())
  62. }
  63. return string(jsonBytes)
  64. }
  65. // UpdateCacheRatioByJSONString updates the cache ratio map from a JSON string
  66. func UpdateCacheRatioByJSONString(jsonStr string) error {
  67. cacheRatioMapMutex.Lock()
  68. defer cacheRatioMapMutex.Unlock()
  69. cacheRatioMap = make(map[string]float64)
  70. return json.Unmarshal([]byte(jsonStr), &cacheRatioMap)
  71. }
  72. // GetCacheRatio returns the cache ratio for a model
  73. func GetCacheRatio(name string) (float64, bool) {
  74. GetCacheRatioMap()
  75. ratio, ok := cacheRatioMap[name]
  76. if !ok {
  77. return 1, false // Default to 0.5 if not found
  78. }
  79. return ratio, true
  80. }
  81. func GetCreateCacheRatio(name string) (float64, bool) {
  82. ratio, ok := defaultCreateCacheRatio[name]
  83. if !ok {
  84. return 1.25, false // Default to 1.25 if not found
  85. }
  86. return ratio, true
  87. }