(info QuotaInfo)
| 38 | } |
| 39 | |
| 40 | func calculateAudioQuota(info QuotaInfo) int { |
| 41 | if info.UsePrice { |
| 42 | modelPrice := decimal.NewFromFloat(info.ModelPrice) |
| 43 | quotaPerUnit := decimal.NewFromFloat(common.QuotaPerUnit) |
| 44 | groupRatio := decimal.NewFromFloat(info.GroupRatio) |
| 45 | |
| 46 | quota := modelPrice.Mul(quotaPerUnit).Mul(groupRatio) |
| 47 | return int(quota.IntPart()) |
| 48 | } |
| 49 | |
| 50 | completionRatio := decimal.NewFromFloat(ratio_setting.GetCompletionRatio(info.ModelName)) |
| 51 | audioRatio := decimal.NewFromFloat(ratio_setting.GetAudioRatio(info.ModelName)) |
| 52 | audioCompletionRatio := decimal.NewFromFloat(ratio_setting.GetAudioCompletionRatio(info.ModelName)) |
| 53 | |
| 54 | groupRatio := decimal.NewFromFloat(info.GroupRatio) |
| 55 | modelRatio := decimal.NewFromFloat(info.ModelRatio) |
| 56 | ratio := groupRatio.Mul(modelRatio) |
| 57 | |
| 58 | inputTextTokens := decimal.NewFromInt(int64(info.InputDetails.TextTokens)) |
| 59 | outputTextTokens := decimal.NewFromInt(int64(info.OutputDetails.TextTokens)) |
| 60 | inputAudioTokens := decimal.NewFromInt(int64(info.InputDetails.AudioTokens)) |
| 61 | outputAudioTokens := decimal.NewFromInt(int64(info.OutputDetails.AudioTokens)) |
| 62 | |
| 63 | quota := decimal.Zero |
| 64 | quota = quota.Add(inputTextTokens) |
| 65 | quota = quota.Add(outputTextTokens.Mul(completionRatio)) |
| 66 | quota = quota.Add(inputAudioTokens.Mul(audioRatio)) |
| 67 | quota = quota.Add(outputAudioTokens.Mul(audioRatio).Mul(audioCompletionRatio)) |
| 68 | |
| 69 | quota = quota.Mul(ratio) |
| 70 | |
| 71 | // If ratio is not zero and quota is less than or equal to zero, set quota to 1 |
| 72 | if !ratio.IsZero() && quota.LessThanOrEqual(decimal.Zero) { |
| 73 | quota = decimal.NewFromInt(1) |
| 74 | } |
| 75 | |
| 76 | return int(quota.Round(0).IntPart()) |
| 77 | } |
| 78 | |
| 79 | func PreWssConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.RealtimeUsage) error { |
| 80 | if relayInfo.UsePrice { |
no test coverage detected