Memory API Reference
Memory is the core synchronous memory management class in powermem. It provides a simple interface for storing, retrieving, and managing memories in LLM applications.
Class: Memory
from powermem import Memory
memory = Memory(config=config)
Constructor
Memory(config=None, storage_type=None, llm_provider=None, embedding_provider=None, agent_id=None)
Create a new Memory instance.
Parameters:
config(dict, optional): Configuration dictionary. If None, loads from environment variables.storage_type(str, optional): Storage backend type (deprecated, use config).llm_provider(str, optional): LLM provider name (deprecated, use config).embedding_provider(str, optional): Embedding provider name (deprecated, use config).agent_id(str, optional): Agent identifier for multi-agent scenarios.
Example:
from powermem import Memory, auto_config
# Auto-load from .env
config = auto_config()
memory = Memory(config=config, agent_id="my_agent")
Core Methods
add(messages, user_id=None, agent_id=None, run_id=None, metadata=None, filters=None, scope=None, memory_type=None, prompt=None, infer=True)
Add a memory to the store.
Parameters:
messages(str | dict | list[dict]): Memory content. Can be:- A string (will be converted to a message)
- A single message dict with
roleandcontent - A list of message dicts in OpenAI format
user_id(str, optional): User identifier.agent_id(str, optional): Agent identifier.run_id(str, optional): Run/conversation identifier.metadata(dict, optional): Additional metadata.filters(dict, optional): Filter metadata for advanced filtering.scope(str, optional): Memory scope (e.g., 'user', 'agent', 'session').memory_type(str, optional): Memory type classification.prompt(str, optional): Custom prompt for intelligent processing.infer(bool): Enable intelligent memory processing (default: True).
Returns:
dict: Result containing added memory information.
Example:
# Simple text memory
result = memory.add(
messages="User likes Python programming",
user_id="user123"
)
# With intelligent processing (default)
result = memory.add(
messages=[
{"role": "user", "content": "I'm Alice, a software engineer"},
{"role": "assistant", "content": "Nice to meet you!"}
],
user_id="user123"
# infer=True by default - enables intelligent fact extraction
)
# Single message dict
result = memory.add(
messages={"role": "user", "content": "I prefer dark mode"},
user_id="user123"
)
search(query, user_id=None, agent_id=None, run_id=None, filters=None, limit=30, threshold=None)
Search for memories using semantic similarity.
Parameters:
query(str): Search query string.user_id(str, optional): Filter by user ID.agent_id(str, optional): Filter by agent ID.run_id(str, optional): Filter by run ID.filters(dict, optional): Metadata filters for advanced filtering.limit(int): Maximum number of results (default: 30).threshold(float, optional): Similarity threshold (0.0-1.0) for filtering results.
Returns:
dict: Search results with memories and scores. Format:{
"results": [
{
"memory": "memory content",
"metadata": {...},
"score": 0.85,
"id": 123,
...
}
],
"relations": [...] # If graph store is enabled
}
Example:
results = memory.search(
query="user preferences",
user_id="user123",
limit=5,
threshold=0.7 # Only return results with similarity >= 0.7
)
for result in results.get('results', []):
print(f"Memory: {result['memory']}")
print(f"Score: {result.get('score', 0)}")
get(memory_id, user_id=None, agent_id=None)
Retrieve a specific memory by ID.
Parameters:
memory_id(int): Memory identifier.user_id(str, optional): User identifier for permission check.agent_id(str, optional): Agent identifier for permission check.
Returns:
dict | None: Memory data or None if not found.
Example:
memory_data = memory.get(123, user_id="user123")
if memory_data:
print(f"Content: {memory_data.get('memory', '')}")
update(memory_id, content=None, user_id=None, agent_id=None, metadata=None)
Update an existing memory.
Parameters:
memory_id(int): Memory identifier.content(str, optional): New memory content.user_id(str, optional): User identifier for permission check.agent_id(str, optional): Agent identifier for permission check.metadata(dict, optional): Updated metadata.
Returns:
dict: Updated memory data.
Example:
updated = memory.update(
memory_id=123,
content="User prefers Python over Java",
user_id="user123",
metadata={"updated_at": "2024-01-01"}
)
delete(memory_id, user_id=None, agent_id=None)
Delete a memory by ID.
Parameters:
memory_id(int): Memory identifier.user_id(str, optional): User identifier for permission check.agent_id(str, optional): Agent identifier for permission check.
Returns:
bool: True if deleted, False otherwise.
Example:
success = memory.delete(123, user_id="user123")
delete_all(user_id=None, agent_id=None, run_id=None)
Delete all memories matching criteria.
Parameters:
user_id(str, optional): Filter by user ID.agent_id(str, optional): Filter by agent ID.run_id(str, optional): Filter by run ID.
Returns:
dict: Deletion result with count.
Example:
result = memory.delete_all(user_id="user123")
print(f"Deleted {result.get('count', 0)} memories")
get_all(user_id=None, agent_id=None, run_id=None, limit=100, offset=0, filters=None)
Retrieve all memories matching criteria.
Parameters:
user_id(str, optional): Filter by user ID.agent_id(str, optional): Filter by agent ID.run_id(str, optional): Filter by run ID.limit(int): Maximum number of results (default: 100).offset(int): Offset for pagination (default: 0).filters(dict, optional): Metadata filters for advanced filtering.
Returns:
dict: All matching memories. Format:{
"results": [
{
"id": 123,
"memory": "content",
"metadata": {...},
...
}
],
"relations": [...] # If graph store is enabled
}
Example:
all_memories = memory.get_all(user_id="user123", limit=50, offset=0)
for mem in all_memories.get('results', []):
print(f"- {mem.get('memory', '')}")
Intelligent Memory Features
When infer=True (default), Memory automatically:
- Fact Extraction: Extracts facts from conversations
- Duplicate Detection: Prevents duplicate memories
- Memory Updates: Updates existing memories when information changes
- Conflict Resolution: Handles contradictory information
- Memory Consolidation: Merges related memories
Note: Intelligent processing is enabled by default. Set infer=False to disable it for simple storage operations.
See Getting Started Guide for more details on intelligent memory features.
Error Handling
All methods may raise exceptions. Common errors:
ValueError: Invalid parametersConnectionError: Storage backend connection issuesRuntimeError: LLM or embedding service errors
Example:
try:
result = memory.add(memory="Test", user_id="user123")
except Exception as e:
print(f"Error: {e}")