File size: 1,026 Bytes
7b4b748
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import logging
from collections.abc import Sequence

from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.messages import BaseMessage

logger = logging.getLogger(__name__)


class TrimmedChatMessageHistory(InMemoryChatMessageHistory):
    """LangChain in-memory history with a sliding window."""

    max_turns: int = 10

    def add_message(self, message: BaseMessage) -> None:
        super().add_message(message)
        self._trim()

    def add_messages(self, messages: Sequence[BaseMessage]) -> None:
        super().add_messages(messages)
        self._trim()

    def _trim(self) -> None:
        max_messages = self.max_turns * 2
        if len(self.messages) > max_messages:
            removed = len(self.messages) - max_messages
            self.messages = self.messages[removed:]
            logger.info("Trimmed %d old messages from LangChain history", removed)

    def clear(self) -> None:
        super().clear()
        logger.info("LangChain conversation history cleared")