Home / File/ test_wrap_model_call.py — langchain Source File

test_wrap_model_call.py — langchain Source File

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

File python CoreAbstractions MessageSchema 14 imports 52 classes

Entity Profile

Dependency Diagram

graph LR
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc["test_wrap_model_call.py"]
  cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7["collections.abc"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7
  8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3
  120e2591_3e15_b895_72b6_cb26195e40a6["pytest"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 120e2591_3e15_b895_72b6_cb26195e40a6
  f3bc7443_c889_119d_0744_aacc3620d8d2["langchain_core.callbacks"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> f3bc7443_c889_119d_0744_aacc3620d8d2
  2312f229_c199_ac88_c29f_62e2a2958404["langchain_core.language_models.chat_models"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 2312f229_c199_ac88_c29f_62e2a2958404
  833aeadc_c3e9_bfcf_db07_ecb37ad3ba24["langchain_core.language_models.fake_chat_models"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 833aeadc_c3e9_bfcf_db07_ecb37ad3ba24
  d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> d758344f_537f_649e_f467_b9d7442e86df
  ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> ac2a9b92_4484_491e_1b48_ec85e71e1d58
  43d88577_548b_2248_b01b_7987bae85dcc["langchain_core.tools"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 43d88577_548b_2248_b01b_7987bae85dcc
  5dbfd558_f2f2_9663_3a3f_c317926ac1c1["langgraph.runtime"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 5dbfd558_f2f2_9663_3a3f_c317926ac1c1
  91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 91721f45_4909_e489_8c1f_084f8bd87145
  839143dd_e377_b604_96de_3624dbdffeb5["langchain.agents"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 839143dd_e377_b604_96de_3624dbdffeb5
  50acc543_e5f0_2162_cf07_c2bf50723e0c["langchain.agents.middleware.types"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> 50acc543_e5f0_2162_cf07_c2bf50723e0c
  d135b586_15fc_7b4a_47fb_a8b2bcda78a5["tests.unit_tests.agents.model"]
  3501ddcf_a91a_a4b4_cf6d_5b38492caabc --> d135b586_15fc_7b4a_47fb_a8b2bcda78a5
  style 3501ddcf_a91a_a4b4_cf6d_5b38492caabc fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Unit tests for wrap_model_call hook and @wrap_model_call decorator.

This module tests the wrap_model_call functionality in three forms:
1. As a middleware method (AgentMiddleware.wrap_model_call)
2. As a decorator (@wrap_model_call)
3. Async variant (AgentMiddleware.awrap_model_call)
"""

from collections.abc import Awaitable, Callable
from typing import Any

import pytest
from langchain_core.callbacks import (
    AsyncCallbackManagerForLLMRun,
    CallbackManagerForLLMRun,
)
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.language_models.fake_chat_models import GenericFakeChatModel
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage
from langchain_core.outputs import ChatResult
from langchain_core.tools import tool
from langgraph.runtime import Runtime
from typing_extensions import TypedDict, override

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


class TestBasicWrapModelCall:
    """Test basic wrap_model_call functionality."""

    def test_passthrough_middleware(self) -> None:
        """Test middleware that simply passes through without modification."""

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

        model = GenericFakeChatModel(messages=iter([AIMessage(content="Hello")]))
        agent = create_agent(model=model, middleware=[PassthroughMiddleware()])

        result = agent.invoke({"messages": [HumanMessage("Hi")]})

        assert len(result["messages"]) == 2
        assert result["messages"][1].content == "Hello"

    def test_logging_middleware(self) -> None:
        """Test middleware that logs calls without modification."""
        call_log = []
// ... (1541 more lines)

Subdomains

Dependencies

  • collections.abc
  • langchain.agents
  • langchain.agents.middleware.types
  • langchain_core.callbacks
  • langchain_core.language_models.chat_models
  • langchain_core.language_models.fake_chat_models
  • langchain_core.messages
  • langchain_core.outputs
  • langchain_core.tools
  • langgraph.runtime
  • pytest
  • tests.unit_tests.agents.model
  • typing
  • typing_extensions

Frequently Asked Questions

What does test_wrap_model_call.py do?
test_wrap_model_call.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, MessageSchema subdomain.
What does test_wrap_model_call.py depend on?
test_wrap_model_call.py imports 14 module(s): collections.abc, langchain.agents, langchain.agents.middleware.types, langchain_core.callbacks, langchain_core.language_models.chat_models, langchain_core.language_models.fake_chat_models, langchain_core.messages, langchain_core.outputs, and 6 more.
Where is test_wrap_model_call.py in the architecture?
test_wrap_model_call.py is located at libs/langchain_v1/tests/unit_tests/agents/middleware/core/test_wrap_model_call.py (domain: CoreAbstractions, subdomain: MessageSchema, 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