mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
fix(router): handle None values in update_settings integer settings
Router.update_settings() raised an unhandled TypeError when None was
passed for any integer setting (timeout, num_retries, retry_after,
allowed_fails, cooldown_time):
_casted_value = int(kwargs[var]) # int(None) -> TypeError
This is a real production path: the proxy server calls
update_settings(**combined_router_settings) on every startup, where
settings are merged from config.yaml and a JSON database. JSON null
maps to Python None, so clearing a timeout via the admin UI causes a
proxy startup crash.
Fix: guard with an explicit None check before casting.
Adds regression test covering all five int settings with None input
and confirms valid int values still work after a None reset.
This commit is contained in:
parent
cf9b5e4fa7
commit
212d5d3330
2 changed files with 27 additions and 2 deletions
|
|
@ -9520,8 +9520,10 @@ class Router:
|
|||
for var in kwargs:
|
||||
if var in _allowed_settings:
|
||||
if var in _int_settings:
|
||||
_casted_value = int(kwargs[var])
|
||||
setattr(self, var, _casted_value)
|
||||
if kwargs[var] is None:
|
||||
setattr(self, var, None)
|
||||
else:
|
||||
setattr(self, var, int(kwargs[var]))
|
||||
elif var == "routing_groups":
|
||||
self._routing_groups_input = kwargs[var]
|
||||
rebuild_routing_groups = True
|
||||
|
|
|
|||
|
|
@ -977,6 +977,29 @@ def test_update_settings(model_list):
|
|||
assert router.allowed_fails == 20
|
||||
|
||||
|
||||
def test_update_settings_none_int_values(model_list):
|
||||
"""Regression test: update_settings must not crash when None is passed for int settings.
|
||||
Previously raised TypeError: int() argument must be a string... not 'NoneType'"""
|
||||
router = Router(model_list=model_list, timeout=30, allowed_fails=5)
|
||||
|
||||
# None should reset each int setting without raising TypeError
|
||||
router.update_settings(timeout=None)
|
||||
assert router.timeout is None
|
||||
|
||||
router.update_settings(allowed_fails=None)
|
||||
assert router.allowed_fails is None
|
||||
|
||||
router.update_settings(num_retries=None)
|
||||
assert router.num_retries is None
|
||||
|
||||
router.update_settings(cooldown_time=None)
|
||||
assert router.cooldown_time is None
|
||||
|
||||
# Valid int values must still work after None resets
|
||||
router.update_settings(timeout=60)
|
||||
assert router.timeout == 60
|
||||
|
||||
|
||||
def test_common_checks_available_deployment(model_list):
|
||||
"""Test if the 'common_checks_available_deployment' function is working correctly"""
|
||||
router = Router(model_list=model_list)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue