Home / Class/ DynamicToolMiddleware Class — langchain Architecture

DynamicToolMiddleware Class — langchain Architecture

Architecture documentation for the DynamicToolMiddleware class in test_dynamic_tools.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28["DynamicToolMiddleware"]
  949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e["AgentMiddleware"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|extends| 949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e
  ed3bf1bf_abaf_832a_a548_adfcdbed05b3["test_dynamic_tools.py"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|defined in| ed3bf1bf_abaf_832a_a548_adfcdbed05b3
  437e50e6_0bfa_b2c3_9af2_f42a67b9eb92["wrap_model_call()"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|method| 437e50e6_0bfa_b2c3_9af2_f42a67b9eb92
  e01e4194_b01c_8e50_1e99_c984c3614db1["awrap_model_call()"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|method| e01e4194_b01c_8e50_1e99_c984c3614db1
  e4cdc81b_493e_288d_8e27_3d1f6e4e457f["wrap_tool_call()"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|method| e4cdc81b_493e_288d_8e27_3d1f6e4e457f
  67b3b52a_2218_b6e2_9500_cdaad5e1483d["awrap_tool_call()"]
  1fa34ffe_d005_3b8a_66f7_8634ed0d3c28 -->|method| 67b3b52a_2218_b6e2_9500_cdaad5e1483d

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py lines 51–86

class DynamicToolMiddleware(AgentMiddleware):
    """Middleware that dynamically adds and handles a tool (sync and async)."""

    def wrap_model_call(
        self,
        request: ModelRequest,
        handler: Callable[[ModelRequest], ModelResponse],
    ) -> ModelCallResult:
        updated = request.override(tools=[*request.tools, dynamic_tool])
        return handler(updated)

    async def awrap_model_call(
        self,
        request: ModelRequest,
        handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
    ) -> ModelCallResult:
        updated = request.override(tools=[*request.tools, dynamic_tool])
        return await handler(updated)

    def wrap_tool_call(
        self,
        request: ToolCallRequest,
        handler: Callable[[ToolCallRequest], ToolMessage | Command[Any]],
    ) -> ToolMessage | Command[Any]:
        if request.tool_call["name"] == "dynamic_tool":
            return handler(request.override(tool=dynamic_tool))
        return handler(request)

    async def awrap_tool_call(
        self,
        request: ToolCallRequest,
        handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]],
    ) -> ToolMessage | Command[Any]:
        if request.tool_call["name"] == "dynamic_tool":
            return await handler(request.override(tool=dynamic_tool))
        return await handler(request)

Extends

Frequently Asked Questions

What is the DynamicToolMiddleware class?
DynamicToolMiddleware is a class in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py.
Where is DynamicToolMiddleware defined?
DynamicToolMiddleware is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py at line 51.
What does DynamicToolMiddleware extend?
DynamicToolMiddleware extends AgentMiddleware.

Analyze Your Own Codebase

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

Try Supermodel Free