Home / Class/ TestAsyncWrapModelCall Class — langchain Architecture

TestAsyncWrapModelCall Class — langchain Architecture

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

Entity Profile

Dependency Diagram

graph TD
  75e76fa8_8e23_8ada_b149_8fa3fd341b70["TestAsyncWrapModelCall"]
  949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e["AgentMiddleware"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|extends| 949c7cf4_56fe_f3b4_cd89_9631a7e9cb1e
  0f829642_e361_67a1_cbca_f82839bbbd31["GenericFakeChatModel"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|extends| 0f829642_e361_67a1_cbca_f82839bbbd31
  573473e5_eb93_a7d7_84ba_c975071c09af["test_wrap_model_call.py"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|defined in| 573473e5_eb93_a7d7_84ba_c975071c09af
  2e11e37c_8880_df9b_8469_c973104f6b4a["test_async_model_with_middleware()"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|method| 2e11e37c_8880_df9b_8469_c973104f6b4a
  a22d9207_3949_0a51_b352_3861c56117b7["test_async_retry()"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|method| a22d9207_3949_0a51_b352_3861c56117b7
  103117dd_d442_12c9_71a5_e5d722f90eff["test_decorator_with_async_agent()"]
  75e76fa8_8e23_8ada_b149_8fa3fd341b70 -->|method| 103117dd_d442_12c9_71a5_e5d722f90eff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py lines 1379–1463

class TestAsyncWrapModelCall:
    """Test async execution with wrap_model_call."""

    async def test_async_model_with_middleware(self) -> None:
        """Test that wrap_model_call works with async model execution."""
        log = []

        class LoggingMiddleware(AgentMiddleware):
            async def awrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
            ) -> ModelCallResult:
                log.append("before")
                result = await handler(request)
                log.append("after")
                return result

        model = GenericFakeChatModel(messages=iter([AIMessage(content="Async response")]))
        agent = create_agent(model=model, middleware=[LoggingMiddleware()])

        result = await agent.ainvoke({"messages": [HumanMessage("Test")]})

        assert log == ["before", "after"]
        assert result["messages"][1].content == "Async response"

    async def test_async_retry(self) -> None:
        """Test retry logic with async execution."""
        call_count = {"value": 0}

        class AsyncFailOnceThenSucceed(GenericFakeChatModel):
            @override
            async def _agenerate(
                self,
                messages: list[BaseMessage],
                stop: list[str] | None = None,
                run_manager: AsyncCallbackManagerForLLMRun | None = None,
                **kwargs: Any,
            ) -> ChatResult:
                call_count["value"] += 1
                if call_count["value"] == 1:
                    msg = "First async call fails"
                    raise ValueError(msg)
                return await super()._agenerate(messages, **kwargs)

        class RetryMiddleware(AgentMiddleware):
            async def awrap_model_call(
                self,
                request: ModelRequest,
                handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
            ) -> ModelCallResult:
                try:
                    return await handler(request)
                except Exception:
                    return await handler(request)

        model = AsyncFailOnceThenSucceed(messages=iter([AIMessage(content="Async success")]))
        agent = create_agent(model=model, middleware=[RetryMiddleware()])

        result = await agent.ainvoke({"messages": [HumanMessage("Test")]})

        assert call_count["value"] == 2
        assert result["messages"][1].content == "Async success"

    async def test_decorator_with_async_agent(self) -> None:
        """Test that decorated middleware works with async agent invocation."""
        call_log = []

        @wrap_model_call
        async def logging_middleware(
            request: ModelRequest,
            handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
        ) -> ModelCallResult:
            call_log.append("before")
            result = await handler(request)
            call_log.append("after")
            return result

        model = GenericFakeChatModel(messages=iter([AIMessage(content="Async response")]))
        agent = create_agent(model=model, middleware=[logging_middleware])

Frequently Asked Questions

What is the TestAsyncWrapModelCall class?
TestAsyncWrapModelCall 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 TestAsyncWrapModelCall defined?
TestAsyncWrapModelCall is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py at line 1379.
What does TestAsyncWrapModelCall extend?
TestAsyncWrapModelCall extends AgentMiddleware, GenericFakeChatModel.

Analyze Your Own Codebase

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

Try Supermodel Free