Skip to main content

Enterprise-grade conversational memory for AI agents

Project description

LangSwarm Memory

Enterprise-grade conversational memory for AI agents

LangSwarm Memory 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 langswarm_memory

Optional dependencies:

pip install langswarm_memory[redis]      # Redis backend
pip install langswarm_memory[vector]     # Vector store support
pip install langswarm_memory[chromadb]   # ChromaDB vector store
pip install langswarm_memory[all]        # All optional dependencies

Basic Usage

import asyncio
from langswarm_memory 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 langswarm_memory 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 langswarm_memory import InMemoryBackend

backend = InMemoryBackend()
await backend.connect()

SQLite (Production)

from langswarm_memory import SQLiteBackend

backend = SQLiteBackend(db_path="memory.db")
await backend.connect()

Redis (Distributed)

from langswarm_memory 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 langswarm_memory import create_memory_manager

# Use langswarm_memory as LangChain memory backend
manager = create_memory_manager("sqlite")
# ... integrate with LangChain chains

LlamaIndex

from llama_index import ChatMemoryBuffer
from langswarm_memory import create_memory_manager

# Use langswarm_memory 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

Phase 3 (Planned) - Evaluation & Quality

  • 🔜 8) LLM-as-Judge Evaluator Worker - Build independent evaluation service
    • Run custom evaluations (deterministic checks + LLM judge)
    • Use any model/provider for evaluation
    • Run evals in CI/CD with custom SLAs
    • Ingest results as scores into Langfuse
    • Full control independent of external managed eval runners
    • Strategy: Use Langfuse for storage/UI/datasets/score schemas, build our own evaluator for execution

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

LangSwarm Memory 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.2.0.tar.gz (98.4 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.2.0-py3-none-any.whl (108.3 kB view details)

Uploaded Python 3

File details

Details for the file langswarm_memory-0.2.0.tar.gz.

File metadata

  • Download URL: langswarm_memory-0.2.0.tar.gz
  • Upload date:
  • Size: 98.4 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.2.0.tar.gz
Algorithm Hash digest
SHA256 055160f7e3bf197c2c27d2206c4ecee4e983dc2e5b00118d125d78f2f96d3bb3
MD5 c20bc5e0f962d3ef7abe70516897ba91
BLAKE2b-256 20d146992d4cbe2cfd95c9aca1d8d28a89da8323ba2793a586029b8e7284235c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for langswarm_memory-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 838f57729896184956fb713bcd7b126b4875df3fdbbfe0475c9f69e64660d213
MD5 ccaccf4e8228fdc6d9d32270edba7c5e
BLAKE2b-256 19195000462ed9c0f0eef852eadac206f0c6049d16f464486ef19af6b5ae0758

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