From 3b75d37cee6d0614838493f74ecf65a73b147a85 Mon Sep 17 00:00:00 2001 From: James Braza Date: Tue, 5 Dec 2023 16:22:31 -0500 Subject: [PATCH] Adding `BaseChatMessageHistory.__str__` (#14311) Adding __str__ to base chat message history to make it easier to debug --- libs/core/langchain_core/chat_history.py | 10 +++++++++- libs/core/tests/unit_tests/runnables/test_history.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/libs/core/langchain_core/chat_history.py b/libs/core/langchain_core/chat_history.py index 5cc052c6e5..211c7c8466 100644 --- a/libs/core/langchain_core/chat_history.py +++ b/libs/core/langchain_core/chat_history.py @@ -3,7 +3,12 @@ from __future__ import annotations from abc import ABC, abstractmethod from typing import List -from langchain_core.messages import AIMessage, BaseMessage, HumanMessage +from langchain_core.messages import ( + AIMessage, + BaseMessage, + HumanMessage, + get_buffer_string, +) class BaseChatMessageHistory(ABC): @@ -65,3 +70,6 @@ class BaseChatMessageHistory(ABC): @abstractmethod def clear(self) -> None: """Remove all messages from the store""" + + def __str__(self) -> str: + return get_buffer_string(self.messages) diff --git a/libs/core/tests/unit_tests/runnables/test_history.py b/libs/core/tests/unit_tests/runnables/test_history.py index 9c51cd5875..c5f02c9313 100644 --- a/libs/core/tests/unit_tests/runnables/test_history.py +++ b/libs/core/tests/unit_tests/runnables/test_history.py @@ -1,6 +1,6 @@ from typing import Any, Callable, Sequence, Union -from langchain_core.messages import AIMessage, BaseMessage, HumanMessage +from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage from langchain_core.pydantic_v1 import BaseModel from langchain_core.runnables.base import RunnableLambda from langchain_core.runnables.config import RunnableConfig @@ -8,6 +8,15 @@ from langchain_core.runnables.history import RunnableWithMessageHistory from tests.unit_tests.fake.memory import ChatMessageHistory +def test_interfaces() -> None: + history = ChatMessageHistory() + history.add_message(SystemMessage(content="system")) + history.add_user_message("human 1") + history.add_ai_message("ai") + history.add_message(HumanMessage(content="human 2")) + assert str(history) == "System: system\nHuman: human 1\nAI: ai\nHuman: human 2" + + def _get_get_session_history() -> Callable[..., ChatMessageHistory]: chat_history_store = {}