API Reference¶
Core¶
memv.Memory
¶
Main entry point for memv.
Example
memory = Memory(db_path="memory.db", embedding_client=embedder, llm_client=llm)
await memory.open()
await memory.add_message(Message(...))
await memory.process(user_id="user123") # Extract knowledge
results = await memory.retrieve("query", user_id="user123")
print(results.to_prompt()) # Formatted for LLM context
await memory.close()
Auto-processing:
memory = Memory(
db_path="memory.db",
embedding_client=embedder,
llm_client=llm,
auto_process=True, # Enable automatic processing
batch_threshold=10, # Messages before trigger
)
async with memory:
# Messages buffer automatically, processing triggers at threshold
await memory.add_exchange(user_id, user_msg, assistant_msg)
# Force processing of buffered messages
await memory.flush(user_id)
# Wait for background processing to complete
await memory.wait_for_processing(user_id, timeout=30)
close
async
¶
Close all database connections.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cancel_pending
|
bool
|
If True, cancel any running processing tasks. If False, wait for them to complete first. |
True
|
add_message
async
¶
add_message(message: Message) -> None
Add a message to memory.
Messages are stored immediately. Call process() to extract knowledge.
add_exchange
async
¶
add_exchange(
user_id: str,
user_message: str,
assistant_message: str,
timestamp: datetime | None = None,
) -> tuple[Message, Message]
Convenience method to add a user/assistant exchange.
If auto_process is enabled, buffers messages and triggers background processing when batch_threshold is reached.
Returns the created Message objects.
retrieve
async
¶
retrieve(
query: str,
user_id: str,
top_k: int = 10,
vector_weight: float = 0.5,
include_episodes: bool = True,
at_time: datetime | None = None,
include_expired: bool = False,
) -> RetrievalResult
Retrieve relevant knowledge and episodes for a query.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
|
Search query |
required |
user_id
|
str
|
Filter results to this user only (required for privacy) |
required |
top_k
|
int
|
Number of results to return per category |
10
|
vector_weight
|
float
|
Balance between vector (1.0) and text (0.0) search |
0.5
|
include_episodes
|
bool
|
Whether to search and return episodes |
True
|
at_time
|
datetime | None
|
If provided, filter knowledge by validity at this event time. Returns only knowledge that was valid at that point in time. |
None
|
include_expired
|
bool
|
If True, include superseded (expired) records. Useful for viewing full history of a fact. |
False
|
Returns:
| Type | Description |
|---|---|
RetrievalResult
|
RetrievalResult containing knowledge and episodes. |
RetrievalResult
|
Use result.to_prompt() to get formatted context for LLM. |
process
async
¶
Process unprocessed messages for a user into episodes and extract knowledge.
Flow: 1. Get messages not yet assigned to episodes 2. Segment into episodes (boundary detection) 3. Generate episode title/narrative 4. Index episode for retrieval 5. Retrieve existing knowledge for context 6. Run predict-calibrate extraction 7. Store extracted knowledge with embeddings
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_id
|
str
|
Process messages for this user |
required |
Returns:
| Type | Description |
|---|---|
int
|
Number of knowledge entries extracted |
process_async
¶
process_async(user_id: str) -> ProcessTask
Non-blocking process. Returns handle to monitor/await.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_id
|
str
|
Process messages for this user |
required |
Returns:
| Type | Description |
|---|---|
ProcessTask
|
ProcessTask handle to monitor progress or await completion |
process_messages
async
¶
process_messages(
messages: list[Message], user_id: str
) -> int
Process explicit messages into an episode and extract knowledge.
Lower-level method for when you want direct control over what gets processed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
messages
|
list[Message]
|
Messages to process (will be grouped into one episode) |
required |
user_id
|
str
|
User ID for the episode |
required |
Returns:
| Type | Description |
|---|---|
int
|
Number of knowledge entries extracted |
wait_for_processing
async
¶
Wait for background processing to complete.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_id
|
str
|
User whose processing to wait for |
required |
timeout
|
float | None
|
Max seconds to wait (None = wait forever) |
None
|
Returns:
| Type | Description |
|---|---|
int
|
Number of knowledge entries extracted, or 0 if no task running |
Raises:
| Type | Description |
|---|---|
TimeoutError
|
If timeout is exceeded |
flush
async
¶
Force processing of buffered messages regardless of threshold.
Schedules processing if there are unprocessed messages and waits for completion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_id
|
str
|
User whose messages to process |
required |
Returns:
| Type | Description |
|---|---|
int
|
Number of knowledge entries extracted |
clear_user
async
¶
Delete all data for a user: messages, episodes, knowledge, and indices.
This is a destructive operation. Use with caution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_id
|
str
|
User whose data to delete |
required |
Returns:
| Type | Description |
|---|---|
dict[str, int]
|
Dict with counts of deleted items per category |
memv.MemoryConfig
dataclass
¶
Configuration for Memory system.
Provides centralized configuration with sensible defaults. Can be passed to Memory() or individual params can be overridden.
Example
Models¶
memv.models.Message
¶
Bases: BaseModel
memv.models.MessageRole
¶
Bases: StrEnum
memv.models.Episode
¶
Bases: BaseModel
memv.models.SemanticKnowledge
¶
memv.models.RetrievalResult
¶
Bases: BaseModel
Results from memory retrieval.
memv.models.ProcessTask
¶
memv.models.ProcessStatus
¶
Bases: StrEnum
memv.models.ExtractedKnowledge
¶
Bases: BaseModel
Output of predict-calibrate extraction.
Protocols¶
memv.protocols.EmbeddingClient
¶
Bases: Protocol
memv.protocols.LLMClient
¶
Bases: Protocol
Protocol for LLM completions with structured output.
Built-in Adapters¶
memv.embeddings.OpenAIEmbedAdapter
¶
memv.llm.PydanticAIAdapter
¶
LLM client using PydanticAI.
Supports multiple providers out of the box: - "openai:gpt-4.1-mini" - "anthropic:claude-3-5-sonnet-latest" - "google-gla:gemini-2.5-flash" - "groq:llama-3.3-70b-versatile"
See https://ai.pydantic.dev/models/ for full list.