Home / File/ test_chat_history.py — langchain Source File

test_chat_history.py — langchain Source File

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

File python CoreAbstractions MessageSchema 3 imports 3 functions 2 classes

Entity Profile

Dependency Diagram

graph LR
  0aa2c76e_19d1_880f_1c8f_f8ec5d3eec65["test_chat_history.py"]
  cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7["collections.abc"]
  0aa2c76e_19d1_880f_1c8f_f8ec5d3eec65 --> cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7
  38c69580_3a92_51b1_7512_b0ccca9a0ef6["langchain_core.chat_history"]
  0aa2c76e_19d1_880f_1c8f_f8ec5d3eec65 --> 38c69580_3a92_51b1_7512_b0ccca9a0ef6
  d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"]
  0aa2c76e_19d1_880f_1c8f_f8ec5d3eec65 --> d758344f_537f_649e_f467_b9d7442e86df
  style 0aa2c76e_19d1_880f_1c8f_f8ec5d3eec65 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

from collections.abc import Sequence

from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.messages import BaseMessage, HumanMessage


def test_add_message_implementation_only() -> None:
    """Test implementation of add_message only."""

    class SampleChatHistory(BaseChatMessageHistory):
        def __init__(self, *, store: list[BaseMessage]) -> None:
            self.store = store

        def add_message(self, message: BaseMessage) -> None:
            """Add a message to the store."""
            self.store.append(message)

        def clear(self) -> None:
            """Clear the store."""
            raise NotImplementedError

    store: list[BaseMessage] = []
    chat_history = SampleChatHistory(store=store)
    chat_history.add_message(HumanMessage(content="Hello"))
    assert len(store) == 1
    assert store[0] == HumanMessage(content="Hello")
    chat_history.add_message(HumanMessage(content="World"))
    assert len(store) == 2
    assert store[1] == HumanMessage(content="World")

    chat_history.add_messages(
        [
            HumanMessage(content="Hello"),
            HumanMessage(content="World"),
        ]
    )
    assert len(store) == 4
    assert store[2] == HumanMessage(content="Hello")
    assert store[3] == HumanMessage(content="World")


def test_bulk_message_implementation_only() -> None:
    """Test that SampleChatHistory works as expected."""
    store: list[BaseMessage] = []

    class BulkAddHistory(BaseChatMessageHistory):
        def __init__(self, *, store: list[BaseMessage]) -> None:
            self.store = store

        def add_messages(self, message: Sequence[BaseMessage]) -> None:
            """Add a message to the store."""
            self.store.extend(message)

        def clear(self) -> None:
            """Clear the store."""
            raise NotImplementedError

    chat_history = BulkAddHistory(store=store)
    chat_history.add_message(HumanMessage(content="Hello"))
    assert len(store) == 1
    assert store[0] == HumanMessage(content="Hello")
    chat_history.add_message(HumanMessage(content="World"))
    assert len(store) == 2
    assert store[1] == HumanMessage(content="World")

    chat_history.add_messages(
        [
            HumanMessage(content="Hello"),
            HumanMessage(content="World"),
        ]
    )
    assert len(store) == 4
    assert store[2] == HumanMessage(content="Hello")
    assert store[3] == HumanMessage(content="World")


async def test_async_interface() -> None:
    """Test async interface for BaseChatMessageHistory."""

    class BulkAddHistory(BaseChatMessageHistory):
        def __init__(self) -> None:
            self.messages = []

        def add_messages(self, message: Sequence[BaseMessage]) -> None:
            """Add a message to the store."""
            self.messages.extend(message)

        def clear(self) -> None:
            """Clear the store."""
            self.messages.clear()

    chat_history = BulkAddHistory()
    await chat_history.aadd_messages(
        [
            HumanMessage(content="Hello"),
            HumanMessage(content="World"),
        ]
    )
    assert await chat_history.aget_messages() == [
        HumanMessage(content="Hello"),
        HumanMessage(content="World"),
    ]
    await chat_history.aadd_messages([HumanMessage(content="!")])
    assert await chat_history.aget_messages() == [
        HumanMessage(content="Hello"),
        HumanMessage(content="World"),
        HumanMessage(content="!"),
    ]
    await chat_history.aclear()
    assert await chat_history.aget_messages() == []

Subdomains

Dependencies

  • collections.abc
  • langchain_core.chat_history
  • langchain_core.messages

Frequently Asked Questions

What does test_chat_history.py do?
test_chat_history.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, MessageSchema subdomain.
What functions are defined in test_chat_history.py?
test_chat_history.py defines 3 function(s): test_add_message_implementation_only, test_async_interface, test_bulk_message_implementation_only.
What does test_chat_history.py depend on?
test_chat_history.py imports 3 module(s): collections.abc, langchain_core.chat_history, langchain_core.messages.
Where is test_chat_history.py in the architecture?
test_chat_history.py is located at libs/core/tests/unit_tests/chat_history/test_chat_history.py (domain: CoreAbstractions, subdomain: MessageSchema, directory: libs/core/tests/unit_tests/chat_history).

Analyze Your Own Codebase

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

Try Supermodel Free