refactor: Improve quota calculation precision using floating-point arithmetic

This commit is contained in:
1808837298@qq.com
2025-03-08 16:44:08 +08:00
parent 1f4ebddcfa
commit bb848b2fe0
2 changed files with 16 additions and 14 deletions

View File

@@ -320,19 +320,20 @@ func postConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo,
groupRatio := priceData.GroupRatio
modelPrice := priceData.ModelPrice
quota := 0
quotaCalculate := 0.0
if !priceData.UsePrice {
quota = (promptTokens - cacheTokens) + int(math.Round(float64(cacheTokens)*cacheRatio))
quota += int(math.Round(float64(completionTokens) * completionRatio))
quota = int(math.Round(float64(quota) * ratio))
if ratio != 0 && quota <= 0 {
quota = 1
quotaCalculate = float64(promptTokens-cacheTokens) + float64(cacheTokens)*cacheRatio
quotaCalculate += float64(completionTokens) * completionRatio
quotaCalculate = quotaCalculate * ratio
if ratio != 0 && quotaCalculate <= 0 {
quotaCalculate = 1
}
} else {
quota = int(modelPrice * common.QuotaPerUnit * groupRatio)
quotaCalculate = modelPrice * common.QuotaPerUnit * groupRatio
}
quota := int(quotaCalculate)
totalTokens := promptTokens + completionTokens
var logContent string
if !priceData.UsePrice {
logContent = fmt.Sprintf("模型倍率 %.2f,补全倍率 %.2f,分组倍率 %.2f", modelRatio, completionRatio, groupRatio)