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.
82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package model
|
|
|
|
import (
|
|
"one-api/common"
|
|
"one-api/setting/ratio_setting"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type Pricing struct {
|
|
ModelName string `json:"model_name"`
|
|
QuotaType int `json:"quota_type"`
|
|
ModelRatio float64 `json:"model_ratio"`
|
|
ModelPrice float64 `json:"model_price"`
|
|
OwnerBy string `json:"owner_by"`
|
|
CompletionRatio float64 `json:"completion_ratio"`
|
|
EnableGroup []string `json:"enable_groups,omitempty"`
|
|
}
|
|
|
|
var (
|
|
pricingMap []Pricing
|
|
lastGetPricingTime time.Time
|
|
updatePricingLock sync.Mutex
|
|
)
|
|
|
|
func GetPricing() []Pricing {
|
|
updatePricingLock.Lock()
|
|
defer updatePricingLock.Unlock()
|
|
|
|
if time.Since(lastGetPricingTime) > time.Minute*1 || len(pricingMap) == 0 {
|
|
updatePricing()
|
|
}
|
|
//if group != "" {
|
|
// userPricingMap := make([]Pricing, 0)
|
|
// models := GetGroupModels(group)
|
|
// for _, pricing := range pricingMap {
|
|
// if !common.StringsContains(models, pricing.ModelName) {
|
|
// pricing.Available = false
|
|
// }
|
|
// userPricingMap = append(userPricingMap, pricing)
|
|
// }
|
|
// return userPricingMap
|
|
//}
|
|
return pricingMap
|
|
}
|
|
|
|
func updatePricing() {
|
|
//modelRatios := common.GetModelRatios()
|
|
enableAbilities := GetAllEnableAbilities()
|
|
modelGroupsMap := make(map[string][]string)
|
|
for _, ability := range enableAbilities {
|
|
groups := modelGroupsMap[ability.Model]
|
|
if groups == nil {
|
|
groups = make([]string, 0)
|
|
}
|
|
if !common.StringsContains(groups, ability.Group) {
|
|
groups = append(groups, ability.Group)
|
|
}
|
|
modelGroupsMap[ability.Model] = groups
|
|
}
|
|
|
|
pricingMap = make([]Pricing, 0)
|
|
for model, groups := range modelGroupsMap {
|
|
pricing := Pricing{
|
|
ModelName: model,
|
|
EnableGroup: groups,
|
|
}
|
|
modelPrice, findPrice := ratio_setting.GetModelPrice(model, false)
|
|
if findPrice {
|
|
pricing.ModelPrice = modelPrice
|
|
pricing.QuotaType = 1
|
|
} else {
|
|
modelRatio, _ := ratio_setting.GetModelRatio(model)
|
|
pricing.ModelRatio = modelRatio
|
|
pricing.CompletionRatio = ratio_setting.GetCompletionRatio(model)
|
|
pricing.QuotaType = 0
|
|
}
|
|
pricingMap = append(pricingMap, pricing)
|
|
}
|
|
lastGetPricingTime = time.Now()
|
|
}
|