Home / File/ test_tool_call_limit.py — langchain Source File

test_tool_call_limit.py — langchain Source File

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

File python LangChainCore MessageInterface 7 imports 17 functions

Entity Profile

Dependency Diagram

graph LR
  a75b8390_08d3_7137_c8a7_9d78fc0c4517["test_tool_call_limit.py"]
  f69d6389_263d_68a4_7fbf_f14c0602a9ba["pytest"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> f69d6389_263d_68a4_7fbf_f14c0602a9ba
  9444498b_8066_55c7_b3a2_1d90c4162a32["langchain_core.messages"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 9444498b_8066_55c7_b3a2_1d90c4162a32
  121262a1_0bd6_d637_bce3_307ab6b3ecd4["langchain_core.tools"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 121262a1_0bd6_d637_bce3_307ab6b3ecd4
  2ff5ef5d_5050_1ab2_e4f2_f72e391945a2["langgraph.checkpoint.memory"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 2ff5ef5d_5050_1ab2_e4f2_f72e391945a2
  998e41c8_6a3e_eb9b_699f_db967a1242f7["langchain.agents.factory"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 998e41c8_6a3e_eb9b_699f_db967a1242f7
  43521798_d28e_39b9_6c75_ed97b7f2edfb["langchain.agents.middleware.tool_call_limit"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 43521798_d28e_39b9_6c75_ed97b7f2edfb
  069947d2_727b_035a_0691_c12203e2f5a6["tests.unit_tests.agents.model"]
  a75b8390_08d3_7137_c8a7_9d78fc0c4517 --> 069947d2_727b_035a_0691_c12203e2f5a6
  style a75b8390_08d3_7137_c8a7_9d78fc0c4517 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Unit tests for ToolCallLimitMiddleware."""

import pytest
from langchain_core.messages import AIMessage, HumanMessage, ToolCall, ToolMessage
from langchain_core.tools import tool
from langgraph.checkpoint.memory import InMemorySaver

from langchain.agents.factory import create_agent
from langchain.agents.middleware.tool_call_limit import (
    ToolCallLimitExceededError,
    ToolCallLimitMiddleware,
    ToolCallLimitState,
)
from tests.unit_tests.agents.model import FakeToolCallingModel


def test_middleware_initialization_validation() -> None:
    """Test that middleware initialization validates parameters correctly."""
    # Test that at least one limit must be specified
    with pytest.raises(ValueError, match="At least one limit must be specified"):
        ToolCallLimitMiddleware()

    # Test valid initialization with both limits
    middleware = ToolCallLimitMiddleware(thread_limit=5, run_limit=3)
    assert middleware.thread_limit == 5
    assert middleware.run_limit == 3
    assert middleware.exit_behavior == "continue"
    assert middleware.tool_name is None

    # Test with tool name
    middleware = ToolCallLimitMiddleware(tool_name="search", thread_limit=5)
    assert middleware.tool_name == "search"
    assert middleware.thread_limit == 5
    assert middleware.run_limit is None

    # Test exit behaviors
    for behavior in ["error", "end", "continue"]:
        middleware = ToolCallLimitMiddleware(thread_limit=5, exit_behavior=behavior)
        assert middleware.exit_behavior == behavior

    # Test invalid exit behavior
    with pytest.raises(ValueError, match="Invalid exit_behavior"):
        ToolCallLimitMiddleware(thread_limit=5, exit_behavior="invalid")  # type: ignore[arg-type]

    # Test run_limit exceeding thread_limit
    with pytest.raises(
        ValueError,
        match=r"run_limit .* cannot exceed thread_limit",
    ):
        ToolCallLimitMiddleware(thread_limit=3, run_limit=5)

    # Test run_limit equal to thread_limit (should be valid)
    middleware = ToolCallLimitMiddleware(thread_limit=5, run_limit=5)
    assert middleware.thread_limit == 5
    assert middleware.run_limit == 5

    # Test run_limit less than thread_limit (should be valid)
    middleware = ToolCallLimitMiddleware(thread_limit=5, run_limit=3)
    assert middleware.thread_limit == 5
    assert middleware.run_limit == 3
// ... (758 more lines)

Domain

Subdomains

Dependencies

  • langchain.agents.factory
  • langchain.agents.middleware.tool_call_limit
  • langchain_core.messages
  • langchain_core.tools
  • langgraph.checkpoint.memory
  • pytest
  • tests.unit_tests.agents.model

Frequently Asked Questions

What does test_tool_call_limit.py do?
test_tool_call_limit.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_tool_call_limit.py?
test_tool_call_limit.py defines 17 function(s): test_end_behavior_creates_artificial_messages, test_exception_error_messages, test_exit_behavior_continue, test_limit_reached_but_not_exceeded, test_middleware_end_behavior_with_unrelated_parallel_tool_calls, test_middleware_error_behavior, test_middleware_initialization_validation, test_middleware_name_property, test_middleware_unit_functionality, test_middleware_with_specific_tool, and 7 more.
What does test_tool_call_limit.py depend on?
test_tool_call_limit.py imports 7 module(s): langchain.agents.factory, langchain.agents.middleware.tool_call_limit, langchain_core.messages, langchain_core.tools, langgraph.checkpoint.memory, pytest, tests.unit_tests.agents.model.
Where is test_tool_call_limit.py in the architecture?
test_tool_call_limit.py is located at libs/langchain_v1/tests/unit_tests/agents/middleware/implementations/test_tool_call_limit.py (domain: LangChainCore, subdomain: MessageInterface, directory: libs/langchain_v1/tests/unit_tests/agents/middleware/implementations).

Analyze Your Own Codebase

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

Try Supermodel Free