test_dynamic_tools.py — langchain Source File
Architecture documentation for test_dynamic_tools.py, a python file in the langchain codebase. 11 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR d67e9997_c33d_b023_a29b_2a9611d9b93e["test_dynamic_tools.py"] a327e534_84f6_5308_58ca_5727d5eda0cf["asyncio"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> a327e534_84f6_5308_58ca_5727d5eda0cf cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7["collections.abc"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3 120e2591_3e15_b895_72b6_cb26195e40a6["pytest"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 120e2591_3e15_b895_72b6_cb26195e40a6 d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> d758344f_537f_649e_f467_b9d7442e86df 43d88577_548b_2248_b01b_7987bae85dcc["langchain_core.tools"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 43d88577_548b_2248_b01b_7987bae85dcc 1fe3d0c5_4963_3c08_63e9_108cefcdbab5["langgraph.checkpoint.memory"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 1fe3d0c5_4963_3c08_63e9_108cefcdbab5 0e93d2ee_1fb2_3a0f_5a76_8aba32d0d4ed["langgraph.types"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 0e93d2ee_1fb2_3a0f_5a76_8aba32d0d4ed 6f5e6c4b_1a3f_fd09_4697_631c27ef1033["langchain.agents.factory"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 6f5e6c4b_1a3f_fd09_4697_631c27ef1033 50acc543_e5f0_2162_cf07_c2bf50723e0c["langchain.agents.middleware.types"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> 50acc543_e5f0_2162_cf07_c2bf50723e0c d135b586_15fc_7b4a_47fb_a8b2bcda78a5["tests.unit_tests.agents.model"] d67e9997_c33d_b023_a29b_2a9611d9b93e --> d135b586_15fc_7b4a_47fb_a8b2bcda78a5 style d67e9997_c33d_b023_a29b_2a9611d9b93e fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
"""Tests for dynamic tool registration via middleware.
These tests verify that middleware can dynamically register and handle tools
that are not declared upfront when creating the agent.
"""
import asyncio
from collections.abc import Awaitable, Callable
from typing import Any
import pytest
from langchain_core.messages import HumanMessage, ToolCall, ToolMessage
from langchain_core.tools import tool
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.types import Command
from langchain.agents.factory import create_agent
from langchain.agents.middleware.types import (
AgentMiddleware,
ModelCallResult,
ModelRequest,
ModelResponse,
ToolCallRequest,
)
from tests.unit_tests.agents.model import FakeToolCallingModel
@tool
def static_tool(value: str) -> str:
"""A static tool that is always available."""
return f"Static result: {value}"
@tool
def dynamic_tool(value: str) -> str:
"""A dynamically registered tool."""
return f"Dynamic result: {value}"
@tool
def another_dynamic_tool(x: int, y: int) -> str:
"""Another dynamically registered tool for calculations."""
return f"Sum: {x + y}"
# -----------------------------------------------------------------------------
# Middleware classes
# -----------------------------------------------------------------------------
class DynamicToolMiddleware(AgentMiddleware):
"""Middleware that dynamically adds and handles a tool (sync and async)."""
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse],
) -> ModelCallResult:
updated = request.override(tools=[*request.tools, dynamic_tool])
return handler(updated)
// ... (350 more lines)
Domain
Subdomains
Functions
Classes
Dependencies
- asyncio
- collections.abc
- langchain.agents.factory
- langchain.agents.middleware.types
- langchain_core.messages
- langchain_core.tools
- langgraph.checkpoint.memory
- langgraph.types
- pytest
- tests.unit_tests.agents.model
- typing
Source
Frequently Asked Questions
What does test_dynamic_tools.py do?
test_dynamic_tools.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, RunnableInterface subdomain.
What functions are defined in test_dynamic_tools.py?
test_dynamic_tools.py defines 10 function(s): another_dynamic_tool, dynamic_tool, get_tool_messages, invoke_agent, static_tool, test_conditional_dynamic_tool, test_dynamic_tool_basic, test_dynamic_tool_chained_middleware, test_dynamic_tool_without_handler_raises_error, test_multiple_dynamic_tools_with_static.
What does test_dynamic_tools.py depend on?
test_dynamic_tools.py imports 11 module(s): asyncio, collections.abc, langchain.agents.factory, langchain.agents.middleware.types, langchain_core.messages, langchain_core.tools, langgraph.checkpoint.memory, langgraph.types, and 3 more.
Where is test_dynamic_tools.py in the architecture?
test_dynamic_tools.py is located at libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_dynamic_tools.py (domain: CoreAbstractions, subdomain: RunnableInterface, directory: libs/langchain_v1/tests/unit_tests/agents/middleware/core).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free