diff --git a/controller/model.go b/controller/model.go index a1aa84259..c2409fc00 100644 --- a/controller/model.go +++ b/controller/model.go @@ -16,6 +16,8 @@ import ( "github.com/QuantumNous/new-api/relay/channel/moonshot" relaycommon "github.com/QuantumNous/new-api/relay/common" "github.com/QuantumNous/new-api/service" + "github.com/QuantumNous/new-api/setting/operation_setting" + "github.com/QuantumNous/new-api/setting/ratio_setting" "github.com/gin-gonic/gin" "github.com/samber/lo" ) @@ -109,6 +111,17 @@ func init() { func ListModels(c *gin.Context, modelType int) { userOpenAiModels := make([]dto.OpenAIModels, 0) + acceptUnsetRatioModel := operation_setting.SelfUseModeEnabled + if !acceptUnsetRatioModel { + userId := c.GetInt("id") + if userId > 0 { + userSettings, _ := model.GetUserSetting(userId, false) + if userSettings.AcceptUnsetRatioModel { + acceptUnsetRatioModel = true + } + } + } + modelLimitEnable := common.GetContextKeyBool(c, constant.ContextKeyTokenModelLimitEnabled) if modelLimitEnable { s, ok := common.GetContextKey(c, constant.ContextKeyTokenModelLimit) @@ -119,6 +132,12 @@ func ListModels(c *gin.Context, modelType int) { tokenModelLimit = map[string]bool{} } for allowModel, _ := range tokenModelLimit { + if !acceptUnsetRatioModel { + _, _, exist := ratio_setting.GetModelRatioOrPrice(allowModel) + if !exist { + continue + } + } if oaiModel, ok := openAIModelsMap[allowModel]; ok { oaiModel.SupportedEndpointTypes = model.GetModelSupportEndpointTypes(allowModel) userOpenAiModels = append(userOpenAiModels, oaiModel) @@ -161,6 +180,12 @@ func ListModels(c *gin.Context, modelType int) { models = model.GetGroupEnabledModels(group) } for _, modelName := range models { + if !acceptUnsetRatioModel { + _, _, exist := ratio_setting.GetModelRatioOrPrice(modelName) + if !exist { + continue + } + } if oaiModel, ok := openAIModelsMap[modelName]; ok { oaiModel.SupportedEndpointTypes = model.GetModelSupportEndpointTypes(modelName) userOpenAiModels = append(userOpenAiModels, oaiModel) @@ -175,6 +200,7 @@ func ListModels(c *gin.Context, modelType int) { } } } + switch modelType { case constant.ChannelTypeAnthropic: useranthropicModels := make([]dto.AnthropicModel, len(userOpenAiModels)) diff --git a/setting/ratio_setting/model_ratio.go b/setting/ratio_setting/model_ratio.go index 416822393..30b857cb2 100644 --- a/setting/ratio_setting/model_ratio.go +++ b/setting/ratio_setting/model_ratio.go @@ -823,3 +823,16 @@ func FormatMatchingModelName(name string) string { } return name } + +// result: 倍率or价格, usePrice, exist +func GetModelRatioOrPrice(model string) (float64, bool, bool) { // price or ratio + price, usePrice := GetModelPrice(model, false) + if usePrice { + return price, true, true + } + modelRatio, success, _ := GetModelRatio(model) + if success { + return modelRatio, false, true + } + return 37.5, false, false +}