MCPcopy
hub / github.com/QuantumNous/new-api / settleTaskBillingOnComplete

Function settleTaskBillingOnComplete

service/task_polling.go:633–650  ·  view source on GitHub ↗

settleTaskBillingOnComplete 任务完成时的统一计费调整。 优先级:1. adaptor.AdjustBillingOnComplete 返回正数 → 使用 adaptor 计算的额度 2. taskResult.TotalTokens > 0 → 按 token 重算 3. 都不满足 → 保持预扣额度不变

(ctx context.Context, adaptor TaskPollingAdaptor, task *model.Task, taskResult *relaycommon.TaskInfo)

Source from the content-addressed store, hash-verified

631// 2. taskResult.TotalTokens > 0 → 按 token 重算
632// 3. 都不满足 → 保持预扣额度不变
633func settleTaskBillingOnComplete(ctx context.Context, adaptor TaskPollingAdaptor, task *model.Task, taskResult *relaycommon.TaskInfo) {
634 // 0. 按次计费的任务不做差额结算
635 if bc := task.PrivateData.BillingContext; bc != nil && bc.PerCallBilling {
636 logger.LogInfo(ctx, fmt.Sprintf("任务 %s 按次计费,跳过差额结算", task.TaskID))
637 return
638 }
639 // 1. 优先让 adaptor 决定最终额度
640 if actualQuota := adaptor.AdjustBillingOnComplete(task, taskResult); actualQuota > 0 {
641 RecalculateTaskQuota(ctx, task, actualQuota, "adaptor计费调整")
642 return
643 }
644 // 2. 回退到 token 重算
645 if taskResult.TotalTokens > 0 {
646 RecalculateTaskQuotaByTokens(ctx, task, taskResult.TotalTokens)
647 return
648 }
649 // 3. 无调整,保持预扣额度
650}

Calls 4

LogInfoFunction · 0.92
RecalculateTaskQuotaFunction · 0.85