From eba6cc16ee75a73203f56d30b1c11d485098f0b3 Mon Sep 17 00:00:00 2001 From: Milan Date: Fri, 8 May 2026 15:42:09 +0300 Subject: [PATCH] fix(router): bind fallback_kwargs before try for each iteration Greptile: except used fallback_kwargs assigned only inside try, risking UnboundLocalError or a stale dict from a prior loop iteration. Set fallback_kwargs = kwargs before each try; first line in try remains safe_deep_copy(kwargs). Co-authored-by: Cursor --- litellm/router_utils/fallback_event_handlers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/litellm/router_utils/fallback_event_handlers.py b/litellm/router_utils/fallback_event_handlers.py index 63ab76a7cff..ad98d3fa98d 100644 --- a/litellm/router_utils/fallback_event_handlers.py +++ b/litellm/router_utils/fallback_event_handlers.py @@ -123,6 +123,10 @@ async def run_async_fallback( for mg in fallback_model_group: if mg == original_model_group: continue + # Bind before try so except always has a defined dict; reset each + # iteration so we never log a stale copy from a prior attempt. Until + # safe_deep_copy runs, this aliases the caller kwargs (same as legacy). + fallback_kwargs = kwargs try: # Keep each fallback attempt isolated from mutations made while # preparing or sending a previous attempt.