diff --git a/litellm/router_utils/fallback_event_handlers.py b/litellm/router_utils/fallback_event_handlers.py index f25060b686b..f0e5e340041 100644 --- a/litellm/router_utils/fallback_event_handlers.py +++ b/litellm/router_utils/fallback_event_handlers.py @@ -554,27 +554,21 @@ def get_fallback_model_group(fallbacks: list[Any], model_group: str) -> tuple[li """ generic_fallback_idx: int | None = None stripped_model_fallback: list[str] | None = None - pattern_model_fallback: list[str] | None = ( - None # mutable-ok: resolved inside the loop like stripped_model_fallback # rebind-ok: one assignment inside the loop - ) + pattern_model_fallback: list[str] | None = None # mutable-ok: set in loop # rebind-ok: set in loop fallback_model_group: list[str] | None = None fallback_keys: Final = tuple(next(iter(item)) for item in fallbacks if isinstance(item, dict) and item) prefixed_model_group: Final = _provider_prefixed_model_group(model_group, fallback_keys) ## check for specific model group-specific fallbacks for idx, item in enumerate(fallbacks): if isinstance(item, dict): - fallback_key = cast( - str, next(iter(item)) - ) # cast-ok: fallback entries are single-key dicts; the key is always a str + fallback_key = cast(str, next(iter(item))) # cast-ok: fallback keys are str if fallback_key == model_group: # check exact match fallback_model_group = item[model_group] break elif fallback_key == prefixed_model_group or _check_stripped_model_group( model_group=model_group, fallback_key=fallback_key ): # check generic fallback - stripped_model_fallback = cast( - list[str], item[fallback_key] - ) # cast-ok: fallback chains are lists of model names + stripped_model_fallback = cast(list[str], item[fallback_key]) # cast-ok: chains are str lists elif fallback_key == "*": # check generic fallback generic_fallback_idx = idx elif ( @@ -582,9 +576,7 @@ def get_fallback_model_group(fallbacks: list[Any], model_group: str) -> tuple[li and "*" in fallback_key and fnmatch.fnmatchcase(model_group, fallback_key) ): - pattern_model_fallback = cast( - list[str], item[fallback_key] - ) # cast-ok: fallback chains are lists of model names + pattern_model_fallback = cast(list[str], item[fallback_key]) # cast-ok: chains are str lists elif isinstance(item, str): fallback_model_group = [item] ## if none, check for generic fallback @@ -592,9 +584,7 @@ def get_fallback_model_group(fallbacks: list[Any], model_group: str) -> tuple[li if stripped_model_fallback is not None: fallback_model_group = stripped_model_fallback elif pattern_model_fallback is not None: - fallback_model_group = ( - pattern_model_fallback # rebind-ok: one assignment per priority branch, same as stripped and generic - ) + fallback_model_group = pattern_model_fallback # rebind-ok: one branch assignment like stripped elif generic_fallback_idx is not None: fallback_model_group = fallbacks[generic_fallback_idx]["*"]