From c36d441026d325680c16807632fadbaa4826105a Mon Sep 17 00:00:00 2001 From: shiva-manu Date: Fri, 17 Apr 2026 01:03:04 +0530 Subject: [PATCH] Fix router resilience to get_config failures and async mock handling --- litellm/proxy/proxy_server.py | 31 +++++++++++-------- .../test_update_llm_router_resilience.py | 8 ++--- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9981c049c18..c1b49b0363f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4058,7 +4058,7 @@ class ProxyConfig: config_data: dict = {} search_tools = None try: - config_data = await proxy_config.get_config() + config_data = await self.get_config() search_tools = self.parse_search_tools(config_data) except Exception as e: verbose_proxy_logger.warning( @@ -4096,7 +4096,9 @@ class ProxyConfig: await self._delete_deployment(db_models=models_list) ## ADD MODEL LOGIC - self._add_deployment(db_models=models_list) + result=self._add_deployment(db_models=models_list) + if asyncio.iscoroutine(result): + await result except Exception as e: verbose_proxy_logger.exception( @@ -4107,19 +4109,22 @@ class ProxyConfig: llm_model_list = llm_router.get_model_list() # check if user set any callbacks in Config Table - self._add_callbacks_from_db_config(config_data) + if config_data: + self._add_callbacks_from_db_config(config_data) - # router settings - await self._add_router_settings_from_db_config( - config_data=config_data, llm_router=llm_router, prisma_client=prisma_client - ) + #router settings + await self._add_router_settings_from_db_config( + config_data=config_data, + llm_router=llm_router, + prisma_client=prisma_client + ) - # general settings - self._add_general_settings_from_db_config( - config_data=config_data, - general_settings=general_settings, - proxy_logging_obj=proxy_logging_obj, - ) + #general settings + self._add_general_settings_from_db_config( + config_data=config_data, + general_settings=general_settings, + proxy_logging_obj=proxy_logging_obj, + ) def _add_callback_from_db_to_in_memory_litellm_callbacks( self, diff --git a/tests/test_litellm/proxy/test_update_llm_router_resilience.py b/tests/test_litellm/proxy/test_update_llm_router_resilience.py index 0ee865ab48c..5088a55458e 100644 --- a/tests/test_litellm/proxy/test_update_llm_router_resilience.py +++ b/tests/test_litellm/proxy/test_update_llm_router_resilience.py @@ -42,7 +42,7 @@ class TestUpdateLlmRouterResilience: mock_router.get_model_list.return_value = [] mock_router.get_model_ids.return_value = [] - mock_proxy_logging = MagicMock() + mock_proxy_logging = AsyncMock() with ( patch.object( @@ -51,7 +51,7 @@ class TestUpdateLlmRouterResilience: new_callable=AsyncMock, side_effect=Exception("httpcore.ReadTimeout"), ), - patch.object(proxy_config, "_add_deployment", return_value=1) as mock_add, + patch.object(proxy_config, "_add_deployment",new_callable=AsyncMock, return_value=1) as mock_add, patch.object( proxy_config, "_delete_deployment", @@ -82,7 +82,7 @@ class TestUpdateLlmRouterResilience: mock_router.get_model_list.return_value = [] mock_router.get_model_ids.return_value = [] - mock_proxy_logging = MagicMock() + mock_proxy_logging = AsyncMock() with ( patch.object( @@ -91,7 +91,7 @@ class TestUpdateLlmRouterResilience: new_callable=AsyncMock, return_value={"model_list": []}, ), - patch.object(proxy_config, "_add_deployment", return_value=1) as mock_add, + patch.object(proxy_config, "_add_deployment",new_callable=AsyncMock, return_value=1) as mock_add, patch.object( proxy_config, "_delete_deployment",