From 3a2138ba61ce733fc781cef4f982fcb8dd4f1089 Mon Sep 17 00:00:00 2001 From: CaIon Date: Fri, 24 Apr 2026 16:39:12 +0800 Subject: [PATCH] refactor: rename and relocate HasModelBillingConfig function for clarity --- controller/model.go | 5 +++-- model/pricing.go | 14 -------------- relay/gemini_handler.go | 2 +- relay/helper/price.go | 15 +++++++++++++-- setting/ratio_setting/model_ratio_test.go | 22 ---------------------- 5 files changed, 17 insertions(+), 41 deletions(-) delete mode 100644 setting/ratio_setting/model_ratio_test.go diff --git a/controller/model.go b/controller/model.go index f2237955..4dbd4583 100644 --- a/controller/model.go +++ b/controller/model.go @@ -15,6 +15,7 @@ import ( "github.com/QuantumNous/new-api/relay/channel/minimax" "github.com/QuantumNous/new-api/relay/channel/moonshot" relaycommon "github.com/QuantumNous/new-api/relay/common" + "github.com/QuantumNous/new-api/relay/helper" "github.com/QuantumNous/new-api/service" "github.com/QuantumNous/new-api/setting/operation_setting" "github.com/QuantumNous/new-api/types" @@ -133,7 +134,7 @@ func ListModels(c *gin.Context, modelType int) { } for allowModel, _ := range tokenModelLimit { if !acceptUnsetRatioModel { - if !model.HasModelBillingConfig(allowModel) { + if !helper.HasModelBillingConfig(allowModel) { continue } } @@ -180,7 +181,7 @@ func ListModels(c *gin.Context, modelType int) { } for _, modelName := range models { if !acceptUnsetRatioModel { - if !model.HasModelBillingConfig(modelName) { + if !helper.HasModelBillingConfig(modelName) { continue } } diff --git a/model/pricing.go b/model/pricing.go index fe927585..b9574a38 100644 --- a/model/pricing.go +++ b/model/pricing.go @@ -86,20 +86,6 @@ func InvalidatePricingCache() { lastGetPricingTime = time.Time{} } -func HasModelBillingConfig(modelName string) bool { - if _, ok := ratio_setting.GetModelPrice(modelName, false); ok { - return true - } - if _, ok, _ := ratio_setting.GetModelRatio(modelName); ok { - return true - } - if billing_setting.GetBillingMode(modelName) != billing_setting.BillingModeTieredExpr { - return false - } - expr, ok := billing_setting.GetBillingExpr(modelName) - return ok && strings.TrimSpace(expr) != "" -} - // GetVendors 返回当前定价接口使用到的供应商信息 func GetVendors() []PricingVendor { if time.Since(lastGetPricingTime) > time.Minute*1 || len(pricingMap) == 0 { diff --git a/relay/gemini_handler.go b/relay/gemini_handler.go index e663a28b..3b4bafe2 100644 --- a/relay/gemini_handler.go +++ b/relay/gemini_handler.go @@ -77,7 +77,7 @@ func GeminiHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *typ if !strings.Contains(info.OriginModelName, "-nothinking") { // try to get no thinking model price noThinkingModelName := info.OriginModelName + "-nothinking" - containPrice := helper.ContainPriceOrRatio(noThinkingModelName) + containPrice := helper.HasModelBillingConfig(noThinkingModelName) if containPrice { info.OriginModelName = noThinkingModelName info.UpstreamModelName = noThinkingModelName diff --git a/relay/helper/price.go b/relay/helper/price.go index b4f8e662..a0783252 100644 --- a/relay/helper/price.go +++ b/relay/helper/price.go @@ -2,6 +2,7 @@ package helper import ( "fmt" + "strings" "github.com/QuantumNous/new-api/common" "github.com/QuantumNous/new-api/logger" @@ -223,8 +224,18 @@ func ModelPriceHelperPerCall(c *gin.Context, info *relaycommon.RelayInfo) (types return priceData, nil } -func ContainPriceOrRatio(modelName string) bool { - return model.HasModelBillingConfig(modelName) +func HasModelBillingConfig(modelName string) bool { + if _, ok := ratio_setting.GetModelPrice(modelName, false); ok { + return true + } + if _, ok, _ := ratio_setting.GetModelRatio(modelName); ok { + return true + } + if billing_setting.GetBillingMode(modelName) != billing_setting.BillingModeTieredExpr { + return false + } + expr, ok := billing_setting.GetBillingExpr(modelName) + return ok && strings.TrimSpace(expr) != "" } func modelPriceHelperTiered(c *gin.Context, info *relaycommon.RelayInfo, promptTokens int, meta *types.TokenCountMeta, groupRatioInfo types.GroupRatioInfo) (types.PriceData, error) { diff --git a/setting/ratio_setting/model_ratio_test.go b/setting/ratio_setting/model_ratio_test.go deleted file mode 100644 index 0b7912f8..00000000 --- a/setting/ratio_setting/model_ratio_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package ratio_setting - -import "testing" - -func TestGetCompletionRatioInfoGPT55UsesOfficialOutputMultiplier(t *testing.T) { - info := GetCompletionRatioInfo("gpt-5.5") - - if info.Ratio != 6 { - t.Fatalf("gpt-5.5 completion ratio = %v, want 6", info.Ratio) - } - if !info.Locked { - t.Fatal("gpt-5.5 completion ratio should be locked to the official multiplier") - } -} - -func TestGetCompletionRatioGPT55DatedVariant(t *testing.T) { - got := GetCompletionRatio("gpt-5.5-2026-04-24") - - if got != 6 { - t.Fatalf("gpt-5.5 dated variant completion ratio = %v, want 6", got) - } -}