Home / File/ test_tools.py — langchain Source File

test_tools.py — langchain Source File

Architecture documentation for test_tools.py, a python file in the langchain codebase. 10 imports, 0 dependents.

File python LangChainCore MessageInterface 10 imports 8 functions 9 classes

Entity Profile

Dependency Diagram

graph LR
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a["test_tools.py"]
  2bf6d401_816d_d011_3b05_a6114f55ff58["collections.abc"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 2bf6d401_816d_d011_3b05_a6114f55ff58
  feec1ec4_6917_867b_d228_b134d0ff8099["typing"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> feec1ec4_6917_867b_d228_b134d0ff8099
  f69d6389_263d_68a4_7fbf_f14c0602a9ba["pytest"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> f69d6389_263d_68a4_7fbf_f14c0602a9ba
  9444498b_8066_55c7_b3a2_1d90c4162a32["langchain_core.messages"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 9444498b_8066_55c7_b3a2_1d90c4162a32
  121262a1_0bd6_d637_bce3_307ab6b3ecd4["langchain_core.tools"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 121262a1_0bd6_d637_bce3_307ab6b3ecd4
  95e05501_5650_2f3c_99db_c054e96d4e43["langchain_core.tools.base"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 95e05501_5650_2f3c_99db_c054e96d4e43
  24578fe3_c3c0_70ca_0624_6be4e15ad364["langgraph.prebuilt.tool_node"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 24578fe3_c3c0_70ca_0624_6be4e15ad364
  998e41c8_6a3e_eb9b_699f_db967a1242f7["langchain.agents.factory"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 998e41c8_6a3e_eb9b_699f_db967a1242f7
  a681398d_ed44_c914_1a44_5d174223b069["langchain.agents.middleware.types"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> a681398d_ed44_c914_1a44_5d174223b069
  069947d2_727b_035a_0691_c12203e2f5a6["tests.unit_tests.agents.model"]
  5e05f5a6_3c9a_6b02_08a5_596bf1a6469a --> 069947d2_727b_035a_0691_c12203e2f5a6
  style 5e05f5a6_3c9a_6b02_08a5_596bf1a6469a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Test Middleware handling of tools in agents."""

from collections.abc import Callable
from typing import Any

import pytest
from langchain_core.messages import HumanMessage, ToolMessage
from langchain_core.tools import tool
from langchain_core.tools.base import BaseTool
from langgraph.prebuilt.tool_node import ToolNode

from langchain.agents.factory import create_agent
from langchain.agents.middleware.types import (
    AgentMiddleware,
    AgentState,
    ModelCallResult,
    ModelRequest,
    ModelResponse,
)
from tests.unit_tests.agents.model import FakeToolCallingModel


def test_model_request_tools_are_base_tools() -> None:
    """Test that ModelRequest.tools contains BaseTool objects."""
    captured_requests: list[ModelRequest] = []

    @tool
    def search_tool(query: str) -> str:
        """Search for information."""
        return f"Results for: {query}"

    @tool
    def calculator(expression: str) -> str:
        """Calculate a mathematical expression."""
        return f"Result: {expression}"

    class RequestCapturingMiddleware(AgentMiddleware):
        def wrap_model_call(
            self,
            request: ModelRequest,
            handler: Callable[[ModelRequest], ModelResponse],
        ) -> ModelCallResult:
            captured_requests.append(request)
            return handler(request)

    agent = create_agent(
        model=FakeToolCallingModel(),
        tools=[search_tool, calculator],
        system_prompt="You are a helpful assistant.",
        middleware=[RequestCapturingMiddleware()],
    )

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

    # Verify that at least one request was captured
    assert len(captured_requests) > 0

    # Check that tools in the request are BaseTool objects
    request = captured_requests[0]
    assert isinstance(request.tools, list)
// ... (319 more lines)

Domain

Subdomains

Dependencies

  • collections.abc
  • langchain.agents.factory
  • langchain.agents.middleware.types
  • langchain_core.messages
  • langchain_core.tools
  • langchain_core.tools.base
  • langgraph.prebuilt.tool_node
  • pytest
  • tests.unit_tests.agents.model
  • typing

Frequently Asked Questions

What does test_tools.py do?
test_tools.py is a source file in the langchain codebase, written in python. It belongs to the LangChainCore domain, MessageInterface subdomain.
What functions are defined in test_tools.py?
test_tools.py defines 8 function(s): test_empty_tools_list_is_valid, test_middleware_can_add_and_remove_tools, test_middleware_can_modify_tools, test_middleware_with_additional_tools, test_model_request_tools_are_base_tools, test_tool_node_not_accepted, test_tools_preserved_across_multiple_middleware, test_unknown_tool_raises_error.
What does test_tools.py depend on?
test_tools.py imports 10 module(s): collections.abc, langchain.agents.factory, langchain.agents.middleware.types, langchain_core.messages, langchain_core.tools, langchain_core.tools.base, langgraph.prebuilt.tool_node, pytest, and 2 more.
Where is test_tools.py in the architecture?
test_tools.py is located at libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_tools.py (domain: LangChainCore, subdomain: MessageInterface, 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