| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- """Test that mcp_config convert_schemas_to_strict is respected."""
- from unittest.mock import AsyncMock, patch
- import pytest
- from agents import FunctionTool
- class _DummyServer:
- def __init__(self) -> None:
- self.name = "test_server"
- @pytest.mark.asyncio
- @pytest.mark.parametrize(
- ("mcp_config", "expected_strict"),
- [
- pytest.param({"convert_schemas_to_strict": False}, False, id="explicit-false"),
- pytest.param({"convert_schemas_to_strict": True}, True, id="explicit-true"),
- pytest.param(None, False, id="default-missing"),
- pytest.param({}, False, id="default-empty"),
- ],
- )
- @patch("agents.mcp.util.MCPUtil.get_function_tools")
- @patch("agency_swarm.tools.mcp_converter.default_mcp_manager")
- async def test_mcp_config_convert_schemas_to_strict_is_propagated(
- mock_manager,
- mock_get_function_tools: AsyncMock,
- mcp_config: dict[str, bool] | None,
- expected_strict: bool,
- ) -> None:
- from agency_swarm import Agent
- test_tool = FunctionTool(
- name="test_tool",
- description="Test tool",
- params_json_schema={"type": "object", "properties": {}},
- on_invoke_tool=AsyncMock(return_value="test"),
- strict_json_schema=expected_strict,
- )
- observed_convert_values: list[bool] = []
- async def capture_convert_schemas_to_strict(server, strict, context, agent):
- observed_convert_values.append(strict)
- return [test_tool]
- mock_get_function_tools.side_effect = capture_convert_schemas_to_strict
- server = _DummyServer()
- mock_manager.get.return_value = None
- mock_manager.register.side_effect = lambda srv: srv
- mock_manager._ensure_driver.return_value = None
- agent_kwargs = {
- "name": "TestAgent",
- "mcp_servers": [server],
- }
- if mcp_config is not None:
- agent_kwargs["mcp_config"] = mcp_config
- Agent(**agent_kwargs)
- assert len(observed_convert_values) == 1
- observed_value = observed_convert_values[0]
- assert type(observed_value) is bool
- assert observed_value is expected_strict
|