test_multiple_middleware_instances() — langchain Function Reference
Architecture documentation for the test_multiple_middleware_instances() function in test_tool_call_limit.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 3066f0eb_654f_a880_5fad_6c8937a7a43e["test_multiple_middleware_instances()"] a75b8390_08d3_7137_c8a7_9d78fc0c4517["test_tool_call_limit.py"] 3066f0eb_654f_a880_5fad_6c8937a7a43e -->|defined in| a75b8390_08d3_7137_c8a7_9d78fc0c4517 style 3066f0eb_654f_a880_5fad_6c8937a7a43e fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_call_limit.py lines 255–314
def test_multiple_middleware_instances() -> None:
"""Test that multiple middleware instances can coexist and track independently."""
@tool
def search(query: str) -> str:
"""Search for information."""
return f"Results for {query}"
@tool
def calculator(expression: str) -> str:
"""Calculate an expression."""
return f"Result: {expression}"
model = FakeToolCallingModel(
tool_calls=[
[
ToolCall(name="search", args={"query": "test"}, id="1"),
ToolCall(name="calculator", args={"expression": "1+1"}, id="2"),
],
[
ToolCall(name="search", args={"query": "test2"}, id="3"),
ToolCall(name="calculator", args={"expression": "2+2"}, id="4"),
],
[
ToolCall(name="search", args={"query": "test3"}, id="5"),
],
[],
]
)
# Create two middleware instances - one for each tool
search_limiter = ToolCallLimitMiddleware(
tool_name="search", thread_limit=2, exit_behavior="end"
)
calc_limiter = ToolCallLimitMiddleware(
tool_name="calculator", thread_limit=2, exit_behavior="end"
)
agent = create_agent(
model=model,
tools=[search, calculator],
middleware=[search_limiter, calc_limiter],
checkpointer=InMemorySaver(),
)
result = agent.invoke(
{"messages": [HumanMessage("Question")]},
{"configurable": {"thread_id": "test_thread"}},
)
# The agent should stop after the second iteration
# because search will hit its limit (3 calls > 2 limit)
ai_limit_messages = []
for msg in result["messages"]:
if not isinstance(msg, AIMessage):
continue
assert isinstance(msg.content, str)
if "limit" in msg.content.lower():
ai_limit_messages.append(msg)
assert len(ai_limit_messages) > 0, "Should have AI message explaining limit was exceeded"
Domain
Subdomains
Defined In
Source
Frequently Asked Questions
What does test_multiple_middleware_instances() do?
test_multiple_middleware_instances() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_call_limit.py.
Where is test_multiple_middleware_instances() defined?
test_multiple_middleware_instances() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_call_limit.py at line 255.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free