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
Calls
Source
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