fix(router): address Greptile P0/P1 review comments on order fallback

- P0: Skip order-based fallback for ContextWindowExceededError and
  ContentPolicyViolationError so their dedicated fallback handlers run
- P1: Read _target_order from kwargs to skip already-tried order levels,
  preventing wasteful retries and exponential retry storms

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sameer Kankute 2026-03-26 12:04:48 +05:30
parent 9cbe3c2c7f
commit cd0a141115
No known key found for this signature in database

View file

@ -5289,6 +5289,11 @@ class Router:
input_kwargs["fallback_depth"] = 0
# ORDER-BASED FALLBACKS: prepend higher order levels to the fallback list
# Skip for error types that have their own dedicated fallback handlers
_skip_order_fallback = isinstance(
e,
(litellm.ContextWindowExceededError, litellm.ContentPolicyViolationError),
)
all_deployments = self._get_all_deployments(model_name=original_model_group)
_order_set: set = {
d.get("litellm_params", {}).get("order")
@ -5296,11 +5301,17 @@ class Router:
if d.get("litellm_params", {}).get("order") is not None
}
order_values: list = sorted(_order_set)
if len(order_values) > 1:
# Build order-based fallback entries (skip min order, already tried)
if len(order_values) > 1 and not _skip_order_fallback:
# Determine which order levels have already been tried
current_target = kwargs.get("_target_order")
skip_up_to = (
current_target if current_target is not None else order_values[0]
)
# Build order-based fallback entries (skip already-tried levels)
order_fallback_entries: List = [
{"model": original_model_group, "_target_order": o}
for o in order_values[1:]
for o in order_values
if o > skip_up_to
]
# Get external fallbacks
external_fallback_group: Optional[List] = None