Home / Function/ test_max_tools_with_duplicates() — langchain Function Reference

test_max_tools_with_duplicates() — langchain Function Reference

Architecture documentation for the test_max_tools_with_duplicates() function in test_tool_selection.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  930426e2_7d66_b5c1_f4fd_e0acab02d9de["test_max_tools_with_duplicates()"]
  35f5015e_df33_4916_06b8_dc32a7e06b79["TestDuplicateAndInvalidTools"]
  930426e2_7d66_b5c1_f4fd_e0acab02d9de -->|defined in| 35f5015e_df33_4916_06b8_dc32a7e06b79
  style 930426e2_7d66_b5c1_f4fd_e0acab02d9de fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py lines 574–632

    def test_max_tools_with_duplicates(self) -> None:
        """Test that max_tools works correctly with duplicate selections."""
        model_requests: list[ModelRequest] = []

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

        # Selector returns duplicates but max_tools=2
        tool_selection_model = FakeModel(
            messages=cycle(
                [
                    AIMessage(
                        content="",
                        tool_calls=[
                            {
                                "name": "ToolSelectionResponse",
                                "id": "1",
                                "args": {
                                    "tools": [
                                        "get_weather",
                                        "get_weather",
                                        "search_web",
                                        "search_web",
                                        "calculate",
                                    ]
                                },
                            }
                        ],
                    ),
                ]
            )
        )

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

        tool_selector = LLMToolSelectorMiddleware(max_tools=2, model=tool_selection_model)

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

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

        # Should deduplicate and respect max_tools
        assert len(model_requests) > 0
        for request in model_requests:
            tool_names = []
            for tool_ in request.tools:
                assert isinstance(tool_, BaseTool)
                tool_names.append(tool_.name)
            assert len(tool_names) == 2
            assert "get_weather" in tool_names
            assert "search_web" in tool_names

Domain

Subdomains

Frequently Asked Questions

What does test_max_tools_with_duplicates() do?
test_max_tools_with_duplicates() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py.
Where is test_max_tools_with_duplicates() defined?
test_max_tools_with_duplicates() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_selection.py at line 574.

Analyze Your Own Codebase

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

Try Supermodel Free