Skip to content

fix(combo): lock a model after a local target timeout - #15494

Merged
diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.52from
HouMinXi:fix/15414-timeout-lockout
Oct 6, 2026
Merged

diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.52from
HouMinXi:fix/15414-timeout-lockout

Conversation

@HouMinXi

@HouMinXi HouMinXi commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Validation

  • node --import tsx/esm --test tests/unit/combo/combo-target-timeout-standards.test.ts tests/unit/combo-model-lockout-honors-reset-1308.test.ts tests/unit/combo/combo-target-exhaustion.test.ts — 68 pass, 0 fail
  • Replacing the timeout exception with "never lock when request-scoped" makes the new timeout test fail and leaves the context-length test passing
  • Three LOCAL forge runs on the uncommitted diff, backend review-default. Each ended PENDING with 0 CONFIRMED. The UNCERTAIN notes restated the lockout branch (first-failure vs exhausted-retry, and whether every request-scoped failure locks). They did not show a missed timeout or a locked context-length failure. The tests cover those two cases.

Tests Added Or Updated

  • tests/unit/combo/combo-target-timeout-standards.test.ts
    • typed combo_target_timeout stays request-scoped for the provider breaker and still records a model lockout
    • context_length_exceeded still does not record a model lockout

Coverage Notes

  • The new tests call the decision function. They do not run a live combo against a slow upstream.

Reviewer Notes

  • Round-robin handles its own failures and does not call executeTargetAttempt. This change covers the reset-aware path named in the report, not round-robin.
  • The turn-in-progress guard has no 120s TTL. Release is on the chat finally path and on stream cancel. That part of the report was not changed.

A combo_target_timeout is request-scoped so it does not trip the provider
breaker. The lockout checks used that same flag, so the timed-out model was
tried again on the next request. Record the model lockout for that code
only. Other request-scoped failures stay unlocked.

Related to diegosouzapw#15414.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
@HouMinXi
HouMinXi requested a review from diegosouzapw as a code owner October 4, 2026 03:37
The lockout change needs its own changelog fragment so release
aggregation picks it up.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
@diegosouzapw
diegosouzapw merged commit 866a361 into diegosouzapw:release/v3.8.52 Oct 6, 2026
42 of 51 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants