Class TokenWindowChatMemory
- All Implemented Interfaces:
ChatMemory
maxTokensProvider.
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 (or multiple) is evicted.
Messages are indivisible. If a message doesn't fit, it is evicted completely.
The maximum number of tokens can be supplied either statically or dynamically
via the maxTokensProvider. When supplied dynamically, the effective
window size may change at runtime, and the sliding-window behavior always
respects the latest value returned by the provider.
The rules for SystemMessage:
- Once added, a
SystemMessageis always retained, it cannot be removed. - Only one
SystemMessagecan be held at a time. - If a new
SystemMessagewith the same content is added, it is ignored. - If a new
SystemMessagewith different content is added, the previousSystemMessageis removed. UnlessTokenWindowChatMemory.Builder.alwaysKeepSystemMessageFirst(Boolean)is set totrue, the newSystemMessageis added to the end of the message list.
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).
-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(ChatMessage message) Adds a message to the chat memory.builder()voidclear()Clears the chat memory.id()The ID of theChatMemory.messages()Retrieves messages from the chat memory.voidset(Iterable<ChatMessage> iter) Replaces all messages in the chat memory with the specified messages.static TokenWindowChatMemorywithMaxTokens(int maxTokens, TokenCountEstimator tokenCountEstimator) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ChatMemory
add, add, set
-
Method Details
-
id
Description copied from interface:ChatMemoryThe ID of theChatMemory.- Specified by:
idin interfaceChatMemory- Returns:
- The ID of the
ChatMemory.
-
add
Description copied from interface:ChatMemoryAdds a message to the chat memory.- Specified by:
addin interfaceChatMemory- Parameters:
message- TheChatMessageto add.
-
set
Description copied from interface:ChatMemoryReplaces all messages in the chat memory with the specified messages. Unlikeadd, this method replaces the entire message history rather than appending to it.Implementations should override this method to provide more efficient atomic operations if possible. The default implementation calls
ChatMemory.clear()followed byadd(Iterable<ChatMessage>)which is not atomic.This method will typically be used when chat memory needs to be re-written to implement things like memory compaction.
NOTE: This method is never called automatically by LangChain4j.
- Specified by:
setin interfaceChatMemory- Parameters:
iter- TheChatMessages to set. Must not benullor empty.
-
messages
Description copied from interface:ChatMemoryRetrieves messages from the chat memory. Depending on the implementation, it may not return all previously added messages, but rather a subset, a summary, or a combination thereof.- Specified by:
messagesin interfaceChatMemory- Returns:
- A list of
ChatMessageobjects that represent the current state of the chat memory.
-
clear
public void clear()Description copied from interface:ChatMemoryClears the chat memory.- Specified by:
clearin interfaceChatMemory
-
builder
-
withMaxTokens
public static TokenWindowChatMemory withMaxTokens(int maxTokens, TokenCountEstimator tokenCountEstimator)
-