From b3c39832d3c7f785a4c761eb15512c2019110b7e Mon Sep 17 00:00:00 2001 From: wood chen Date: Thu, 1 May 2025 06:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=89=E5=85=A8=E5=80=8D?= =?UTF-8?q?=E7=8E=87=E8=AE=A1=E7=AE=97=E5=87=BD=E6=95=B0=E4=BB=A5=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E9=99=A4=E4=BB=A5=E9=9B=B6=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BB=B7=E6=A0=BC=E5=80=8D=E7=8E=87?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=9A=84=E5=81=A5=E5=A3=AE=E6=80=A7=E5=92=8C?= =?UTF-8?q?=E5=8F=AF=E7=BB=B4=E6=8A=A4=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/handlers/one_hub/price_rates.go | 129 ++++++++++++++++-------- 1 file changed, 89 insertions(+), 40 deletions(-) diff --git a/backend/handlers/one_hub/price_rates.go b/backend/handlers/one_hub/price_rates.go index feed783..5cd7ae1 100644 --- a/backend/handlers/one_hub/price_rates.go +++ b/backend/handlers/one_hub/price_rates.go @@ -49,6 +49,15 @@ var extraRelativeToInput = map[string]bool{ "output_image_tokens": false, } +// 计算安全倍率,避免除以零 +func calculateSafeRatio(value, baseRate float64) float64 { + // 如果基准率为0或接近0,返回1作为默认倍率 + if baseRate < 0.0000001 { + return 1.0 // 如果基准率接近0,返回1作为默认倍率 + } + return value / baseRate +} + // GetPriceRates 获取价格倍率 func GetPriceRates(c *gin.Context) { cacheKey := "one_hub_price_rates" @@ -109,10 +118,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputAudioTokens/2, 4) / baseRate + normalizedValue := round(*price.InputAudioTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputAudioTokens = &rate } else { - rate := round(*price.InputAudioTokens/14, 4) / baseRate + normalizedValue := round(*price.InputAudioTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputAudioTokens = &rate } } @@ -126,10 +137,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputAudioTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputAudioTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputAudioTokens = &rate } else { - rate := round(*price.OutputAudioTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputAudioTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputAudioTokens = &rate } } @@ -143,10 +156,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedTokens = &rate } else { - rate := round(*price.CachedTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedTokens = &rate } } @@ -160,10 +175,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedReadTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedReadTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedReadTokens = &rate } else { - rate := round(*price.CachedReadTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedReadTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedReadTokens = &rate } } @@ -177,10 +194,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedWriteTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedWriteTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedWriteTokens = &rate } else { - rate := round(*price.CachedWriteTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedWriteTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedWriteTokens = &rate } } @@ -194,10 +213,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.ReasoningTokens/2, 4) / baseRate + normalizedValue := round(*price.ReasoningTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.ReasoningTokens = &rate } else { - rate := round(*price.ReasoningTokens/14, 4) / baseRate + normalizedValue := round(*price.ReasoningTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.ReasoningTokens = &rate } } @@ -211,10 +232,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputTextTokens/2, 4) / baseRate + normalizedValue := round(*price.InputTextTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputTextTokens = &rate } else { - rate := round(*price.InputTextTokens/14, 4) / baseRate + normalizedValue := round(*price.InputTextTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputTextTokens = &rate } } @@ -228,10 +251,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputTextTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputTextTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputTextTokens = &rate } else { - rate := round(*price.OutputTextTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputTextTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputTextTokens = &rate } } @@ -245,10 +270,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputImageTokens/2, 4) / baseRate + normalizedValue := round(*price.InputImageTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputImageTokens = &rate } else { - rate := round(*price.InputImageTokens/14, 4) / baseRate + normalizedValue := round(*price.InputImageTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputImageTokens = &rate } } @@ -262,10 +289,12 @@ func GetPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputImageTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputImageTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputImageTokens = &rate } else { - rate := round(*price.OutputImageTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputImageTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputImageTokens = &rate } } @@ -377,10 +406,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputAudioTokens/2, 4) / baseRate + normalizedValue := round(*price.InputAudioTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputAudioTokens = &rate } else { - rate := round(*price.InputAudioTokens/14, 4) / baseRate + normalizedValue := round(*price.InputAudioTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputAudioTokens = &rate } } @@ -394,10 +425,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputAudioTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputAudioTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputAudioTokens = &rate } else { - rate := round(*price.OutputAudioTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputAudioTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputAudioTokens = &rate } } @@ -411,10 +444,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedTokens = &rate } else { - rate := round(*price.CachedTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedTokens = &rate } } @@ -428,10 +463,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedReadTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedReadTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedReadTokens = &rate } else { - rate := round(*price.CachedReadTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedReadTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedReadTokens = &rate } } @@ -445,10 +482,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.CachedWriteTokens/2, 4) / baseRate + normalizedValue := round(*price.CachedWriteTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedWriteTokens = &rate } else { - rate := round(*price.CachedWriteTokens/14, 4) / baseRate + normalizedValue := round(*price.CachedWriteTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.CachedWriteTokens = &rate } } @@ -462,10 +501,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.ReasoningTokens/2, 4) / baseRate + normalizedValue := round(*price.ReasoningTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.ReasoningTokens = &rate } else { - rate := round(*price.ReasoningTokens/14, 4) / baseRate + normalizedValue := round(*price.ReasoningTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.ReasoningTokens = &rate } } @@ -479,10 +520,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputTextTokens/2, 4) / baseRate + normalizedValue := round(*price.InputTextTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputTextTokens = &rate } else { - rate := round(*price.InputTextTokens/14, 4) / baseRate + normalizedValue := round(*price.InputTextTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputTextTokens = &rate } } @@ -496,10 +539,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputTextTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputTextTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputTextTokens = &rate } else { - rate := round(*price.OutputTextTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputTextTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputTextTokens = &rate } } @@ -513,10 +558,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.InputImageTokens/2, 4) / baseRate + normalizedValue := round(*price.InputImageTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputImageTokens = &rate } else { - rate := round(*price.InputImageTokens/14, 4) / baseRate + normalizedValue := round(*price.InputImageTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.InputImageTokens = &rate } } @@ -530,10 +577,12 @@ func GetOfficialPriceRates(c *gin.Context) { } if price.Currency == "USD" { - rate := round(*price.OutputImageTokens/2, 4) / baseRate + normalizedValue := round(*price.OutputImageTokens/2, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputImageTokens = &rate } else { - rate := round(*price.OutputImageTokens/14, 4) / baseRate + normalizedValue := round(*price.OutputImageTokens/14, 4) + rate := calculateSafeRatio(normalizedValue, baseRate) extraRatios.OutputImageTokens = &rate } }