Skip to main content

A memory-augmented framework for LLMs

Project description

🦙 Llamate

Llamate is a memory-augmented agent framework for Large Language Models (LLMs) that provides persistent, retrievable memory for AI conversations.

What is Llamate?

Llamate solves a fundamental limitation of current LLMs: their inability to remember past conversations beyond a single context window. It creates a vector database of memories that can be semantically searched and retrieved during conversations, allowing LLMs to maintain continuity and context over extended interactions.

How It Works

  1. Memory Storage: Llamate stores important pieces of conversation as vector embeddings in a database (PostgreSQL is the only supported DB).
  2. Semantic Retrieval: When new queries come in, Llamate searches for semantically relevant past memories.
  3. Memory Filtering: The system automatically filters out the current query from search results to prevent echo effects.
  4. Context Enhancement: Retrieved memories are injected into the conversation context, allowing the LLM to access and utilize past information.
  5. User Identification: Each user gets a unique memory space, ensuring personalized conversation history.

Key Features

  • Backend Support: Works with PostgreSQL (with pgvector)
  • Persistence: Memories remain available between sessions and application restarts
  • Simple API: Easy-to-use Python interface that works with any LLM
  • CLI Interface: Command-line tool for quick testing and interaction
  • Production Ready: Designed for both development and production environments

Quick Start

Local Development

The following steps guide you through setting up Llamate for local development:

1. Install Package

pip install llamate

2. OpenAI API Requirements

Llamate requires access to the following OpenAI models in your account:

  • Embedding models (at least one of):
    • text-embedding-3-small (default, 1536 dimensions) - Faster, smaller embeddings, cost-effective
    • text-embedding-3-large (3072 dimensions) - Higher accuracy, larger embeddings
  • gpt-4 - Recommended for high-quality responses

Make sure these models are enabled in your OpenAI account.

Environment Variables

Llamate is configured primarily through environment variables, making it easy to integrate with any backend deployment. The following environment variables are supported:

Variable Default Description
LLAMATE_OPENAI_API_KEY None (Required) Your OpenAI API key
LLAMATE_VECTOR_BACKEND postgres Vector store backend (postgres)
LLAMATE_DATABASE_URL postgresql://llamate:llamate@localhost:5432/llamate PostgreSQL connection string (when using postgres backend)
LLAMATE_EMBEDDING_MODEL text-embedding-3-small Embedding model to use (text-embedding-3-small or text-embedding-3-large)

Example configuration for production deployment:

# Required
LLAMATE_OPENAI_API_KEY=sk-your-api-key

# Optional overrides
LLAMATE_VECTOR_BACKEND=postgres
LLAMATE_DATABASE_URL=postgresql://user:password@your-db-host:5432/dbname
LLAMATE_EMBEDDING_MODEL=text-embedding-3-large

Note: While you can use llamate --init for local development to generate a .env file, in production environments you should configure these variables directly in your deployment platform.

3. Start PostgreSQL Container

docker run --name llamate-postgres -e POSTGRES_USER=llamate -e POSTGRES_PASSWORD=llamate -e POSTGRES_DB=llamate -p 5432:5432 -d ankane/pgvector

4. Initialize Llamate

llamate --init
# Select 'postgres' as your vector store backend
# Enter connection string: postgresql://llamate:llamate@localhost:5432/llamate

5. Test Llamate locally

from llamate import MemoryAgent, get_vectorstore_from_env

# Set user ID
user_id = "test_user"

# Initialize components
vectorstore = get_vectorstore_from_env(user_id=user_id)
agent = MemoryAgent(user_id=user_id, vectorstore=vectorstore)

# Add memories
agent.chat("The capital of France is Paris.")
agent.chat("The Eiffel Tower is 324 meters tall.")
agent.chat("Python is a programming language created by Guido van Rossum.")

# Test retrieval
response = agent.chat("Tell me about Paris.")
print("Response:", response)

Production Integration

For production applications, you'll typically integrate Llamate directly into your backend services:

from llamate import MemoryAgent, get_vectorstore_from_env
import os

# In production, set environment variables directly in your deployment platform
# os.environ["LLAMATE_OPENAI_API_KEY"] = "your-key-here" # Set in platform instead
# os.environ["LLAMATE_DATABASE_URL"] = "connection-string" # Set in platform instead

def create_llamate_agent(user_id):
    """Factory function to create a memory-augmented agent for a specific user"""
    vectorstore = get_vectorstore_from_env(user_id=user_id)
    return MemoryAgent(user_id=user_id, vectorstore=vectorstore)

# Example API endpoint
def handle_chat_request(user_id, user_message):
    agent = create_llamate_agent(user_id)
    return agent.chat(user_message)

6. View Data in PostgreSQL

Connect to the database:

docker exec -it llamate-postgres psql -U llamate -d llamate

List tables to find your memory table (it will use your user_id):

\dt

View table structure:

\d memory_test_user

Display memory records (omitting the large vector field):

SELECT id, text FROM memory_test_user;

Count records:

SELECT COUNT(*) FROM memory_test_user;

Query specific memories (using text search):

SELECT id, text FROM memory_test_user WHERE text LIKE '%Paris%';

Delete test memories (if needed):

DELETE FROM memory_test_user WHERE text LIKE '%test%';

Exit the PostgreSQL shell:

\q

Features

  • Persistent memory for AI using vector embeddings
  • Vector store backends (PostgreSQL)
  • Easy integration into existing applications
  • Simple CLI for testing and demonstration

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

llamate-0.1.11.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

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

llamate-0.1.11-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file llamate-0.1.11.tar.gz.

File metadata

  • Download URL: llamate-0.1.11.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for llamate-0.1.11.tar.gz
Algorithm Hash digest
SHA256 f57e509b056bbe7c1a3d789ae8d89b43329426c1e71d9e159c04fbf259530b6b
MD5 d274f29fe23750b6e74f697c95ea646c
BLAKE2b-256 476cc7fc6be3aec4dd7495ed15fabb53b1e2523c4ab63fc178900738c4ccbcbf

See more details on using hashes here.

File details

Details for the file llamate-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: llamate-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for llamate-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 fbef38dfa1afaaef73136cfff7d3ccaec6ea1e8ce460bf79bf3c2c393e33ba93
MD5 4e9bfdcaea517b7cce7695f0e1412b5a
BLAKE2b-256 662913a7c79c2e85e0a39d15af4ca7ef251de8e185f8b8e6e8e14d8a59accc38

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