Skip to main content

AIMemo

Memory System for AI Conversations

AIMemo is a lightweight memory layer that enables AI agents to remember context across conversations. Build AI applications that truly understand and remember your users.

PyPI version License: MIT

🚀 Features

  • Automatic Memory: Intercepts LLM calls and injects relevant context
  • Multiple Backends: SQLite, PostgreSQL support out of the box
  • Zero Config: Works with sensible defaults, configure when needed
  • LLM Agnostic: Supports OpenAI, Anthropic, and more
  • Namespace Isolation: Perfect for multi-user applications
  • Full-Text Search: Fast memory retrieval with FTS5/PostgreSQL search

📦 Installation

pip install aimemo

For PostgreSQL support:

pip install aimemo[postgres]

⚡ Quick Start

from aimemo import AIMemo
from openai import OpenAI

# Initialize AIMemo
aimemo = AIMemo()
aimemo.enable()

# Use OpenAI normally - memory is automatic!
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "I'm building a FastAPI project"}]
)

# Later conversation - context is automatically injected
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "How do I add authentication?"}]
)
# The model remembers your FastAPI project!

💡 Use Cases

  • Personal AI Assistants: Remember user preferences and history
  • Customer Support Bots: Maintain context across support sessions
  • Research Assistants: Keep track of research topics and findings
  • Multi-Agent Systems: Share memory between multiple AI agents
  • Learning Apps: Track student progress and learning patterns

🔧 Configuration

Database Options

SQLite (default):

from aimemo import AIMemo

aimemo = AIMemo()  # Uses aimemo.db by default

PostgreSQL:

from aimemo import AIMemo, PostgresStore

store = PostgresStore("postgresql://user:pass@localhost/aimemo")
aimemo = AIMemo(store=store)

Environment Variables

export AIMEMO_DB_PATH="./my_memory.db"
export AIMEMO_MAX_CONTEXT=10

Manual Memory Management

from aimemo import AIMemo

aimemo = AIMemo(namespace="user_123")

# Add memories manually
aimemo.add_memory(
    content="User prefers dark mode",
    tags=["preference", "ui"],
    metadata={"priority": "high"}
)

# Search memories
results = aimemo.search("dark mode", limit=5)

# Get formatted context
context = aimemo.get_context("user interface preferences")

Multi-User Applications

from aimemo import AIMemo

# Each user gets their own namespace
user_memory = AIMemo(namespace=f"user_{user_id}")
user_memory.enable()

# Memories are isolated per user

📚 Examples

Check out the examples/ directory:

  • basic_usage.py - Simple conversation with memory
  • manual_memory.py - Manual memory management
  • postgres_example.py - Using PostgreSQL backend
  • context_manager.py - Context manager pattern

🧪 Testing

pip install pytest
pytest tests/

🛠️ Development

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black aimemo tests examples

📖 Documentation

Full documentation is available in the docs/ directory:

Development & Planning

Core API

AIMemo

  • enable() - Start intercepting LLM calls
  • disable() - Stop intercepting
  • add_memory(content, metadata, tags) - Add memory manually
  • search(query, limit) - Search memories
  • get_context(query, limit) - Get formatted context
  • clear(namespace) - Clear memories

Storage Backends

  • SQLiteStore(db_path) - SQLite storage
  • PostgresStore(connection_string) - PostgreSQL storage

Architecture

AIMemo works by intercepting LLM API calls:

  1. Pre-call: Searches relevant memories based on user query
  2. Injection: Adds context to the conversation
  3. Post-call: Stores the conversation for future reference

All automatically, with zero code changes!

🤝 Contributing

We love contributions! ❤️ AIMemo is an open-source project and we welcome contributions of all kinds:

  • 🐛 Bug Reports: Found a bug? Open an issue
  • 💡 Feature Requests: Have an idea? Share it with us
  • 📝 Documentation: Help improve our docs
  • 🔧 Code: Submit a Pull Request

How to Contribute

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes and add tests
  4. Run tests: pytest tests/
  5. Commit your changes: git commit -m 'Add amazing feature'
  6. Push to the branch: git push origin feature/amazing-feature
  7. Open a Pull Request

Development Setup

# Clone the repository
git clone https://github.com/gianghungtien/aimemo.git
cd aimemo

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black aimemo tests examples

First time contributing? Check out issues labeled good first issue to get started!

Contributors

Thanks to all the amazing people who have contributed to AIMemo! 🙏

📄 License

MIT License - see LICENSE file for details.

🙋 Support & Community

Need help? We're here for you!

Show Your Support

If you find AIMemo helpful, please consider:

  • ⭐ Star this repository to show your support
  • 🐦 Share it with your friends and colleagues
  • 📝 Write about it in your blog or social media
  • 🤝 Contribute to make it even better

Metadata

Release files for aimemo 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aimemo 1.1.1
File Size Uploaded Provenance
aimemo-1.1.1.tar.gz 22.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aimemo 1.1.1
File Interpreter ABI Platform
aimemo-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 38.5 kB

Release files / aimemo-1.1.1.tar.gz

Download URL aimemo-1.1.1.tar.gz
Size 22.2 kB
Tags Source
SHA-256 checksum
How to use checksums
048816f8f12a10fb181391eb620fbe917c4c95e92689f96f7f796188bf653e4f
BLAKE2b-256 checksum
How to use checksums
a232dd598023b097ba4588fb915d3f20f47513846c2f283addedbaf143354376
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / aimemo-1.1.1-py3-none-any.whl

Download URL aimemo-1.1.1-py3-none-any.whl
Size 16.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ea270d8cba742affd6317299c6fe10ab4a445f5a4131d4beeac721a351e3b65d
BLAKE2b-256 checksum
How to use checksums
60628ff8924d8289db5ffd53a07d8d2a0a42c9d5e0f0768917c1107e096ed5f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Security for aimemo 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page