Copyright | (c) 2025 Tushar Adhatrao |
---|---|
License | MIT |
Maintainer | Tushar Adhatrao <[email protected]> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Langchain.Memory.Core
Description
Implementation of LangChain's memory management patterns, providing:
- Chat history tracking with size limits
- Message addition/trimming strategies
- Integration with Runnable workflows
Example usage:
-- Create memory with 5-message window memory = WindowBufferMemory 5 (initialChatMessage "You are an assistant") -- Add user message newMemory <- addUserMessage memory "Hello, world!" -- Retrieve current messages messages <- messages newMemory -- Right [Message System "...", Message User "Hello, world!"]
Synopsis
- class BaseMemory m where
- data WindowBufferMemory = WindowBufferMemory {}
- trimChatMessage :: Int -> ChatMessage -> ChatMessage
- addAndTrim :: Int -> Message -> ChatMessage -> ChatMessage
- initialChatMessage :: Text -> ChatMessage
Documentation
class BaseMemory m where Source #
Base typeclass for memory implementations Defines standard operations for chat history management.
Example instance:
instance BaseMemory MyMemory where messages = ... addUserMessage = ...
Methods
messages :: m -> IO (Either String ChatMessage) Source #
Retrieve current chat history
addUserMessage :: m -> Text -> IO (Either String m) Source #
Add user message to history
addAiMessage :: m -> Text -> IO (Either String m) Source #
Add AI response to history
addMessage :: m -> Message -> IO (Either String m) Source #
Add generic message to history
clear :: m -> IO (Either String m) Source #
Reset memory to initial state
Instances
data WindowBufferMemory Source #
Sliding window memory implementation. Stores chat history with maximum size limit.
Note: This implementation will not trim system messages.
Example:
>>>
let mem = WindowBufferMemory 2 (NE.singleton (Message System "Sys" defaultMessageData))
>>>
addMessage mem (Message User "Hello" defaultMessageData)
Right (WindowBufferMemory {maxWindowSize = 2, ...})
Constructors
WindowBufferMemory | |
Fields
|
Instances
trimChatMessage :: Int -> ChatMessage -> ChatMessage Source #
Trim chat history to last n messages Example:
>>>
let msgs = NE.fromList [msg1, msg2, msg3]
>>>
trimChatMessage 2 msgs
[msg2, msg3]
addAndTrim :: Int -> Message -> ChatMessage -> ChatMessage Source #
Add and maintain window size Example:
>>>
let msgs = NE.fromList [msg1]
>>>
addAndTrim 2 msg2 msgs
[msg1, msg2]
initialChatMessage :: Text -> ChatMessage Source #
Create initial chat history Example:
>>>
initialChatMessage "You are Qwen"
[Message System "You are Qwen"]