Summary • Migrated all ratio-related sources into `setting/ratio_setting/` – `model_ratio.go` (renamed from model-ratio.go) – `cache_ratio.go` – `group_ratio.go` • Changed package name to `ratio_setting` and relocated initialization (`ratio_setting.InitRatioSettings()` in main). • Updated every import & call site: – Model / cache / completion / image ratio helpers – Group ratio helpers (`GetGroupRatio*`, `ContainsGroupRatio`, `CheckGroupRatio`, etc.) – JSON-serialization & update helpers (`*Ratio2JSONString`, `Update*RatioByJSONString`) • Adjusted controllers, middleware, relay helpers, services and models to reference the new package. • Removed obsolete `setting` / `operation_setting` imports; added missing `ratio_setting` imports. • Adopted idiomatic map iteration (`for key := range m`) where value is unused. • Ran static checks to ensure clean build. This commit centralises all ratio configuration (model, cache and group) in one cohesive module, simplifying future maintenance and improving code clarity.
109 lines
3.6 KiB
Go
109 lines
3.6 KiB
Go
package ratio_setting
|
|
|
|
import (
|
|
"encoding/json"
|
|
"one-api/common"
|
|
"sync"
|
|
)
|
|
|
|
var defaultCacheRatio = map[string]float64{
|
|
"gpt-4": 0.5,
|
|
"o1": 0.5,
|
|
"o1-2024-12-17": 0.5,
|
|
"o1-preview-2024-09-12": 0.5,
|
|
"o1-preview": 0.5,
|
|
"o1-mini-2024-09-12": 0.5,
|
|
"o1-mini": 0.5,
|
|
"o3-mini": 0.5,
|
|
"o3-mini-2025-01-31": 0.5,
|
|
"gpt-4o-2024-11-20": 0.5,
|
|
"gpt-4o-2024-08-06": 0.5,
|
|
"gpt-4o": 0.5,
|
|
"gpt-4o-mini-2024-07-18": 0.5,
|
|
"gpt-4o-mini": 0.5,
|
|
"gpt-4o-realtime-preview": 0.5,
|
|
"gpt-4o-mini-realtime-preview": 0.5,
|
|
"gpt-4.5-preview": 0.5,
|
|
"gpt-4.5-preview-2025-02-27": 0.5,
|
|
"deepseek-chat": 0.25,
|
|
"deepseek-reasoner": 0.25,
|
|
"deepseek-coder": 0.25,
|
|
"claude-3-sonnet-20240229": 0.1,
|
|
"claude-3-opus-20240229": 0.1,
|
|
"claude-3-haiku-20240307": 0.1,
|
|
"claude-3-5-haiku-20241022": 0.1,
|
|
"claude-3-5-sonnet-20240620": 0.1,
|
|
"claude-3-5-sonnet-20241022": 0.1,
|
|
"claude-3-7-sonnet-20250219": 0.1,
|
|
"claude-3-7-sonnet-20250219-thinking": 0.1,
|
|
"claude-sonnet-4-20250514": 0.1,
|
|
"claude-sonnet-4-20250514-thinking": 0.1,
|
|
"claude-opus-4-20250514": 0.1,
|
|
"claude-opus-4-20250514-thinking": 0.1,
|
|
}
|
|
|
|
var defaultCreateCacheRatio = map[string]float64{
|
|
"claude-3-sonnet-20240229": 1.25,
|
|
"claude-3-opus-20240229": 1.25,
|
|
"claude-3-haiku-20240307": 1.25,
|
|
"claude-3-5-haiku-20241022": 1.25,
|
|
"claude-3-5-sonnet-20240620": 1.25,
|
|
"claude-3-5-sonnet-20241022": 1.25,
|
|
"claude-3-7-sonnet-20250219": 1.25,
|
|
"claude-3-7-sonnet-20250219-thinking": 1.25,
|
|
"claude-sonnet-4-20250514": 1.25,
|
|
"claude-sonnet-4-20250514-thinking": 1.25,
|
|
"claude-opus-4-20250514": 1.25,
|
|
"claude-opus-4-20250514-thinking": 1.25,
|
|
}
|
|
|
|
//var defaultCreateCacheRatio = map[string]float64{}
|
|
|
|
var cacheRatioMap map[string]float64
|
|
var cacheRatioMapMutex sync.RWMutex
|
|
|
|
// GetCacheRatioMap returns the cache ratio map
|
|
func GetCacheRatioMap() map[string]float64 {
|
|
cacheRatioMapMutex.RLock()
|
|
defer cacheRatioMapMutex.RUnlock()
|
|
return cacheRatioMap
|
|
}
|
|
|
|
// CacheRatio2JSONString converts the cache ratio map to a JSON string
|
|
func CacheRatio2JSONString() string {
|
|
cacheRatioMapMutex.RLock()
|
|
defer cacheRatioMapMutex.RUnlock()
|
|
jsonBytes, err := json.Marshal(cacheRatioMap)
|
|
if err != nil {
|
|
common.SysError("error marshalling cache ratio: " + err.Error())
|
|
}
|
|
return string(jsonBytes)
|
|
}
|
|
|
|
// UpdateCacheRatioByJSONString updates the cache ratio map from a JSON string
|
|
func UpdateCacheRatioByJSONString(jsonStr string) error {
|
|
cacheRatioMapMutex.Lock()
|
|
defer cacheRatioMapMutex.Unlock()
|
|
cacheRatioMap = make(map[string]float64)
|
|
return json.Unmarshal([]byte(jsonStr), &cacheRatioMap)
|
|
}
|
|
|
|
// GetCacheRatio returns the cache ratio for a model
|
|
func GetCacheRatio(name string) (float64, bool) {
|
|
cacheRatioMapMutex.RLock()
|
|
defer cacheRatioMapMutex.RUnlock()
|
|
ratio, ok := cacheRatioMap[name]
|
|
if !ok {
|
|
return 1, false // Default to 1 if not found
|
|
}
|
|
return ratio, true
|
|
}
|
|
|
|
func GetCreateCacheRatio(name string) (float64, bool) {
|
|
ratio, ok := defaultCreateCacheRatio[name]
|
|
if !ok {
|
|
return 1.25, false // Default to 1.25 if not found
|
|
}
|
|
return ratio, true
|
|
}
|