TestMultipleMiddlewareChaining Class — langchain Architecture
Architecture documentation for the TestMultipleMiddlewareChaining class in test_system_message.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD df87c006_f0fb_9a0b_32d6_ec8fc84e317b["TestMultipleMiddlewareChaining"] a610b8e2_10fe_f60e_5de4_dde05dd5afb7["test_system_message.py"] df87c006_f0fb_9a0b_32d6_ec8fc84e317b -->|defined in| a610b8e2_10fe_f60e_5de4_dde05dd5afb7 61e77994_e1f1_8690_1d25_b5eb47a45e00["test_multiple_middleware_can_chain_modifications()"] df87c006_f0fb_9a0b_32d6_ec8fc84e317b -->|method| 61e77994_e1f1_8690_1d25_b5eb47a45e00 83a76975_5645_0981_63b9_391dcf80e263["test_middleware_can_mix_string_and_system_message_updates()"] df87c006_f0fb_9a0b_32d6_ec8fc84e317b -->|method| 83a76975_5645_0981_63b9_391dcf80e263
Relationship Graph
Source Code
libs/langchain_v1/tests/unit_tests/agents/test_system_message.py lines 452–570
class TestMultipleMiddlewareChaining:
"""Test multiple middleware modifying system message in sequence."""
def test_multiple_middleware_can_chain_modifications(self) -> None:
"""Test that multiple middleware can modify system message sequentially."""
def first_middleware(
request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse]
) -> ModelResponse:
"""First middleware sets base system message."""
new_request = request.override(
system_message=SystemMessage(
content="Base prompt",
additional_kwargs={"middleware_1": "applied"},
)
)
return handler(new_request)
def second_middleware(
request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse]
) -> ModelResponse:
"""Second middleware appends to system message."""
assert request.system_message is not None
current_content = request.system_message.text
current_kwargs = request.system_message.additional_kwargs
new_request = request.override(
system_message=SystemMessage(
content=current_content + " + middleware 2",
additional_kwargs={**current_kwargs, "middleware_2": "applied"},
)
)
return handler(new_request)
def third_middleware(
request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse]
) -> ModelResponse:
"""Third middleware appends to system message."""
assert request.system_message is not None
current_content = request.system_message.text
current_kwargs = request.system_message.additional_kwargs
new_request = request.override(
system_message=SystemMessage(
content=current_content + " + middleware 3",
additional_kwargs={**current_kwargs, "middleware_3": "applied"},
)
)
return handler(new_request)
model = GenericFakeChatModel(messages=iter([AIMessage(content="response")]))
request = ModelRequest(
model=model,
system_message=None,
messages=[],
tool_choice=None,
tools=[],
response_format=None,
state=AgentState(messages=[]),
runtime=Runtime(),
)
def final_handler(req: ModelRequest) -> ModelResponse:
# Verify all middleware applied
assert req.system_message is not None
assert req.system_message.text == "Base prompt + middleware 2 + middleware 3"
assert req.system_message.additional_kwargs["middleware_1"] == "applied"
assert req.system_message.additional_kwargs["middleware_2"] == "applied"
assert req.system_message.additional_kwargs["middleware_3"] == "applied"
return ModelResponse(result=[AIMessage(content="response")])
# Chain middleware calls
first_middleware(
request,
lambda req: second_middleware(req, lambda req2: third_middleware(req2, final_handler)),
)
def test_middleware_can_mix_string_and_system_message_updates(self) -> None:
"""Test mixing string and SystemMessage updates across middleware."""
def string_middleware(
Source
Frequently Asked Questions
What is the TestMultipleMiddlewareChaining class?
TestMultipleMiddlewareChaining is a class in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/test_system_message.py.
Where is TestMultipleMiddlewareChaining defined?
TestMultipleMiddlewareChaining is defined in libs/langchain_v1/tests/unit_tests/agents/test_system_message.py at line 452.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free