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

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.1.2.tar.gz (82.9 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.2-py3-none-any.whl (86.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: langswarm_memory-0.1.2.tar.gz
  • Upload date:
  • Size: 82.9 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.2.tar.gz
Algorithm Hash digest
SHA256 1e5e5696376e0af98c1726dc07bd71a2c03f3bbeae2b1ce967ccfd970a18ceb9
MD5 72888eebf819ee0c2bde38a313a15a02
BLAKE2b-256 c9dbc31a8065b0c083cabb912d5456398cadb44f3a27654fac23fd26c98279f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for langswarm_memory-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ac2364b8d03cc1c269ccee268ab3f784ee43b4a500c33aaf7e11d2181f8295df
MD5 5e732f3909293188870ea53760c85dd4
BLAKE2b-256 7bc170ddfe61abb8eac2ba76fda1d6d17b24c0b25df25ac65888eefa6c9fd3b6

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