From 43f2a8ac064bb6bca28b1a03b1eec0468e129396 Mon Sep 17 00:00:00 2001 From: CaIon Date: Thu, 16 Oct 2025 21:59:21 +0800 Subject: [PATCH] feat: add temporary TASK_PRICE_PATCH configuration to environment variables --- common/init.go | 14 ++++++++++++++ constant/env.go | 3 +++ relay/relay_task.go | 32 ++++++++++++++++++++------------ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/common/init.go b/common/init.go index c3db9dd32..51b1f2138 100644 --- a/common/init.go +++ b/common/init.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" "strconv" + "strings" "time" "github.com/QuantumNous/new-api/constant" @@ -118,4 +119,17 @@ func initConstantEnv() { constant.GenerateDefaultToken = GetEnvOrDefaultBool("GENERATE_DEFAULT_TOKEN", false) // 是否启用错误日志 constant.ErrorLogEnabled = GetEnvOrDefaultBool("ERROR_LOG_ENABLED", false) + + soraPatchStr := GetEnvOrDefaultString("TASK_PRICE_PATCH", "") + if soraPatchStr != "" { + var taskPricePatches []string + soraPatches := strings.Split(soraPatchStr, ",") + for _, patch := range soraPatches { + trimmedPatch := strings.TrimSpace(patch) + if trimmedPatch != "" { + taskPricePatches = append(taskPricePatches, trimmedPatch) + } + } + constant.TaskPricePatches = taskPricePatches + } } diff --git a/constant/env.go b/constant/env.go index 8bc2f1316..09d4a2f36 100644 --- a/constant/env.go +++ b/constant/env.go @@ -13,3 +13,6 @@ var NotifyLimitCount int var NotificationLimitDurationMinute int var GenerateDefaultToken bool var ErrorLogEnabled bool + +// temporary variable for sora patch, will be removed in future +var TaskPricePatches []string diff --git a/relay/relay_task.go b/relay/relay_task.go index 7d2c8b5dc..deb38d559 100644 --- a/relay/relay_task.go +++ b/relay/relay_task.go @@ -72,10 +72,13 @@ func RelayTaskSubmit(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto. } else { ratio = modelPrice * groupRatio } - if len(info.PriceData.OtherRatios) > 0 { - for _, ra := range info.PriceData.OtherRatios { - if 1.0 != ra { - ratio *= ra + // FIXME: 临时修补,支持任务仅按次计费 + if !common.StringsContains(constant.TaskPricePatches, modelName) { + if len(info.PriceData.OtherRatios) > 0 { + for _, ra := range info.PriceData.OtherRatios { + if 1.0 != ra { + ratio *= ra + } } } } @@ -153,15 +156,20 @@ func RelayTaskSubmit(c *gin.Context, info *relaycommon.RelayInfo) (taskErr *dto. // gRatio = userGroupRatio //} logContent := fmt.Sprintf("操作 %s", info.Action) - if len(info.PriceData.OtherRatios) > 0 { - var contents []string - for key, ra := range info.PriceData.OtherRatios { - if 1.0 != ra { - contents = append(contents, fmt.Sprintf("%s: %.2f", key, ra)) + // FIXME: 临时修补,支持任务仅按次计费 + if common.StringsContains(constant.TaskPricePatches, modelName) { + logContent = fmt.Sprintf("%s,按次计费", logContent) + } else { + if len(info.PriceData.OtherRatios) > 0 { + var contents []string + for key, ra := range info.PriceData.OtherRatios { + if 1.0 != ra { + contents = append(contents, fmt.Sprintf("%s: %.2f", key, ra)) + } + } + if len(contents) > 0 { + logContent = fmt.Sprintf("%s, 计算参数:%s", logContent, strings.Join(contents, ", ")) } - } - if len(contents) > 0 { - logContent = fmt.Sprintf("%s, 计算参数:%s", logContent, strings.Join(contents, ", ")) } } other := make(map[string]interface{})