Innokentiy Solntsev
bc7f68fb91
fix(resilience): lock the exact model, not the quota family, on 5xx model-lockout failures ( #12957 )
...
* fix(resilience): lock the exact model, not the quota family, on 5xx model-lockout failures
A 5xx model-lockout failure — a transport error (terminated, EHOSTUNREACH,
connect timeout), an upstream server error, or OmniRoute's own synthesized
502 from quality validation — is evidence about one model endpoint at that
moment, not about the account's quota family. recordModelLockoutFailure()
wrote it under the quota-family key regardless, so for codex (whose family
key is the whole `codex` scope, i.e. every gpt-5* model) one empty stream
on gpt-5.6-luna removed gpt-5.6-sol and gpt-5.6-terra from routing too,
for 2–30 min with exponential escalation, while the quota was untouched.
- exactModelLock.ts: resolveLockoutScope(status, explicit) — 429/403/402
(and 404, already narrowed by getModelLockKey) keep the family key; any
other status uses the exact provider/connection/model key. An explicit
`scope` option still wins.
- recordModelLockoutFailure() resolves the scope once for key + lock fn.
- decayModelFailureCount() now walks every key shape (family, not_found,
exact) so success-decay reaches exact-scope locks; null model stays a
no-op.
- getAllModelLockouts() parses the `exact:` marker out of the key so the
Model Cooldowns card lists the bare model and can clear it by that name.
- docs: RESILIENCE_GUIDE §3 key-scope-by-status; changelog fragment.
* chore(changelog): name the fragment after PR #12957 and link issue #12955
---------
Co-authored-by: insoln <is@careerum.com >
2026-09-17 16:25:32 -03:00
..
2026-07-13 09:12:40 -03:00
2026-09-15 13:25:13 -03:00
2026-09-15 16:58:24 -03:00
2026-09-16 19:59:43 -03:00
2026-09-17 15:35:35 -03:00
2026-09-16 06:08:58 -03:00
2026-09-16 08:23:17 -03:00
2026-09-16 06:17:57 -03:00
2026-09-17 13:16:02 -03:00
2026-09-17 16:24:58 -03:00
2026-09-16 06:18:37 -03:00
2026-09-16 06:18:37 -03:00
2026-09-16 15:34:54 -03:00
2026-09-17 16:24:39 -03:00
2026-09-15 09:00:51 -03:00
2026-09-15 09:00:51 -03:00
2026-09-17 16:25:16 -03:00
2026-09-17 02:30:54 -03:00
2026-09-17 02:30:35 -03:00
2026-09-17 12:56:30 -03:00
2026-09-17 12:56:30 -03:00
2026-09-17 12:56:30 -03:00
2026-09-17 12:56:30 -03:00
2026-09-17 02:30:15 -03:00
2026-09-17 02:30:15 -03:00
2026-09-17 02:29:39 -03:00
2026-09-17 02:29:19 -03:00
2026-09-17 10:56:01 -03:00
2026-09-17 10:44:48 -03:00
2026-09-16 06:18:22 -03:00
2026-09-17 10:46:52 -03:00
2026-09-17 16:25:32 -03:00
2026-09-16 06:17:42 -03:00
2026-09-16 06:16:49 -03:00
2026-09-16 13:37:07 -03:00
2026-09-17 10:46:34 -03:00
2026-09-16 15:45:34 -03:00
2026-09-16 06:17:27 -03:00
2026-09-16 06:17:04 -03:00
2026-09-16 06:16:34 -03:00
2026-09-16 13:37:39 -03:00
2026-09-16 13:36:52 -03:00
2026-09-16 06:16:02 -03:00
2026-09-16 06:16:18 -03:00
2026-09-17 13:22:09 -03:00
2026-09-15 16:49:06 -03:00
2026-09-17 16:24:04 -03:00
2026-09-15 10:59:34 -03:00
2026-09-15 13:21:52 -03:00
2026-09-16 06:15:47 -03:00
2026-09-15 11:24:35 -03:00
2026-09-15 13:08:21 -03:00
2026-09-15 11:26:38 -03:00
2026-09-17 02:31:53 -03:00
2026-09-16 16:50:42 -03:00
2026-09-16 06:15:31 -03:00
2026-09-16 06:15:15 -03:00
2026-09-16 21:01:48 -03:00
2026-09-16 21:02:04 -03:00
2026-09-16 21:02:19 -03:00
2026-09-16 21:02:35 -03:00
2026-09-16 21:02:51 -03:00
2026-09-16 21:09:38 -03:00
2026-09-16 21:03:09 -03:00
2026-09-16 21:03:25 -03:00
2026-09-16 21:03:40 -03:00
2026-09-16 21:03:57 -03:00
2026-09-16 13:39:29 -03:00
2026-09-16 15:32:58 -03:00
2026-09-16 06:15:00 -03:00
2026-09-16 06:14:31 -03:00
2026-09-17 13:06:37 -03:00
2026-09-16 06:14:46 -03:00
2026-09-16 22:56:38 -03:00
2026-09-17 12:32:43 -03:00
2026-09-16 06:13:44 -03:00
2026-09-16 06:14:14 -03:00
2026-09-16 06:13:59 -03:00
2026-09-16 16:56:28 -03:00
2026-09-15 12:52:41 -03:00
2026-09-15 11:21:58 -03:00
2026-09-15 15:46:57 -03:00
2026-09-15 15:02:55 -03:00
2026-09-15 12:20:19 -03:00
2026-09-16 06:12:28 -03:00
2026-09-17 10:45:25 -03:00
2026-09-16 06:12:59 -03:00
2026-09-15 11:08:16 -03:00
2026-09-16 06:13:29 -03:00
2026-09-15 20:10:57 -03:00
2026-09-16 06:13:14 -03:00
2026-09-15 20:39:39 -03:00
2026-09-16 06:12:43 -03:00
2026-09-17 10:46:00 -03:00
2026-09-16 06:11:13 -03:00
2026-09-16 17:01:51 -03:00
2026-09-16 06:12:12 -03:00
2026-09-16 06:11:56 -03:00
2026-09-16 13:38:56 -03:00
2026-09-15 11:05:01 -03:00
2026-09-15 10:04:14 -03:00
2026-09-16 06:11:41 -03:00
2026-09-16 06:11:27 -03:00
2026-09-16 06:10:13 -03:00
2026-09-15 21:35:03 -03:00
2026-09-15 12:59:27 -03:00
2026-09-15 11:18:10 -03:00
2026-09-15 11:15:24 -03:00
2026-09-15 20:01:25 -03:00
2026-09-15 21:19:47 -03:00
2026-09-15 10:11:44 -03:00
2026-09-15 11:12:03 -03:00
2026-09-15 15:52:33 -03:00
2026-09-15 20:58:12 -03:00
2026-09-16 15:15:16 -03:00
2026-09-16 06:10:28 -03:00
2026-09-16 13:39:14 -03:00
2026-09-16 08:15:21 -03:00
2026-09-15 16:10:52 -03:00
2026-09-15 08:51:45 -03:00
2026-09-16 10:10:32 -03:00
2026-09-15 12:48:06 -03:00
2026-09-15 13:57:39 -03:00
2026-09-15 14:10:45 -03:00
2026-09-15 16:19:10 -03:00
2026-09-16 06:09:58 -03:00
2026-09-15 22:01:56 -03:00
2026-09-15 15:07:42 -03:00
2026-09-15 15:25:43 -03:00
2026-09-16 06:09:44 -03:00
2026-09-17 10:45:43 -03:00
2026-09-16 06:10:58 -03:00
2026-09-17 10:45:07 -03:00
2026-09-16 06:09:29 -03:00
2026-09-16 06:09:15 -03:00
2026-09-16 06:10:43 -03:00
2026-09-15 16:22:51 -03:00
2026-09-16 12:59:45 -03:00
2026-09-15 23:19:43 -03:00
2026-09-16 13:35:33 -03:00
2026-09-16 13:35:49 -03:00
2026-09-16 12:19:40 -03:00
2026-09-16 12:27:59 -03:00
2026-09-17 02:55:31 -03:00
2026-09-17 09:09:02 -03:00
2026-09-17 02:32:10 -03:00
2026-09-16 08:01:39 -03:00
2026-09-16 19:59:58 -03:00
2026-09-16 13:48:13 -03:00
2026-09-16 11:45:40 -03:00
2026-09-16 23:10:24 -03:00
2026-09-16 19:59:25 -03:00
2026-09-17 02:31:36 -03:00
2026-09-15 13:24:50 -03:00
2026-09-15 13:25:35 -03:00
2026-09-15 13:24:30 -03:00
2026-09-15 08:50:58 -03:00
2026-09-15 13:24:09 -03:00
2026-09-16 23:57:14 -03:00
2026-09-16 16:37:41 -03:00