From 0699430206edcbc9f96e76c8253ef486e19a1a93 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Sat, 15 Nov 2025 08:58:46 -0800 Subject: [PATCH] test logging tests + mcp server QA checks --- .../mcp_server/mcp_server_manager.py | 24 +++++++++++-------- .../standard_logging_payload.json | 3 ++- .../completion_with_complex_metadata.json | 6 +++-- .../completion_with_tags.json | 6 +++-- .../completion_with_tags_stream.json | 6 +++-- .../complex_metadata.json | 6 +++-- .../complex_metadata_2.json | 6 +++-- .../empty_metadata.json | 6 +++-- .../metadata_with_function.json | 6 +++-- .../metadata_with_lock.json | 6 +++-- .../nested_metadata.json | 6 +++-- .../simple_metadata.json | 6 +++-- .../simple_metadata2.json | 6 +++-- .../simple_metadata3.json | 6 +++-- .../test_langsmith_unit_test.py | 1 + .../mcp_server/test_mcp_server_manager.py | 19 +++++---------- 16 files changed, 71 insertions(+), 48 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index 71f1fab13b..c6690c1766 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -828,10 +828,13 @@ class MCPServerManager: return [], None try: - async with httpx.AsyncClient(timeout=10.0, follow_redirects=True) as client: - response = await client.get(resource_metadata_url) - response.raise_for_status() - data = response.json() + client = get_async_httpx_client( + llm_provider=httpxSpecialProvider.MCP, + params={"timeout": 10.0, "follow_redirects": True}, + ) + response = await client.get(resource_metadata_url) + response.raise_for_status() + data = response.json() except Exception as exc: # pragma: no cover - network issues verbose_logger.debug( "Failed to fetch MCP OAuth metadata from %s: %s", @@ -921,12 +924,13 @@ class MCPServerManager: for url in candidate_urls: try: - async with httpx.AsyncClient( - timeout=10.0, follow_redirects=True - ) as client: - response = await client.get(url) - response.raise_for_status() - data = response.json() + client = get_async_httpx_client( + llm_provider=httpxSpecialProvider.MCP, + params={"timeout": 10.0, "follow_redirects": True}, + ) + response = await client.get(url) + response.raise_for_status() + data = response.json() except Exception as exc: # pragma: no cover - network issues verbose_logger.debug( "Failed to fetch authorization metadata from %s: %s", diff --git a/tests/logging_callback_tests/gcs_pub_sub_body/standard_logging_payload.json b/tests/logging_callback_tests/gcs_pub_sub_body/standard_logging_payload.json index c2940930b8..82173b57cc 100644 --- a/tests/logging_callback_tests/gcs_pub_sub_body/standard_logging_payload.json +++ b/tests/logging_callback_tests/gcs_pub_sub_body/standard_logging_payload.json @@ -61,7 +61,8 @@ "content": "hi", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null } } ], diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_complex_metadata.json b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_complex_metadata.json index 62cb01dfbf..15794de7a0 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_complex_metadata.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_complex_metadata.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -99,7 +100,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-27-51-150898_chatcmpl-b783291c-dc76-4660-bfef-b79be9d54e57", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags.json b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags.json index f4c99a4b45..fd3d3194a5 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [ "test_tag", @@ -67,7 +68,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-07-31-28-960749_chatcmpl-f06338f0-8c49-45d8-be35-2854a89723c1", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags_stream.json b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags_stream.json index f3b660dc67..af15f35118 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags_stream.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/completion_with_tags_stream.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [ "test_tag_stream", @@ -67,7 +68,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-08-38-25-665692_chatcmpl-8b67ffb8-4326-4e1b-bf4a-f70930c11c00", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata.json b/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata.json index 51f7ffa60a..82a115a089 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -74,7 +75,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-59-39-362554_chatcmpl-d20ba1d9-cda6-4773-822e-921ebcd426a0", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata_2.json b/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata_2.json index 5bd15e98cd..33e6b01bee 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata_2.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/complex_metadata_2.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -66,7 +67,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-10-06-50-957097_chatcmpl-62d4ad7c-291b-4fc7-a8a4-3ed0fc3912a5", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/empty_metadata.json b/tests/logging_callback_tests/langfuse_expected_request_body/empty_metadata.json index 803fe75270..f4040f1f8f 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/empty_metadata.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/empty_metadata.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -60,7 +61,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-59-32-878577_chatcmpl-1195f870-fd4d-4e38-8dc8-99dd3da5ab0b", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_function.json b/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_function.json index b9ac7aecba..77ca252c86 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_function.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_function.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -60,7 +61,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-59-36-161090_chatcmpl-1ee988c9-9133-4655-bbe4-b97ffb6e3dc9", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_lock.json b/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_lock.json index 803fe75270..f4040f1f8f 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_lock.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/metadata_with_lock.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -60,7 +61,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-59-32-878577_chatcmpl-1195f870-fd4d-4e38-8dc8-99dd3da5ab0b", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/nested_metadata.json b/tests/logging_callback_tests/langfuse_expected_request_body/nested_metadata.json index aec7f2ab86..f4a1bb9dce 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/nested_metadata.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/nested_metadata.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -66,7 +67,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-55-28-852503_chatcmpl-131cf0da-a47b-4cd1-850b-50fa077362ac", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata.json b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata.json index a05595299d..d895378e2c 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -66,7 +67,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-53-53-752422_chatcmpl-e99bc1d3-a393-493f-8afe-4507c0acff15", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata2.json b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata2.json index 769ab97d59..87eba33cff 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata2.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata2.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -70,7 +71,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-56-35-474752_chatcmpl-9b152610-3d1e-4731-a84e-d0341ea69a0f", diff --git a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata3.json b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata3.json index 0c41f0fc80..dd3bb4a301 100644 --- a/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata3.json +++ b/tests/logging_callback_tests/langfuse_expected_request_body/simple_metadata3.json @@ -19,7 +19,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "tags": [] }, @@ -74,7 +75,8 @@ "content": "Hello! How can I assist you today?", "role": "assistant", "tool_calls": null, - "function_call": null + "function_call": null, + "provider_specific_fields": null }, "level": "DEFAULT", "id": "time-09-56-38-784548_chatcmpl-438c8727-86b3-44d9-9b46-42330922cf50", diff --git a/tests/logging_callback_tests/test_langsmith_unit_test.py b/tests/logging_callback_tests/test_langsmith_unit_test.py index 2ec5f1a2e4..4a1807ec83 100644 --- a/tests/logging_callback_tests/test_langsmith_unit_test.py +++ b/tests/logging_callback_tests/test_langsmith_unit_test.py @@ -278,6 +278,7 @@ async def test_langsmith_key_based_logging(mocker): "role": "assistant", "tool_calls": None, "function_call": None, + "provider_specific_fields": None, }, } ], diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py index d5b3832971..33f013696b 100644 --- a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py @@ -9,13 +9,14 @@ from fastapi import HTTPException sys.path.insert(0, "../../../../../") import httpx + from litellm.proxy._experimental.mcp_server.mcp_server_manager import ( MCPServerManager, _deserialize_json_dict, ) from litellm.proxy._types import LiteLLM_MCPServerTable, MCPTransport from litellm.types.mcp import MCPAuth -from litellm.types.mcp_server.mcp_server_manager import MCPServer, MCPOAuthMetadata +from litellm.types.mcp_server.mcp_server_manager import MCPOAuthMetadata, MCPServer class TestMCPServerManager: @@ -237,13 +238,9 @@ class TestMCPServerManager: mock_client = MagicMock() mock_client.get = AsyncMock(return_value=mock_response) - async_client_context = MagicMock() - async_client_context.__aenter__ = AsyncMock(return_value=mock_client) - async_client_context.__aexit__ = AsyncMock(return_value=None) - with patch( - "litellm.proxy._experimental.mcp_server.mcp_server_manager.httpx.AsyncClient", - return_value=async_client_context, + "litellm.proxy._experimental.mcp_server.mcp_server_manager.get_async_httpx_client", + return_value=mock_client, ): servers, scopes = await manager._fetch_oauth_metadata_from_resource( "https://protected.example.com/.well-known/oauth" @@ -277,10 +274,6 @@ class TestMCPServerManager: mock_client = MagicMock() mock_client.get = AsyncMock(return_value=response_obj) - async_client_context = MagicMock() - async_client_context.__aenter__ = AsyncMock(return_value=mock_client) - async_client_context.__aexit__ = AsyncMock(return_value=None) - mock_metadata = MCPOAuthMetadata( scopes=None, authorization_url="https://example.com/auth", @@ -289,8 +282,8 @@ class TestMCPServerManager: ) with patch( - "litellm.proxy._experimental.mcp_server.mcp_server_manager.httpx.AsyncClient", - return_value=async_client_context, + "litellm.proxy._experimental.mcp_server.mcp_server_manager.get_async_httpx_client", + return_value=mock_client, ), patch.object( manager, "_fetch_oauth_metadata_from_resource",