This commit refactors the logging mechanism across the application by replacing direct logger calls with a centralized logging approach using the `common` package. Key changes include: - Replaced instances of `logger.SysLog` and `logger.FatalLog` with `common.SysLog` and `common.FatalLog` for consistent logging practices. - Updated resource initialization error handling to utilize the new logging structure, enhancing maintainability and readability. - Minor adjustments to improve code clarity and organization throughout various modules. This change aims to streamline logging and improve the overall architecture of the codebase.
138 lines
4.3 KiB
Go
138 lines
4.3 KiB
Go
package helper
|
||
|
||
import (
|
||
"fmt"
|
||
"one-api/common"
|
||
relaycommon "one-api/relay/common"
|
||
"one-api/setting/ratio_setting"
|
||
"one-api/types"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// HandleGroupRatio checks for "auto_group" in the context and updates the group ratio and relayInfo.UsingGroup if present
|
||
func HandleGroupRatio(ctx *gin.Context, relayInfo *relaycommon.RelayInfo) types.GroupRatioInfo {
|
||
groupRatioInfo := types.GroupRatioInfo{
|
||
GroupRatio: 1.0, // default ratio
|
||
GroupSpecialRatio: -1,
|
||
}
|
||
|
||
// check auto group
|
||
autoGroup, exists := ctx.Get("auto_group")
|
||
if exists {
|
||
if common.DebugEnabled {
|
||
println(fmt.Sprintf("final group: %s", autoGroup))
|
||
}
|
||
relayInfo.UsingGroup = autoGroup.(string)
|
||
}
|
||
|
||
// check user group special ratio
|
||
userGroupRatio, ok := ratio_setting.GetGroupGroupRatio(relayInfo.UserGroup, relayInfo.UsingGroup)
|
||
if ok {
|
||
// user group special ratio
|
||
groupRatioInfo.GroupSpecialRatio = userGroupRatio
|
||
groupRatioInfo.GroupRatio = userGroupRatio
|
||
groupRatioInfo.HasSpecialRatio = true
|
||
} else {
|
||
// normal group ratio
|
||
groupRatioInfo.GroupRatio = ratio_setting.GetGroupRatio(relayInfo.UsingGroup)
|
||
}
|
||
|
||
return groupRatioInfo
|
||
}
|
||
|
||
func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens int, meta *types.TokenCountMeta) (types.PriceData, error) {
|
||
modelPrice, usePrice := ratio_setting.GetModelPrice(info.OriginModelName, false)
|
||
|
||
groupRatioInfo := HandleGroupRatio(c, info)
|
||
|
||
var preConsumedQuota int
|
||
var modelRatio float64
|
||
var completionRatio float64
|
||
var cacheRatio float64
|
||
var imageRatio float64
|
||
var cacheCreationRatio float64
|
||
if !usePrice {
|
||
preConsumedTokens := common.Max(promptTokens, common.PreConsumedQuota)
|
||
if meta.MaxTokens != 0 {
|
||
preConsumedTokens += meta.MaxTokens
|
||
}
|
||
var success bool
|
||
var matchName string
|
||
modelRatio, success, matchName = ratio_setting.GetModelRatio(info.OriginModelName)
|
||
if !success {
|
||
acceptUnsetRatio := false
|
||
if info.UserSetting.AcceptUnsetRatioModel {
|
||
acceptUnsetRatio = true
|
||
}
|
||
if !acceptUnsetRatio {
|
||
return types.PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请联系管理员设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", matchName, matchName)
|
||
}
|
||
}
|
||
completionRatio = ratio_setting.GetCompletionRatio(info.OriginModelName)
|
||
cacheRatio, _ = ratio_setting.GetCacheRatio(info.OriginModelName)
|
||
cacheCreationRatio, _ = ratio_setting.GetCreateCacheRatio(info.OriginModelName)
|
||
imageRatio, _ = ratio_setting.GetImageRatio(info.OriginModelName)
|
||
ratio := modelRatio * groupRatioInfo.GroupRatio
|
||
preConsumedQuota = int(float64(preConsumedTokens) * ratio)
|
||
} else {
|
||
if meta.ImagePriceRatio != 0 {
|
||
modelPrice = modelPrice * meta.ImagePriceRatio
|
||
}
|
||
preConsumedQuota = int(modelPrice * common.QuotaPerUnit * groupRatioInfo.GroupRatio)
|
||
}
|
||
|
||
priceData := types.PriceData{
|
||
ModelPrice: modelPrice,
|
||
ModelRatio: modelRatio,
|
||
CompletionRatio: completionRatio,
|
||
GroupRatioInfo: groupRatioInfo,
|
||
UsePrice: usePrice,
|
||
CacheRatio: cacheRatio,
|
||
ImageRatio: imageRatio,
|
||
CacheCreationRatio: cacheCreationRatio,
|
||
ShouldPreConsumedQuota: preConsumedQuota,
|
||
}
|
||
|
||
if common.DebugEnabled {
|
||
println(fmt.Sprintf("model_price_helper result: %s", priceData.ToSetting()))
|
||
}
|
||
info.PriceData = priceData
|
||
return priceData, nil
|
||
}
|
||
|
||
// ModelPriceHelperPerCall 按次计费的 PriceHelper (MJ、Task)
|
||
func ModelPriceHelperPerCall(c *gin.Context, info *relaycommon.RelayInfo) types.PerCallPriceData {
|
||
groupRatioInfo := HandleGroupRatio(c, info)
|
||
|
||
modelPrice, success := ratio_setting.GetModelPrice(info.OriginModelName, true)
|
||
// 如果没有配置价格,则使用默认价格
|
||
if !success {
|
||
defaultPrice, ok := ratio_setting.GetDefaultModelRatioMap()[info.OriginModelName]
|
||
if !ok {
|
||
modelPrice = 0.1
|
||
} else {
|
||
modelPrice = defaultPrice
|
||
}
|
||
}
|
||
quota := int(modelPrice * common.QuotaPerUnit * groupRatioInfo.GroupRatio)
|
||
priceData := types.PerCallPriceData{
|
||
ModelPrice: modelPrice,
|
||
Quota: quota,
|
||
GroupRatioInfo: groupRatioInfo,
|
||
}
|
||
return priceData
|
||
}
|
||
|
||
func ContainPriceOrRatio(modelName string) bool {
|
||
_, ok := ratio_setting.GetModelPrice(modelName, false)
|
||
if ok {
|
||
return true
|
||
}
|
||
_, ok, _ = ratio_setting.GetModelRatio(modelName)
|
||
if ok {
|
||
return true
|
||
}
|
||
return false
|
||
}
|