MemoryStore

org.llm4s.agent.memory.MemoryStore
trait MemoryStore

Storage backend for agent memories.

MemoryStore provides the interface for persisting and retrieving memories. Implementations can be in-memory (for testing), file-based, database-backed, or use vector databases for semantic search.

The trait follows functional principles - operations return new instances rather than mutating state.

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes

Members list

Value members

Abstract methods

Clear all memories from the store.

Clear all memories from the store.

Attributes

Returns

Empty store or error

def count(filter: MemoryFilter): Result[Long]

Count memories matching a filter.

Count memories matching a filter.

Value parameters

filter

Criteria for counting memories

Attributes

Returns

Count or error

Delete a memory by its ID.

Delete a memory by its ID.

Value parameters

id

The memory identifier

Attributes

Returns

Updated store or error

Delete all memories matching a filter.

Delete all memories matching a filter.

Value parameters

filter

Criteria for selecting memories to delete

Attributes

Returns

Updated store or error

def get(id: MemoryId): Result[Option[Memory]]

Retrieve a memory by its ID.

Retrieve a memory by its ID.

Value parameters

id

The memory identifier

Attributes

Returns

The memory if found, or error

def recall(filter: MemoryFilter, limit: Int): Result[Seq[Memory]]

Recall memories matching a filter.

Recall memories matching a filter.

This is the primary retrieval method for most use cases. Returns memories sorted by relevance (most relevant first).

Value parameters

filter

Criteria for filtering memories

limit

Maximum number of memories to return

Attributes

Returns

Matching memories sorted by relevance (most relevant first), or error

def recent(limit: Int, filter: MemoryFilter): Result[Seq[Memory]]

Get the most recent memories.

Get the most recent memories.

Value parameters

filter

Additional filter criteria

limit

Maximum number of memories

Attributes

Returns

Most recent memories

def search(query: String, topK: Int, filter: MemoryFilter): Result[Seq[ScoredMemory]]

Semantic search for memories similar to a query.

Semantic search for memories similar to a query.

This method uses embeddings for semantic similarity search. Falls back to keyword search if embeddings are not available.

Value parameters

filter

Additional filter criteria

query

The search query

topK

Number of results to return

Attributes

Returns

A list of ScoredMemory objects, sorted by relevance score (highest first), or error

def store(memory: Memory): Result[MemoryStore]

Store a new memory.

Store a new memory.

Value parameters

memory

The memory to store

Attributes

Returns

Updated store or error

def update(id: MemoryId, update: Memory => Memory): Result[MemoryStore]

Update a memory.

Update a memory.

Value parameters

id

The memory identifier

update

Function to transform the memory

Attributes

Returns

Updated store or error

Concrete methods

def exists(id: MemoryId): Result[Boolean]

Check if a memory exists.

Check if a memory exists.

Value parameters

id

The memory identifier

Attributes

Returns

True if memory exists

def getConversation(conversationId: String, limit: Int): Result[Seq[Memory]]

Get conversation history.

Get conversation history.

Value parameters

conversationId

The conversation identifier

limit

Maximum messages to return

Attributes

Returns

Conversation memories in chronological order

def getEntityMemories(entityId: EntityId): Result[Seq[Memory]]

Get all memories for a specific entity.

Get all memories for a specific entity.

Value parameters

entityId

The entity identifier

Attributes

Returns

All memories related to this entity

def important(threshold: Double, limit: Int): Result[Seq[Memory]]

Get high-importance memories.

Get high-importance memories.

Value parameters

limit

Maximum number of memories

threshold

Minimum importance score (0.0 to 1.0)

Attributes

Returns

Important memories

def replace(add: Seq[Memory], remove: Seq[MemoryId]): Result[MemoryStore]

Store add, then delete remove: one replacement, such as a consolidation's summary for the memories it summarises. A memory of remove that is not there is skipped.

Store add, then delete remove: one replacement, such as a consolidation's summary for the memories it summarises. A memory of remove that is not there is skipped.

This default stores, then deletes one by one, so it is atomic for a store whose writes return a new store and leave the original untouched (as InMemoryStore does). SQLiteMemoryStore and the Postgres store override it as one transaction; any other store that writes in place should too.

Attributes

Returns

the store after the replacement, or an error

def storeAll(memories: Seq[Memory]): Result[MemoryStore]

Store multiple memories in a batch, all or nothing: on Left, none of memories has been stored (a memory that was already there is left as it was). A memory whose id appears twice is stored as its last occurrence.

Store multiple memories in a batch, all or nothing: on Left, none of memories has been stored (a memory that was already there is left as it was). A memory whose id appears twice is stored as its last occurrence.

This default stores into an immutable copy, so it is atomic for a store whose store returns a new store and leaves the original untouched (as InMemoryStore does). A store that writes in place must override it; the SQLite, vector and Postgres stores write the batch in one transaction.

Value parameters

memories

The memories to store

Attributes

Returns

A new MemoryStore containing the added memories, or an error describing why the operation failed.