Class MessageWindowChatMemory

java.lang.Object
dev.langchain4j.memory.chat.MessageWindowChatMemory
All Implemented Interfaces:
ChatMemory

public class MessageWindowChatMemory extends Object implements ChatMemory
This chat memory operates as a sliding window whose size is controlled by a maxMessagesProvider. It retains as many of the most recent messages as can fit into the window. If there isn't enough space for a new message, the oldest one is evicted.

The maximum number of messages can be provided either statically or dynamically through the maxMessagesProvider. When supplied dynamically, the effective window size can change at runtime, and the sliding-window behavior always respects the most recent value returned by the provider.

Once added, a SystemMessage is always retained. Only one SystemMessage can be held at a time. If a new SystemMessage with the same content is added, it is ignored. If a new SystemMessage with different content is added, the previous SystemMessage is removed.

If an AiMessage containing ToolExecutionRequest(s) is evicted, the following orphan ToolExecutionResultMessage(s) are also automatically evicted to avoid problems with some LLM providers (such as OpenAI) that prohibit sending orphan ToolExecutionResultMessage(s) in the request.

The state of chat memory is stored in ChatMemoryStore (SingleSlotChatMemoryStore is used by default).