diff --git a/litellm/proxy/guardrails/guardrail_retries.py b/litellm/proxy/guardrails/guardrail_retries.py index 11210f1b56c..0c5d3cde933 100644 --- a/litellm/proxy/guardrails/guardrail_retries.py +++ b/litellm/proxy/guardrails/guardrail_retries.py @@ -75,7 +75,7 @@ def _time_to_sleep_before_guardrail_retry( Compute sleep before next guardrail retry using litellm._calculate_retry_after. retry_after (config) is used as min_timeout for backoff. """ - min_timeout = int(max(0.0, retry_after)) + min_timeout = max(0.0, retry_after) return litellm._calculate_retry_after( remaining_retries=remaining_retries, max_retries=num_retries, @@ -114,7 +114,8 @@ async def run_guardrail_with_retries( except Exception as e: if not should_retry_guardrail_error(e): raise - if remaining <= 0: + remaining -= 1 + if remaining < 0: raise response_headers = getattr(e, "response", None) if response_headers is not None and hasattr(response_headers, "headers"): @@ -134,7 +135,6 @@ async def run_guardrail_with_retries( remaining, ) await asyncio.sleep(sleep_seconds) - remaining -= 1 attempt += 1 diff --git a/litellm/router.py b/litellm/router.py index 48ab6c76f20..2c216c401fc 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -7635,12 +7635,24 @@ class Router: "guardrail_num_retries", ] + _float_settings = [ + "guardrail_retry_after", + ] + _existing_router_settings = self.get_settings() for var in kwargs: if var in _allowed_settings: if var in _int_settings: _casted_value = int(kwargs[var]) setattr(self, var, _casted_value) + elif var in _float_settings: + _val = kwargs[var] + _casted_value = ( + float(_val) + if _val is not None and _val != "" + else None + ) + setattr(self, var, _casted_value) else: # only run routing strategy init if it has changed if ( diff --git a/litellm/utils.py b/litellm/utils.py index 7109f7aa881..58e20ac1dbb 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -6551,7 +6551,7 @@ def _calculate_retry_after( remaining_retries: int, max_retries: int, response_headers: Optional[httpx.Headers] = None, - min_timeout: int = 0, + min_timeout: Union[int, float] = 0, ) -> Union[float, int]: retry_after = _get_retry_after_from_exception_header(response_headers)