diff --git a/model/main.go b/model/main.go index e2f9aecb..013beacd 100644 --- a/model/main.go +++ b/model/main.go @@ -260,7 +260,6 @@ func migrateDB() error { func migrateDBFast() error { var wg sync.WaitGroup - errChan := make(chan error, 12) // Buffer size matches number of migrations migrations := []struct { model interface{} @@ -279,6 +278,8 @@ func migrateDBFast() error { {&Task{}, "Task"}, {&Setup{}, "Setup"}, } + // 动态计算migration数量,确保errChan缓冲区足够大 + errChan := make(chan error, len(migrations)) for _, m := range migrations { wg.Add(1) diff --git a/model/pricing.go b/model/pricing.go index 0c0216f1..a280b524 100644 --- a/model/pricing.go +++ b/model/pricing.go @@ -116,7 +116,7 @@ func updatePricing() { pricing.ModelPrice = modelPrice pricing.QuotaType = 1 } else { - modelRatio, _ := ratio_setting.GetModelRatio(model) + modelRatio, _, _ := ratio_setting.GetModelRatio(model) pricing.ModelRatio = modelRatio pricing.CompletionRatio = ratio_setting.GetCompletionRatio(model) pricing.QuotaType = 0 diff --git a/relay/helper/price.go b/relay/helper/price.go index 9995db2f..e80578e5 100644 --- a/relay/helper/price.go +++ b/relay/helper/price.go @@ -79,14 +79,15 @@ func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens preConsumedTokens = promptTokens + maxTokens } var success bool - modelRatio, success = ratio_setting.GetModelRatio(info.OriginModelName) + var matchName string + modelRatio, success, matchName = ratio_setting.GetModelRatio(info.OriginModelName) if !success { acceptUnsetRatio := false if info.UserSetting.AcceptUnsetRatioModel { acceptUnsetRatio = true } if !acceptUnsetRatio { - return PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请联系管理员设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", info.OriginModelName, info.OriginModelName) + return 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) @@ -152,7 +153,7 @@ func ContainPriceOrRatio(modelName string) bool { if ok { return true } - _, ok = ratio_setting.GetModelRatio(modelName) + _, ok, _ = ratio_setting.GetModelRatio(modelName) if ok { return true } diff --git a/service/quota.go b/service/quota.go index 27546ed4..0f618402 100644 --- a/service/quota.go +++ b/service/quota.go @@ -96,7 +96,7 @@ func PreWssConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usag audioInputTokens := usage.InputTokenDetails.AudioTokens audioOutTokens := usage.OutputTokenDetails.AudioTokens groupRatio := ratio_setting.GetGroupRatio(relayInfo.UsingGroup) - modelRatio, _ := ratio_setting.GetModelRatio(modelName) + modelRatio, _, _ := ratio_setting.GetModelRatio(modelName) autoGroup, exists := ctx.Get("auto_group") if exists { diff --git a/setting/ratio_setting/model_ratio.go b/setting/ratio_setting/model_ratio.go index 033b07a0..8a1d6aae 100644 --- a/setting/ratio_setting/model_ratio.go +++ b/setting/ratio_setting/model_ratio.go @@ -369,7 +369,7 @@ func handleThinkingBudgetModel(name, prefix, wildcard string) string { return name } -func GetModelRatio(name string) (float64, bool) { +func GetModelRatio(name string) (float64, bool, string) { modelRatioMapMutex.RLock() defer modelRatioMapMutex.RUnlock() @@ -380,9 +380,9 @@ func GetModelRatio(name string) (float64, bool) { } ratio, ok := modelRatioMap[name] if !ok { - return 37.5, operation_setting.SelfUseModeEnabled + return 37.5, operation_setting.SelfUseModeEnabled, name } - return ratio, true + return ratio, true, name } func DefaultModelRatio2JSONString() string {