Home / Function/ test_dynamic_tool_chained_middleware() — langchain Function Reference

test_dynamic_tool_chained_middleware() — langchain Function Reference

Architecture documentation for the test_dynamic_tool_chained_middleware() function in test_dynamic_tools.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  d7b6b378_c955_4dca_181a_cbcac973f5d5["test_dynamic_tool_chained_middleware()"]
  ed3bf1bf_abaf_832a_a548_adfcdbed05b3["test_dynamic_tools.py"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|defined in| ed3bf1bf_abaf_832a_a548_adfcdbed05b3
  fe27ad32_78c6_de3f_c030_9c2e48e1cd22["invoke_agent()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| fe27ad32_78c6_de3f_c030_9c2e48e1cd22
  718649e7_ca41_a633_085d_48f52a118df2["get_tool_messages()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| 718649e7_ca41_a633_085d_48f52a118df2
  1ea5936a_6fbd_698f_ab12_c23421e6c22a["wrap_tool_call()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| 1ea5936a_6fbd_698f_ab12_c23421e6c22a
  a972f76f_db4d_2e76_d6e7_7869dfa7e45e["awrap_tool_call()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| a972f76f_db4d_2e76_d6e7_7869dfa7e45e
  a863f7c6_2833_0127_d959_f352a118a8d8["wrap_model_call()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| a863f7c6_2833_0127_d959_f352a118a8d8
  ed3a9571_b04a_1815_dec2_1242427f0937["awrap_model_call()"]
  d7b6b378_c955_4dca_181a_cbcac973f5d5 -->|calls| ed3a9571_b04a_1815_dec2_1242427f0937
  style d7b6b378_c955_4dca_181a_cbcac973f5d5 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py lines 347–409

async def test_dynamic_tool_chained_middleware(*, use_async: bool) -> None:
    """Test dynamic tools work with multiple middleware in chain."""
    call_log: list[str] = []

    class LoggingMiddleware(AgentMiddleware):
        def __init__(self, label: str) -> None:
            self._label = label

        def wrap_model_call(
            self,
            request: ModelRequest,
            handler: Callable[[ModelRequest], ModelResponse],
        ) -> ModelCallResult:
            call_log.append(f"{self._label}_model")
            return handler(request)

        async def awrap_model_call(
            self,
            request: ModelRequest,
            handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
        ) -> ModelCallResult:
            call_log.append(f"{self._label}_model")
            return await handler(request)

        def wrap_tool_call(
            self,
            request: ToolCallRequest,
            handler: Callable[[ToolCallRequest], ToolMessage | Command[Any]],
        ) -> ToolMessage | Command[Any]:
            call_log.append(f"{self._label}_tool")
            return handler(request)

        async def awrap_tool_call(
            self,
            request: ToolCallRequest,
            handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]],
        ) -> ToolMessage | Command[Any]:
            call_log.append(f"{self._label}_tool")
            return await handler(request)

    model = FakeToolCallingModel(
        tool_calls=[
            [ToolCall(name="dynamic_tool", args={"value": "chained"}, id="1")],
            [],
        ]
    )

    agent = create_agent(
        model=model,
        tools=[static_tool],
        middleware=[LoggingMiddleware("first"), DynamicToolMiddleware()],
        checkpointer=InMemorySaver(),
    )

    result = await invoke_agent(agent, "Use the dynamic tool", use_async=use_async)

    tool_messages = get_tool_messages(result)
    assert len(tool_messages) == 1
    assert tool_messages[0].name == "dynamic_tool"

    # Verify middleware chain was called
    assert "first_model" in call_log
    assert "first_tool" in call_log

Domain

Subdomains

Frequently Asked Questions

What does test_dynamic_tool_chained_middleware() do?
test_dynamic_tool_chained_middleware() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py.
Where is test_dynamic_tool_chained_middleware() defined?
test_dynamic_tool_chained_middleware() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py at line 347.
What does test_dynamic_tool_chained_middleware() call?
test_dynamic_tool_chained_middleware() calls 6 function(s): awrap_model_call, awrap_tool_call, get_tool_messages, invoke_agent, wrap_model_call, wrap_tool_call.

Analyze Your Own Codebase

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

Try Supermodel Free