fix(billing): use tieredQuota fallback in composeTieredTextQuota error path
Remove the intermediate branch that recomputed quota from EstimatedQuotaBeforeGroup when tieredResult is nil. This discarded the FinalPreConsumedQuota fallback that TryTieredSettle already selected. Now the error path simply adds tool surcharges to the passed-in tieredQuota, preserving the existing fallback semantics. Also removes unrelated mise.toml and adds a test covering the error fallback with a pre-consumed quota that differs from the estimate.
This commit is contained in:
@@ -151,14 +151,6 @@ func composeTieredTextQuota(relayInfo *relaycommon.RelayInfo, summary textQuotaS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if snap := relayInfo.TieredBillingSnapshot; snap != nil {
|
|
||||||
return int(decimal.NewFromFloat(snap.EstimatedQuotaBeforeGroup).
|
|
||||||
Mul(decimal.NewFromFloat(snap.GroupRatio)).
|
|
||||||
Add(summary.ToolCallSurchargeQuota).
|
|
||||||
Round(0).
|
|
||||||
IntPart())
|
|
||||||
}
|
|
||||||
|
|
||||||
return tieredQuota + int(summary.ToolCallSurchargeQuota.Round(0).IntPart())
|
return tieredQuota + int(summary.ToolCallSurchargeQuota.Round(0).IntPart())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -400,3 +400,42 @@ func TestComposeTieredTextQuotaFallbackKeepsToolCallSurcharges(t *testing.T) {
|
|||||||
require.Equal(t, int64(12500), summary.ToolCallSurchargeQuota.Round(0).IntPart())
|
require.Equal(t, int64(12500), summary.ToolCallSurchargeQuota.Round(0).IntPart())
|
||||||
require.Equal(t, 13750, quota)
|
require.Equal(t, 13750, quota)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestComposeTieredTextQuotaErrorFallbackUsesPreConsumedQuota(t *testing.T) {
|
||||||
|
gin.SetMode(gin.TestMode)
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
ctx, _ := gin.CreateTestContext(w)
|
||||||
|
ctx.Set("claude_web_search_requests", 2)
|
||||||
|
|
||||||
|
relayInfo := &relaycommon.RelayInfo{
|
||||||
|
OriginModelName: "claude-3-7-sonnet",
|
||||||
|
PriceData: types.PriceData{
|
||||||
|
ModelRatio: 1,
|
||||||
|
CompletionRatio: 1,
|
||||||
|
GroupRatioInfo: types.GroupRatioInfo{GroupRatio: 1.25},
|
||||||
|
},
|
||||||
|
TieredBillingSnapshot: &billingexpr.BillingSnapshot{
|
||||||
|
BillingMode: "tiered_expr",
|
||||||
|
GroupRatio: 1.25,
|
||||||
|
EstimatedQuotaBeforeGroup: 1000,
|
||||||
|
},
|
||||||
|
StartTime: time.Now(),
|
||||||
|
}
|
||||||
|
|
||||||
|
usage := &dto.Usage{
|
||||||
|
PromptTokens: 100,
|
||||||
|
CompletionTokens: 50,
|
||||||
|
TotalTokens: 150,
|
||||||
|
}
|
||||||
|
|
||||||
|
summary := calculateTextQuotaSummary(ctx, relayInfo, usage)
|
||||||
|
|
||||||
|
// tieredResult=nil simulates a settlement error where TryTieredSettle
|
||||||
|
// falls back to FinalPreConsumedQuota (2000), which differs from
|
||||||
|
// EstimatedQuotaBeforeGroup * GroupRatio (1250).
|
||||||
|
preConsumedFallback := 2000
|
||||||
|
quota := composeTieredTextQuota(relayInfo, summary, preConsumedFallback, nil)
|
||||||
|
|
||||||
|
require.Equal(t, int64(12500), summary.ToolCallSurchargeQuota.Round(0).IntPart())
|
||||||
|
require.Equal(t, 14500, quota)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user