Skip to main content

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.

License Python PyPI


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.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

Apache License 2.0 - see LICENSE file for details.


Support


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

langswarm_memory-0.1.0.tar.gz (73.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langswarm_memory-0.1.0-py3-none-any.whl (77.5 kB view details)

Uploaded Python 3

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

Hashes for langswarm_memory-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2a6f11b8c9156278212a88623ac2b60e785d87a353bcacef9157b2e035baeb70
MD5 703e566cd3582b3edf5139b83646ce96
BLAKE2b-256 caf0d5c3d04a7a1c5d293d96228f7e499957616246a76ad599de61fd12ceb555

See more details on using hashes here.

File details

Details for the file langswarm_memory-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for langswarm_memory-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b811f7f8f95b761cf25fbbf91179515d11f138b1f1915d578c2adb3533ea1cc1
MD5 8c3524e99a3c480d71ea8936f540bbd7
BLAKE2b-256 070293a3132daff916aed9807d458d4220edef897c69af0402efc15a0d1464d9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page