Home / Class/ TestMaxToolsLimiting Class — langchain Architecture

TestMaxToolsLimiting Class — langchain Architecture

Architecture documentation for the TestMaxToolsLimiting class in test_tool_selection.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  f414d4bb_d578_5e97_a076_b6127f4f90dd["TestMaxToolsLimiting"]
  18e85ff8_9a5d_f800_f722_027398dc89e7["BaseTool"]
  f414d4bb_d578_5e97_a076_b6127f4f90dd -->|extends| 18e85ff8_9a5d_f800_f722_027398dc89e7
  f96107c8_8757_b550_ad6f_b1dcda0da20b["test_tool_selection.py"]
  f414d4bb_d578_5e97_a076_b6127f4f90dd -->|defined in| f96107c8_8757_b550_ad6f_b1dcda0da20b
  301e563b_befa_da9f_437f_2ad711bd4ff9["test_max_tools_limits_selection()"]
  f414d4bb_d578_5e97_a076_b6127f4f90dd -->|method| 301e563b_befa_da9f_437f_2ad711bd4ff9
  6bb118a7_e9ab_3138_028a_96ace800c797["test_no_max_tools_uses_all_selected()"]
  f414d4bb_d578_5e97_a076_b6127f4f90dd -->|method| 6bb118a7_e9ab_3138_028a_96ace800c797

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py lines 210–334

class TestMaxToolsLimiting:
    """Test max_tools limiting behavior."""

    def test_max_tools_limits_selection(self) -> None:
        """Test that max_tools limits selection when model selects too many tools."""
        model_requests = []

        @wrap_model_call
        def trace_model_requests(
            request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse]
        ) -> ModelResponse:
            model_requests.append(request)
            return handler(request)

        # Selector model tries to select 4 tools
        tool_selection_model = FakeModel(
            messages=cycle(
                [
                    AIMessage(
                        content="",
                        tool_calls=[
                            {
                                "name": "ToolSelectionResponse",
                                "id": "1",
                                "args": {
                                    "tools": [
                                        "get_weather",
                                        "search_web",
                                        "calculate",
                                        "send_email",
                                    ]
                                },
                            }
                        ],
                    ),
                ]
            )
        )

        model = FakeModel(messages=iter([AIMessage(content="Done")]))

        # But max_tools=2, so only first 2 should be used
        tool_selector = LLMToolSelectorMiddleware(max_tools=2, model=tool_selection_model)

        agent = create_agent(
            model=model,
            tools=[get_weather, search_web, calculate, send_email],
            middleware=[tool_selector, trace_model_requests],
        )

        agent.invoke({"messages": [HumanMessage("test")]})

        # Verify only 2 tools were passed to the main model
        assert len(model_requests) > 0
        for request in model_requests:
            assert len(request.tools) == 2
            tool_names = []
            for tool_ in request.tools:
                assert isinstance(tool_, BaseTool)
                tool_names.append(tool_.name)
            # Should be first 2 from the selection
            assert tool_names == ["get_weather", "search_web"]

    def test_no_max_tools_uses_all_selected(self) -> None:
        """Test that when max_tools is None, all selected tools are used."""
        model_requests = []

        @wrap_model_call
        def trace_model_requests(
            request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse]
        ) -> ModelResponse:
            model_requests.append(request)
            return handler(request)

        tool_selection_model = FakeModel(
            messages=cycle(
                [
                    AIMessage(
                        content="",
                        tool_calls=[
                            {

Extends

Frequently Asked Questions

What is the TestMaxToolsLimiting class?
TestMaxToolsLimiting is a class in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py.
Where is TestMaxToolsLimiting defined?
TestMaxToolsLimiting is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py at line 210.
What does TestMaxToolsLimiting extend?
TestMaxToolsLimiting extends BaseTool.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free