| 123456789101112131415161718192021222324252627282930313233343536 |
- package service
- import (
- "github.com/QuantumNous/new-api/pkg/billingexpr"
- relaycommon "github.com/QuantumNous/new-api/relay/common"
- )
- // TieredResultWrapper wraps billingexpr.TieredResult for use at the service layer.
- type TieredResultWrapper = billingexpr.TieredResult
- // TryTieredSettle checks if the request uses tiered_expr billing and, if so,
- // computes the actual quota using the frozen BillingSnapshot. Returns:
- // - ok=true, quota, result when tiered billing applies
- // - ok=false, 0, nil when it doesn't (caller should fall through to existing logic)
- func TryTieredSettle(relayInfo *relaycommon.RelayInfo, params billingexpr.TokenParams) (ok bool, quota int, result *billingexpr.TieredResult) {
- snap := relayInfo.TieredBillingSnapshot
- if snap == nil || snap.BillingMode != "tiered_expr" {
- return false, 0, nil
- }
- requestInput := billingexpr.RequestInput{}
- if relayInfo.BillingRequestInput != nil {
- requestInput = *relayInfo.BillingRequestInput
- }
- tr, err := billingexpr.ComputeTieredQuotaWithRequest(snap, params, requestInput)
- if err != nil {
- quota = relayInfo.FinalPreConsumedQuota
- if quota <= 0 {
- quota = snap.EstimatedQuotaAfterGroup
- }
- return true, quota, nil
- }
- return true, tr.ActualQuotaAfterGroup, &tr
- }
|