diff --git a/service/quota.go b/service/quota.go index 9abd0af6..8f65bd20 100644 --- a/service/quota.go +++ b/service/quota.go @@ -38,6 +38,14 @@ type QuotaInfo struct { GroupRatio float64 } +func hasCustomModelRatio(modelName string, currentRatio float64) bool { + defaultRatio, exists := ratio_setting.GetDefaultModelRatioMap()[modelName] + if !exists { + return true + } + return currentRatio != defaultRatio +} + func calculateAudioQuota(info QuotaInfo) int { if info.UsePrice { modelPrice := decimal.NewFromFloat(info.ModelPrice) @@ -246,9 +254,10 @@ func PostClaudeConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, if relayInfo.ChannelType == constant.ChannelTypeOpenRouter { promptTokens -= cacheTokens - if cacheCreationTokens == 0 && relayInfo.PriceData.CacheCreationRatio != 1 && usage.Cost != 0 { + isUsingCustomSettings := relayInfo.PriceData.UsePrice || hasCustomModelRatio(modelName, relayInfo.PriceData.ModelRatio) + if cacheCreationTokens == 0 && relayInfo.PriceData.CacheCreationRatio != 1 && usage.Cost != 0 && !isUsingCustomSettings { maybeCacheCreationTokens := CalcOpenRouterCacheCreateTokens(*usage, relayInfo.PriceData) - if promptTokens >= maybeCacheCreationTokens { + if maybeCacheCreationTokens >= 0 && promptTokens >= maybeCacheCreationTokens { cacheCreationTokens = maybeCacheCreationTokens } }