42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package helper
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"one-api/common"
|
|
relaycommon "one-api/relay/common"
|
|
"one-api/setting"
|
|
)
|
|
|
|
type PriceData struct {
|
|
ModelPrice float64
|
|
ModelRatio float64
|
|
GroupRatio float64
|
|
UsePrice bool
|
|
ShouldPreConsumedQuota int
|
|
}
|
|
|
|
func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens int, maxTokens int) PriceData {
|
|
modelPrice, usePrice := common.GetModelPrice(info.OriginModelName, false)
|
|
groupRatio := setting.GetGroupRatio(info.Group)
|
|
var preConsumedQuota int
|
|
var modelRatio float64
|
|
if !usePrice {
|
|
preConsumedTokens := common.PreConsumedQuota
|
|
if maxTokens != 0 {
|
|
preConsumedTokens = promptTokens + maxTokens
|
|
}
|
|
modelRatio = common.GetModelRatio(info.OriginModelName)
|
|
ratio := modelRatio * groupRatio
|
|
preConsumedQuota = int(float64(preConsumedTokens) * ratio)
|
|
} else {
|
|
preConsumedQuota = int(modelPrice * common.QuotaPerUnit * groupRatio)
|
|
}
|
|
return PriceData{
|
|
ModelPrice: modelPrice,
|
|
ModelRatio: modelRatio,
|
|
GroupRatio: groupRatio,
|
|
UsePrice: usePrice,
|
|
ShouldPreConsumedQuota: preConsumedQuota,
|
|
}
|
|
}
|