From d4dddcc072c2d3dabae8bf3b561d3f22beaa2847 Mon Sep 17 00:00:00 2001 From: mateo Date: Mon, 21 Sep 2026 23:54:37 +0000 Subject: [PATCH] test(proxy): use ProxyRuntimeConfig in proxy config and callbacks tests Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../test_proxy_config_unit_test.py | 31 ++++++++++--------- tests/proxy_unit_tests/test_proxy_server.py | 5 +-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/tests/proxy_unit_tests/test_proxy_config_unit_test.py b/tests/proxy_unit_tests/test_proxy_config_unit_test.py index 5f236806685..c2a7c5e14bf 100644 --- a/tests/proxy_unit_tests/test_proxy_config_unit_test.py +++ b/tests/proxy_unit_tests/test_proxy_config_unit_test.py @@ -16,6 +16,7 @@ import io import asyncio import logging +from litellm.proxy._types import ProxyRuntimeConfig from litellm.proxy.proxy_server import ProxyConfig INVALID_FILES = ["config_with_missing_include.yaml"] @@ -88,11 +89,11 @@ async def test_read_config_file_with_os_environ_vars(): print(config) # Add assertions - assert config["litellm_settings"]["default_internal_user_params"]["user_role"] == "admin" - assert config["litellm_settings"]["s3_callback_params"]["s3_aws_access_key_id"] == "1234567890" - assert config["litellm_settings"]["s3_callback_params"]["s3_aws_secret_access_key"] == "1234567890" + assert config.litellm_settings["default_internal_user_params"]["user_role"] == "admin" + assert config.litellm_settings["s3_callback_params"]["s3_aws_access_key_id"] == "1234567890" + assert config.litellm_settings["s3_callback_params"]["s3_aws_secret_access_key"] == "1234567890" - for model in config["model_list"]: + for model in config.model_list: if "azure" in model["litellm_params"]["model"]: assert model["litellm_params"]["api_key"] == "1234567890" elif "fireworks" in model["litellm_params"]["model"]: @@ -118,11 +119,11 @@ async def test_basic_include_directive(): config = await proxy_config_instance.get_config(config_file_path=config_path) # Verify the included model list was merged - assert len(config["model_list"]) > 0 - assert any(model["model_name"] == "included-model" for model in config["model_list"]) + assert len(config.model_list) > 0 + assert any(model["model_name"] == "included-model" for model in config.model_list) # Verify original config settings remain - assert config["litellm_settings"]["callbacks"] == ["prometheus"] + assert list(config.litellm_settings["callbacks"]) == ["prometheus"] @pytest.mark.asyncio @@ -150,12 +151,12 @@ async def test_multiple_includes(): config = await proxy_config_instance.get_config(config_file_path=config_path) # Verify models from both included files are present - assert len(config["model_list"]) == 2 - assert any(model["model_name"] == "included-model-1" for model in config["model_list"]) - assert any(model["model_name"] == "included-model-2" for model in config["model_list"]) + assert len(config.model_list) == 2 + assert any(model["model_name"] == "included-model-1" for model in config.model_list) + assert any(model["model_name"] == "included-model-2" for model in config.model_list) # Verify original config settings remain - assert config["litellm_settings"]["callbacks"] == ["prometheus"] + assert list(config.litellm_settings["callbacks"]) == ["prometheus"] def test_add_callbacks_from_db_config(): @@ -179,7 +180,7 @@ def test_add_callbacks_from_db_config(): } } - proxy_config._add_callbacks_from_db_config(config_data) + proxy_config._add_callbacks_from_db_config(ProxyRuntimeConfig.from_resolved(config_data)) # 1 instance of LangfusePromptManagement should exist in litellm.success_callback num_langfuse_instances = sum( @@ -190,7 +191,7 @@ def test_add_callbacks_from_db_config(): assert len(litellm.failure_callback) == 1 # Test Case 2: Try adding duplicate callbacks - proxy_config._add_callbacks_from_db_config(config_data) + proxy_config._add_callbacks_from_db_config(ProxyRuntimeConfig.from_resolved(config_data)) # Verify no duplicates were added assert len(litellm.success_callback) == 2 @@ -218,7 +219,7 @@ def test_add_callbacks_invalid_input(): } } - proxy_config._add_callbacks_from_db_config(config_data) + proxy_config._add_callbacks_from_db_config(ProxyRuntimeConfig.from_resolved(config_data)) # Verify no callbacks were added with invalid input assert len(litellm.success_callback) == 0 @@ -226,7 +227,7 @@ def test_add_callbacks_invalid_input(): # Test Case 2: Missing litellm_settings config_data = {} - proxy_config._add_callbacks_from_db_config(config_data) + proxy_config._add_callbacks_from_db_config(ProxyRuntimeConfig.from_resolved(config_data)) # Verify no callbacks were added assert len(litellm.success_callback) == 0 diff --git a/tests/proxy_unit_tests/test_proxy_server.py b/tests/proxy_unit_tests/test_proxy_server.py index ed0380058a5..b6ced8ae5df 100644 --- a/tests/proxy_unit_tests/test_proxy_server.py +++ b/tests/proxy_unit_tests/test_proxy_server.py @@ -20,6 +20,7 @@ import pytest import litellm from litellm import RateLimitError, Timeout, completion, completion_cost, embedding +from litellm.proxy._types import ProxyRuntimeConfig # Configure logging logging.basicConfig( @@ -2912,7 +2913,7 @@ async def test_get_config_callbacks_with_all_types(client_no_auth): proxy_config = getattr(litellm.proxy.proxy_server, "proxy_config") with patch.object( - proxy_config, "get_config", new=AsyncMock(return_value=mock_config_data) + proxy_config, "get_config", new=AsyncMock(return_value=ProxyRuntimeConfig.from_resolved(mock_config_data)) ): response = client_no_auth.get("/get/config/callbacks") @@ -2991,7 +2992,7 @@ async def test_get_config_callbacks_environment_variables(client_no_auth): proxy_config = getattr(litellm.proxy.proxy_server, "proxy_config") with patch.object( - proxy_config, "get_config", new=AsyncMock(return_value=mock_config_data) + proxy_config, "get_config", new=AsyncMock(return_value=ProxyRuntimeConfig.from_resolved(mock_config_data)) ): response = client_no_auth.get("/get/config/callbacks")