Home / Class/ TestMiddlewareComposition Class — langchain Architecture

TestMiddlewareComposition Class — langchain Architecture

Architecture documentation for the TestMiddlewareComposition class in test_wrap_model_call.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2["TestMiddlewareComposition"]
  949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e["AgentMiddleware"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|extends| 949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e
  0f829642_e361_67a1_cbca_f82839bbbd31["GenericFakeChatModel"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|extends| 0f829642_e361_67a1_cbca_f82839bbbd31
  573473e5_eb93_a7d7_84ba_c975071c09af["test_wrap_model_call.py"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|defined in| 573473e5_eb93_a7d7_84ba_c975071c09af
  3f13befd_5359_56b4_a806_a437a1494b0f["test_two_middleware_composition()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| 3f13befd_5359_56b4_a806_a437a1494b0f
  2310f356_7b5d_fbc8_cc38_8dfd009e0bd6["test_three_middleware_composition()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| 2310f356_7b5d_fbc8_cc38_8dfd009e0bd6
  034ff3f8_6d76_ab7c_37fe_205bde051f5e["test_retry_with_logging()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| 034ff3f8_6d76_ab7c_37fe_205bde051f5e
  a85ee387_7761_987a_8ee0_f9f12f9db4dd["test_multiple_transformations()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| a85ee387_7761_987a_8ee0_f9f12f9db4dd
  25316e78_9cc6_2098_be03_2ab68b6a4b5f["test_retry_outer_transform_inner()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| 25316e78_9cc6_2098_be03_2ab68b6a4b5f
  19628866_4df7_bf45_3979_59bc6751e81e["test_middle_retry_middleware()"]
  2d096fab_8a25_1dfa_6e53_a3f5603e55c2 -->|method| 19628866_4df7_bf45_3979_59bc6751e81e

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 678–1002

class TestMiddlewareComposition:
    """Test composition of multiple wrap_model_call middleware."""

    def test_two_middleware_composition(self) -> None:
        """Test that two middleware compose correctly (outer wraps inner)."""
        execution_order = []

        class OuterMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                execution_order.append("outer-before")
                response = handler(request)
                execution_order.append("outer-after")
                return response

        class InnerMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                execution_order.append("inner-before")
                response = handler(request)
                execution_order.append("inner-after")
                return response

        model = GenericFakeChatModel(messages=iter([AIMessage(content="Response")]))
        agent = create_agent(model=model, middleware=[OuterMiddleware(), InnerMiddleware()])

        agent.invoke({"messages": [HumanMessage("Test")]})

        # Outer wraps inner: outer-before, inner-before, model, inner-after, outer-after
        assert execution_order == [
            "outer-before",
            "inner-before",
            "inner-after",
            "outer-after",
        ]

    def test_three_middleware_composition(self) -> None:
        """Test composition of three middleware."""
        execution_order = []

        class FirstMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                execution_order.append("first-before")
                response = handler(request)
                execution_order.append("first-after")
                return response

        class SecondMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                execution_order.append("second-before")
                response = handler(request)
                execution_order.append("second-after")
                return response

        class ThirdMiddleware(AgentMiddleware):
            def wrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], ModelResponse],
            ) -> ModelCallResult:
                execution_order.append("third-before")
                response = handler(request)
                execution_order.append("third-after")
                return response

        model = GenericFakeChatModel(messages=iter([AIMessage(content="Response")]))
        agent = create_agent(

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free