test_middle_retry_middleware() — langchain Function Reference
Architecture documentation for the test_middle_retry_middleware() function in test_wrap_model_call.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 19628866_4df7_bf45_3979_59bc6751e81e["test_middle_retry_middleware()"] 2d096fab_8a25_1dfa_6e53_a3f5603e55c2["TestMiddlewareComposition"] 19628866_4df7_bf45_3979_59bc6751e81e -->|defined in| 2d096fab_8a25_1dfa_6e53_a3f5603e55c2 style 19628866_4df7_bf45_3979_59bc6751e81e fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 926–1002
def test_middle_retry_middleware(self) -> None:
"""Test that middle middleware doing retry causes inner to execute twice."""
execution_order = []
model_calls = []
class OuterMiddleware(AgentMiddleware):
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse],
) -> ModelCallResult:
execution_order.append("outer-before")
result = handler(request)
execution_order.append("outer-after")
return result
class MiddleRetryMiddleware(AgentMiddleware):
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse],
) -> ModelCallResult:
execution_order.append("middle-before")
# Always retry once (call handler twice)
result = handler(request)
execution_order.append("middle-retry")
result = handler(request)
execution_order.append("middle-after")
return result
class InnerMiddleware(AgentMiddleware):
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse],
) -> ModelCallResult:
execution_order.append("inner-before")
result = handler(request)
execution_order.append("inner-after")
return result
class TrackingModel(GenericFakeChatModel):
@override
def _generate(
self,
messages: list[BaseMessage],
stop: list[str] | None = None,
run_manager: CallbackManagerForLLMRun | None = None,
**kwargs: Any,
) -> ChatResult:
model_calls.append(len(messages))
return super()._generate(messages, **kwargs)
model = TrackingModel(
messages=iter([AIMessage(content="Response 1"), AIMessage(content="Response 2")])
)
agent = create_agent(
model=model,
middleware=[OuterMiddleware(), MiddleRetryMiddleware(), InnerMiddleware()],
)
agent.invoke({"messages": [HumanMessage("Test")]})
# Middle yields twice, so inner runs twice
assert execution_order == [
"outer-before",
"middle-before",
"inner-before", # First execution
"inner-after",
"middle-retry", # Middle yields again
"inner-before", # Second execution
"inner-after",
"middle-after",
"outer-after",
]
# Model should be called twice
assert len(model_calls) == 2
Domain
Subdomains
Source
Frequently Asked Questions
What does test_middle_retry_middleware() do?
test_middle_retry_middleware() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py.
Where is test_middle_retry_middleware() defined?
test_middle_retry_middleware() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py at line 926.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free