From 652efb552a1eff282cd3d009aaa625dcf2c1ebe8 Mon Sep 17 00:00:00 2001 From: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> Date: Thu, 13 Aug 2026 13:23:33 -0300 Subject: [PATCH] fix(combo): restore default same-model retry semantics after #10217 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #10217 wired config.failoverBeforeRetry into the same-model retry guard in both the priority/auto and round-robin loops, but DEFAULT_COMBO_CONFIG defaulted the flag to true — flipping same-model retry off for every combo that never touched the setting, not just the opt-in case. Round-4 bisect (06f41cda63 vs d2fd88dfbc) reproduced this against tests/unit/combo-499-abort.test.ts, tests/unit/combo-quota-exhaustion-only-fallback.test.ts and tests/unit/combo-stream-readiness-fallback.test.ts. Flip the default to false so the historical retry-before-failover behavior returns for combos that never set the flag, while explicit opt-in (the two new tests #10217 added to combo-routing-engine.test.ts) still works. --- open-sse/services/comboConfig.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/open-sse/services/comboConfig.ts b/open-sse/services/comboConfig.ts index 4489b6194a..dd7f220160 100644 --- a/open-sse/services/comboConfig.ts +++ b/open-sse/services/comboConfig.ts @@ -126,7 +126,12 @@ const DEFAULT_COMBO_CONFIG = { resetAwareWeeklyWeight: 0.65, resetAwareTieBandPercent: 5, resetAwareExhaustionGuardPercent: 10, - failoverBeforeRetry: true, + // Opt-in (#2417/#10217): when unset, transient errors retry the same model + // up to maxRetries before falling over to the next target — the historical + // default. Defaulting this to true silently flipped that behavior for every + // combo that never touched the setting, breaking same-model retry semantics + // (round 4 base-red bisect: 06f41cda63 vs d2fd88dfbc). + failoverBeforeRetry: false, // Feature 4985: configurable response-body validation predicate (per-combo). When set, // a 200 OK whose body fails the predicate fails over to the next target. responseValidation: undefined as ResponseValidationConfig | undefined,