mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-18 00:16:37 +08:00
80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
package model
|
|
|
|
import (
|
|
"one-api/common"
|
|
"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 := common.GetModelPrice(model, false)
|
|
if findPrice {
|
|
pricing.ModelPrice = modelPrice
|
|
pricing.QuotaType = 1
|
|
} else {
|
|
pricing.ModelRatio = common.GetModelRatio(model)
|
|
pricing.CompletionRatio = common.GetCompletionRatio(model)
|
|
pricing.QuotaType = 0
|
|
}
|
|
pricingMap = append(pricingMap, pricing)
|
|
}
|
|
lastGetPricingTime = time.Now()
|
|
}
|