Enterprise-grade conversational memory for AI agents
Project description
AgentMem
Enterprise-grade conversational memory for AI agents
AgentMem provides session-based conversation management, multiple storage backends, and seamless integration with major LLM providers.
Features
✨ Session Management - Organize conversations with persistent sessions
💾 Multiple Backends - SQLite, Redis, In-Memory, and vector stores
🔄 Auto-Summarization - Automatic conversation compression when limits reached
📊 Token Management - Keep context within model limits
🎯 LLM Provider Integration - Native OpenAI and Anthropic format support
⚡ Async First - Built for high-performance async applications
Quick Start
Installation
pip install agentmem
Optional dependencies:
pip install agentmem[redis] # Redis backend
pip install agentmem[vector] # Vector store support
pip install agentmem[chromadb] # ChromaDB vector store
pip install agentmem[all] # All optional dependencies
Basic Usage
import asyncio
from agentmem import create_memory_manager, Message, MessageRole
async def main():
# Create memory manager with SQLite backend
manager = create_memory_manager("sqlite", db_path="conversations.db")
await manager.backend.connect()
# Create a session
session = await manager.create_session(user_id="user123")
# Add messages
await session.add_message(Message(
role=MessageRole.USER,
content="Hello! What's the capital of France?"
))
await session.add_message(Message(
role=MessageRole.ASSISTANT,
content="The capital of France is Paris."
))
# Get conversation history
messages = await session.get_messages()
print(f"Conversation has {len(messages)} messages")
# Get recent context (token-limited)
context = await session.get_recent_context(max_tokens=2000)
asyncio.run(main())
With OpenAI
import asyncio
from openai import AsyncOpenAI
from agentmem import create_memory_manager, Message, MessageRole
async def chat_with_memory(user_message: str, user_id: str = "default"):
# Initialize
openai_client = AsyncOpenAI()
manager = create_memory_manager("sqlite", db_path="chat.db")
await manager.backend.connect()
# Get or create session
session = await manager.get_or_create_session(
session_id=f"session_{user_id}",
user_id=user_id
)
# Add user message
await session.add_message(Message(
role=MessageRole.USER,
content=user_message
))
# Get conversation history
messages = await session.get_messages()
# Convert to OpenAI format
openai_messages = [msg.to_openai_format() for msg in messages]
# Get AI response
response = await openai_client.chat.completions.create(
model="gpt-3.5-turbo",
messages=openai_messages
)
assistant_message = response.choices[0].message.content
# Save assistant response
await session.add_message(Message(
role=MessageRole.ASSISTANT,
content=assistant_message
))
return assistant_message
# Run
asyncio.run(chat_with_memory("What's the weather like?"))
Backends
In-Memory (Development)
from agentmem import InMemoryBackend
backend = InMemoryBackend()
await backend.connect()
SQLite (Production)
from agentmem import SQLiteBackend
backend = SQLiteBackend(db_path="memory.db")
await backend.connect()
Redis (Distributed)
from agentmem import RedisBackend
backend = RedisBackend(
host="localhost",
port=6379,
password="secret" # optional
)
await backend.connect()
Advanced Features
Auto-Summarization
Automatically compress conversations when they exceed thresholds:
session = await manager.create_session(
user_id="user123",
max_messages=100,
auto_summarize=True,
summary_threshold=50 # Summarize after 50 messages
)
Token Management
Keep context within model limits:
# Get recent messages that fit within token budget
context = await session.get_recent_context(max_tokens=2000)
# Convert to your LLM format
openai_messages = [msg.to_openai_format() for msg in context]
anthropic_messages = [msg.to_anthropic_format() for msg in context]
Session Metadata
Track additional information:
session = await manager.create_session(
user_id="user123",
agent_id="support_agent",
workflow_id="customer_support",
tags=["support", "billing"],
properties={"priority": "high", "department": "sales"}
)
Clean Up Expired Sessions
# Cleanup sessions that have expired
deleted_count = await manager.cleanup_expired_sessions()
print(f"Cleaned up {deleted_count} expired sessions")
Configuration Patterns
Development
# Fast, non-persistent
manager = create_memory_manager("memory")
Testing
# In-memory SQLite
manager = create_memory_manager("sqlite", db_path=":memory:")
Production
# Persistent SQLite with custom settings
manager = create_memory_manager("sqlite",
db_path="/var/app/conversations.db",
pool_size=10,
timeout=30
)
Distributed
# Redis for multi-instance deployments
manager = create_memory_manager("redis",
host="redis.example.com",
port=6379,
db=0,
password=os.getenv("REDIS_PASSWORD")
)
API Reference
Core Classes
- Message: Universal message format with role, content, and metadata
- SessionMetadata: Session configuration and state
- ConversationSummary: Automatically generated conversation summaries
- MemoryUsage: Memory usage statistics
Interfaces
- IMemorySession: Session management interface
- IMemoryBackend: Backend storage interface
- IMemoryManager: High-level memory management interface
Factory Functions
- create_memory_manager(): Create a memory manager with specified backend
- create_memory_backend(): Create a backend instance directly
Integration Examples
LangChain
from langchain.memory import ConversationBufferMemory
from agentmem import create_memory_manager
# Use agentmem as LangChain memory backend
manager = create_memory_manager("sqlite")
# ... integrate with LangChain chains
LlamaIndex
from llama_index import ChatMemoryBuffer
from agentmem import create_memory_manager
# Use agentmem with LlamaIndex
manager = create_memory_manager("sqlite")
# ... integrate with LlamaIndex agents
Roadmap
Phase 1 (Current) - Conversational Memory
- ✅ Session management
- ✅ Multiple backends (SQLite, Redis, In-Memory)
- ✅ Auto-summarization
- ✅ Token management
- ✅ LLM provider integration
Phase 2 (Planned) - Agent Memory
- 🔜 6 memory types (Working, Episodic, Semantic, Procedural, Emotional, Preference)
- 🔜 Personalization engine
- 🔜 Context compression strategies
- 🔜 Memory analytics and optimization
- 🔜 Long-term semantic memory with vector search
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
Apache License 2.0 - see LICENSE file for details.
Support
- Documentation: https://github.com/aekdahl/agentmem
- Issues: https://github.com/aekdahl/agentmem/issues
- Discussions: https://github.com/aekdahl/agentmem/discussions
Acknowledgments
AgentMem is extracted from LangSwarm, a multi-agent AI orchestration framework. It represents Phase 1 of the memory system, focusing on conversational memory management.
Built with ❤️ for the AI agent community
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langswarm_memory-0.1.0.tar.gz.
File metadata
- Download URL: langswarm_memory-0.1.0.tar.gz
- Upload date:
- Size: 73.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a6f11b8c9156278212a88623ac2b60e785d87a353bcacef9157b2e035baeb70
|
|
| MD5 |
703e566cd3582b3edf5139b83646ce96
|
|
| BLAKE2b-256 |
caf0d5c3d04a7a1c5d293d96228f7e499957616246a76ad599de61fd12ceb555
|
File details
Details for the file langswarm_memory-0.1.0-py3-none-any.whl.
File metadata
- Download URL: langswarm_memory-0.1.0-py3-none-any.whl
- Upload date:
- Size: 77.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b811f7f8f95b761cf25fbbf91179515d11f138b1f1915d578c2adb3533ea1cc1
|
|
| MD5 |
8c3524e99a3c480d71ea8936f540bbd7
|
|
| BLAKE2b-256 |
070293a3132daff916aed9807d458d4220edef897c69af0402efc15a0d1464d9
|