fix(routing): 额度饱和时解除任务候选固定

已取得并发租约的任务继续保持候选绑定;仅当已绑定平台的 RPM 或 TPM 已满且存在可用候选时,允许任务在执行前原子迁移到下一平台,避免等待窗口重置。\n\n验证:\n- go test ./internal/runner -count=1\n- go vet ./internal/runner
This commit is contained in:
2026-08-03 12:19:52 +08:00
parent d740e9f676
commit b933d59783
2 changed files with 74 additions and 0 deletions
+10
View File
@@ -293,6 +293,10 @@ func pinCandidatesToTaskAdmission(
if pinnedIndex <= 0 {
return candidates, false
}
pinnedCandidate := candidates[pinnedIndex]
if providerRateQuotaFull(pinnedCandidate) && !providerRateQuotaFull(candidates[0]) {
return candidates, false
}
out := append([]store.RuntimeModelCandidate(nil), candidates...)
pinned := out[pinnedIndex]
copy(out[1:pinnedIndex+1], out[:pinnedIndex])
@@ -300,6 +304,12 @@ func pinCandidatesToTaskAdmission(
return out, true
}
func providerRateQuotaFull(candidate store.RuntimeModelCandidate) bool {
metrics := candidate.LoadMetrics
return (metrics.RPMLimit > 0 && metrics.RPMCurrent >= metrics.RPMLimit) ||
(metrics.TPMLimit > 0 && metrics.TPMCurrent >= metrics.TPMLimit)
}
func (s *Service) tryTaskAdmission(ctx context.Context, task store.GatewayTask, plan taskAdmissionPlan, waiterID string) (store.TaskAdmissionResult, error) {
return s.tryTaskAdmissionWithAdmittedHook(ctx, task, plan, waiterID, nil)
}