TestLLMToolEmulatorMultipleTools Class — langchain Architecture
Architecture documentation for the TestLLMToolEmulatorMultipleTools class in test_tool_emulator.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 9b3f64f0_79d5_a9bf_170e_4a7bc7691e18["TestLLMToolEmulatorMultipleTools"] de5a7878_b3fe_95d7_2575_7f534546dc1e["AIMessage"] 9b3f64f0_79d5_a9bf_170e_4a7bc7691e18 -->|extends| de5a7878_b3fe_95d7_2575_7f534546dc1e 5b00cf78_0f18_c9ad_fc5f_85cc0378daf1["test_tool_emulator.py"] 9b3f64f0_79d5_a9bf_170e_4a7bc7691e18 -->|defined in| 5b00cf78_0f18_c9ad_fc5f_85cc0378daf1 0fbaa324_b0c1_8fa3_1579_cc2857638eee["test_emulate_multiple_tools()"] 9b3f64f0_79d5_a9bf_170e_4a7bc7691e18 -->|method| 0fbaa324_b0c1_8fa3_1579_cc2857638eee 2e921c55_7fd8_f39a_b7d5_28c0b10cd6e3["test_mixed_emulated_and_real_tools()"] 9b3f64f0_79d5_a9bf_170e_4a7bc7691e18 -->|method| 2e921c55_7fd8_f39a_b7d5_28c0b10cd6e3
Relationship Graph
Source Code
libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py lines 287–360
class TestLLMToolEmulatorMultipleTools:
"""Test emulating multiple tools."""
def test_emulate_multiple_tools(self) -> None:
"""Test that multiple tools can be emulated."""
agent_model = FakeModel(
messages=cycle(
[
AIMessage(
content="",
tool_calls=[
{"name": "get_weather", "id": "1", "args": {"location": "Paris"}},
{"name": "search_web", "id": "2", "args": {"query": "Paris"}},
],
),
AIMessage(content="Both tools executed."),
]
)
)
emulator_model = FakeEmulatorModel(
responses=["Emulated weather: 20°C", "Emulated search results for Paris"]
)
emulator = LLMToolEmulator(tools=["get_weather", "search_web"], model=emulator_model)
agent = create_agent(
model=agent_model,
tools=[get_weather, search_web, calculator],
middleware=[emulator],
)
result = agent.invoke({"messages": [HumanMessage("Get weather and search for Paris")]})
# Both tools should be emulated without raising NotImplementedError
assert isinstance(result["messages"][-1], AIMessage)
def test_mixed_emulated_and_real_tools(self) -> None:
"""Test that some tools can be emulated while others execute normally."""
agent_model = FakeModel(
messages=cycle(
[
AIMessage(
content="",
tool_calls=[
{"name": "get_weather", "id": "1", "args": {"location": "NYC"}},
{"name": "calculator", "id": "2", "args": {"expression": "10*2"}},
],
),
AIMessage(content="Both completed."),
]
)
)
emulator_model = FakeEmulatorModel(responses=["Emulated: 65°F in NYC"])
# Only emulate get_weather
emulator = LLMToolEmulator(tools=["get_weather"], model=emulator_model)
agent = create_agent(
model=agent_model,
tools=[get_weather, calculator],
middleware=[emulator],
)
result = agent.invoke({"messages": [HumanMessage("Weather and calculate")]})
tool_messages = [msg for msg in result["messages"] if hasattr(msg, "name")]
assert len(tool_messages) >= 2
# Calculator should have real result
calc_messages = [msg for msg in tool_messages if msg.name == "calculator"]
assert len(calc_messages) > 0
assert "Result: 20" in calc_messages[0].content
Defined In
Extends
Source
Frequently Asked Questions
What is the TestLLMToolEmulatorMultipleTools class?
TestLLMToolEmulatorMultipleTools is a class in the langchain codebase, defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py.
Where is TestLLMToolEmulatorMultipleTools defined?
TestLLMToolEmulatorMultipleTools is defined in libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_emulator.py at line 287.
What does TestLLMToolEmulatorMultipleTools extend?
TestLLMToolEmulatorMultipleTools extends AIMessage.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free