Home / Function/ test_mixed_middleware_composition_async_path_fails_with_sync_only() — langchain Function Reference

test_mixed_middleware_composition_async_path_fails_with_sync_only() — langchain Function Reference

Architecture documentation for the test_mixed_middleware_composition_async_path_fails_with_sync_only() function in test_sync_async_wrappers.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  20b56989_a6d2_b59b_34e9_720ef7799e73["test_mixed_middleware_composition_async_path_fails_with_sync_only()"]
  dcfb9efa_1e8c_d646_a0b4_9a9d7afddd2c["TestSyncAsyncMiddlewareComposition"]
  20b56989_a6d2_b59b_34e9_720ef7799e73 -->|defined in| dcfb9efa_1e8c_d646_a0b4_9a9d7afddd2c
  2a7a396d_560d_b909_7682_09221ed97fc7["wrap_tool_call()"]
  20b56989_a6d2_b59b_34e9_720ef7799e73 -->|calls| 2a7a396d_560d_b909_7682_09221ed97fc7
  f42a5199_3b5b_01a0_d6db_0e1554648695["awrap_tool_call()"]
  20b56989_a6d2_b59b_34e9_720ef7799e73 -->|calls| f42a5199_3b5b_01a0_d6db_0e1554648695
  style 20b56989_a6d2_b59b_34e9_720ef7799e73 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_sync_async_wrappers.py lines 265–312

    async def test_mixed_middleware_composition_async_path_fails_with_sync_only(
        self,
    ) -> None:
        """Multiple middleware on async path fails if any are sync-only."""

        class SyncOnlyMiddleware(AgentMiddleware):
            name = "SyncOnly"

            def wrap_tool_call(
                self,
                request: ToolCallRequest,
                handler: Callable[[ToolCallRequest], ToolMessage | Command[Any]],
            ) -> ToolMessage | Command[Any]:
                return handler(request)

        class AsyncOnlyMiddleware(AgentMiddleware):
            name = "AsyncOnly"

            async def awrap_tool_call(
                self,
                request: ToolCallRequest,
                handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]],
            ) -> ToolMessage | Command[Any]:
                return await handler(request)

        model = FakeToolCallingModel(
            tool_calls=[
                [ToolCall(name="search", args={"query": "test"}, id="1")],
                [],
            ]
        )

        agent = create_agent(
            model=model,
            tools=[search],
            middleware=[
                SyncOnlyMiddleware(),
                AsyncOnlyMiddleware(),
            ],
            checkpointer=InMemorySaver(),
        )

        # Should raise NotImplementedError because SyncOnlyMiddleware can't run on async path
        with pytest.raises(NotImplementedError):
            await agent.ainvoke(
                {"messages": [HumanMessage("Search")]},
                {"configurable": {"thread_id": "test"}},
            )

Domain

Subdomains

Frequently Asked Questions

What does test_mixed_middleware_composition_async_path_fails_with_sync_only() do?
test_mixed_middleware_composition_async_path_fails_with_sync_only() is a function in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_sync_async_wrappers.py.
Where is test_mixed_middleware_composition_async_path_fails_with_sync_only() defined?
test_mixed_middleware_composition_async_path_fails_with_sync_only() is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_sync_async_wrappers.py at line 265.
What does test_mixed_middleware_composition_async_path_fails_with_sync_only() call?
test_mixed_middleware_composition_async_path_fails_with_sync_only() calls 2 function(s): awrap_tool_call, wrap_tool_call.

Analyze Your Own Codebase

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

Try Supermodel Free