fix(compressor): trigger fallback on timeout errors alongside model-not-found

Previously only HTTP 404/503 and specific error strings triggered a fallback
to the main model when the summary model was unavailable. Timeout errors
(HTTP 408/429/502/504, or error strings containing 'timeout') entered a
short cooldown instead, leaving context to grow unbounded for the rest of
the session.

Add _is_timeout detection alongside _is_model_not_found so that transient
timeout errors on the summary model also trigger immediate fallback to the
main model, preventing compression failure from cascading.

Closes #15935
This commit is contained in:
pander 2026-04-27 00:03:25 +08:00 committed by Teknium
parent a45bd28598
commit 6b88f46c54

View file

@ -906,15 +906,19 @@ The user has requested that this compaction PRIORITISE preserving all informatio
or "does not exist" in _err_str or "does not exist" in _err_str
or "no available channel" in _err_str or "no available channel" in _err_str
) )
_is_timeout = (
_status in (408, 429, 502, 504)
or "timeout" in _err_str
)
if ( if (
_is_model_not_found (_is_model_not_found or _is_timeout)
and self.summary_model and self.summary_model
and self.summary_model != self.model and self.summary_model != self.model
and not getattr(self, "_summary_model_fallen_back", False) and not getattr(self, "_summary_model_fallen_back", False)
): ):
self._summary_model_fallen_back = True self._summary_model_fallen_back = True
logging.warning( logging.warning(
"Summary model '%s' not available (%s). " "Summary model '%s' unavailable (%s). "
"Falling back to main model '%s' for compression.", "Falling back to main model '%s' for compression.",
self.summary_model, e, self.model, self.summary_model, e, self.model,
) )