Files
new-api/model/pricing.go

82 lines
2.1 KiB
Go
Raw Normal View History

2024-05-13 23:02:35 +08:00
package model
import (
"one-api/common"
"one-api/setting/operation_setting"
2024-05-13 23:02:35 +08:00
"sync"
"time"
)
2024-06-27 19:30:17 +08:00
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"`
2024-06-27 19:30:17 +08:00
}
2024-05-13 23:02:35 +08:00
var (
2024-06-27 19:30:17 +08:00
pricingMap []Pricing
2024-05-13 23:02:35 +08:00
lastGetPricingTime time.Time
updatePricingLock sync.Mutex
)
func GetPricing() []Pricing {
2024-05-13 23:02:35 +08:00
updatePricingLock.Lock()
defer updatePricingLock.Unlock()
if time.Since(lastGetPricingTime) > time.Minute*1 || len(pricingMap) == 0 {
2024-05-15 23:56:26 +08:00
updatePricing()
2024-05-13 23:02:35 +08:00
}
//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
//}
2024-05-13 23:02:35 +08:00
return pricingMap
}
2024-05-15 23:56:26 +08:00
func updatePricing() {
2024-05-15 20:17:27 +08:00
//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
2024-05-13 23:02:35 +08:00
}
2024-05-15 20:17:27 +08:00
2024-06-27 19:30:17 +08:00
pricingMap = make([]Pricing, 0)
for model, groups := range modelGroupsMap {
2024-06-27 19:30:17 +08:00
pricing := Pricing{
ModelName: model,
EnableGroup: groups,
2024-05-13 23:02:35 +08:00
}
modelPrice, findPrice := operation_setting.GetModelPrice(model, false)
2024-05-13 23:02:35 +08:00
if findPrice {
pricing.ModelPrice = modelPrice
pricing.QuotaType = 1
} else {
modelRatio, _ := operation_setting.GetModelRatio(model)
pricing.ModelRatio = modelRatio
pricing.CompletionRatio = operation_setting.GetCompletionRatio(model)
2024-05-13 23:02:35 +08:00
pricing.QuotaType = 0
}
pricingMap = append(pricingMap, pricing)
}
lastGetPricingTime = time.Now()
}