Examples
Production Stack

Production Stack

Production-ready configuration with PostgreSQL, Qdrant, and Gemini.

Prerequisites

  • Docker and Docker Compose
  • Google API key

Infrastructure

docker-compose.yml

version: '3.8'
 
services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes
 
  postgres:
    image: postgres:15-alpine
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: remina
      POSTGRES_PASSWORD: remina
      POSTGRES_DB: remina
    volumes:
      - postgres_data:/var/lib/postgresql/data
 
  qdrant:
    image: qdrant/qdrant:latest
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_data:/qdrant/storage
 
volumes:
  redis_data:
  postgres_data:
  qdrant_data:
docker-compose up -d

Installation

pip install remina-memory[gemini,postgres,qdrant,redis]

Configuration

import os
from remina import Memory
 
os.environ["GOOGLE_API_KEY"] = "your-api-key"
 
config = {
    "cache": {
        "redis_url": "redis://localhost:6379",
        "ttl_seconds": 3600,
        "max_memories_per_user": 100,
        "enabled": True,
    },
    "storage": {
        "provider": "postgres",
        "config": {
            "host": "localhost",
            "port": 5432,
            "database": "remina",
            "user": "remina",
            "password": "remina",
            "collection_name": "memories",
            "min_connections": 2,
            "max_connections": 10,
        }
    },
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "url": "http://localhost:6333",
            "collection_name": "remina_memories",
            "embedding_dims": 768,
        }
    },
    "embedder": {
        "provider": "gemini",
        "config": {
            "model": "models/text-embedding-004",
            "dimensions": 768,
        }
    },
    "llm": {
        "provider": "gemini",
        "config": {
            "model": "gemini-2.0-flash",
            "temperature": 0.1,
            "max_tokens": 2000,
        }
    },
    "weight_recency": 0.4,
    "weight_frequency": 0.3,
    "weight_importance": 0.3,
    "dedup_threshold": 0.9,
}
 
memory = Memory(config)

Complete Example

"""
Production stack: Gemini + Qdrant + PostgreSQL + Redis
"""
 
import os
from remina import Memory
 
os.environ["GOOGLE_API_KEY"] = "your-api-key"
 
def main():
    config = {
        "cache": {
            "redis_url": "redis://localhost:6379",
            "ttl_seconds": 3600,
            "enabled": True,
        },
        "storage": {
            "provider": "postgres",
            "config": {
                "host": "localhost",
                "port": 5432,
                "database": "remina",
                "user": "remina",
                "password": "remina",
            }
        },
        "vector_store": {
            "provider": "qdrant",
            "config": {
                "url": "http://localhost:6333",
                "collection_name": "remina_memories",
                "embedding_dims": 768,
            }
        },
        "embedder": {
            "provider": "gemini",
            "config": {
                "model": "models/text-embedding-004",
                "dimensions": 768,
            }
        },
        "llm": {
            "provider": "gemini",
            "config": {
                "model": "gemini-2.0-flash",
                "temperature": 0.1,
            }
        },
    }
    
    print("Initializing production stack...")
    memory = Memory(config)
    
    user_id = "prod_user_001"
    
    memory.delete_all(user_id=user_id)
    
    # Add from text
    print("\nAdding memories from text...")
    result = memory.add(
        messages="I'm Sarah, a data scientist at Google. I specialize in NLP.",
        user_id=user_id,
    )
    print(f"Extracted {len(result['results'])} memories")
    
    # Add from conversation
    print("Adding memories from conversation...")
    result = memory.add(
        messages=[
            {"role": "user", "content": "I prefer PyTorch over TensorFlow"},
            {"role": "assistant", "content": "PyTorch is excellent for research."},
            {"role": "user", "content": "I use Jupyter notebooks daily"},
        ],
        user_id=user_id,
    )
    print(f"Extracted {len(result['results'])} memories")
    
    # Search
    print("\nSearch: 'ML frameworks'")
    results = memory.search(
        query="What ML frameworks does the user prefer?",
        user_id=user_id,
        limit=5,
    )
    for mem in results["results"]:
        print(f"  [{mem['score']:.3f}] {mem['memory']}")
    
    # List all
    print("\nAll memories:")
    all_memories = memory.get_all(user_id=user_id)
    for i, mem in enumerate(all_memories["results"], 1):
        print(f"  {i}. {mem['memory']}")
    
    memory.close()
    print("\nComplete.")
 
if __name__ == "__main__":
    main()

Alternative: OpenAI + Pinecone

Fully managed cloud stack:

config = {
    "cache": {
        "redis_url": "redis://your-redis-host:6379",
        "enabled": True,
    },
    "storage": {
        "provider": "postgres",
        "config": {
            "host": "your-postgres-host",
            "port": 5432,
            "database": "remina",
            "user": "postgres",
            "password": "your-password",
        }
    },
    "vector_store": {
        "provider": "pinecone",
        "config": {
            "api_key": os.environ["PINECONE_API_KEY"],
            "index_name": "remina-prod",
            "namespace": "production",
            "embedding_dims": 1536,
            "cloud": "aws",
            "region": "us-east-1",
        }
    },
    "embedder": {
        "provider": "openai",
        "config": {
            "model": "text-embedding-3-small",
            "dimensions": 1536,
        }
    },
    "llm": {
        "provider": "openai",
        "config": {
            "model": "gpt-4o-mini",
            "temperature": 0.1,
        }
    },
}

Health Check

def check_health(memory: Memory) -> dict:
    health = {"status": "healthy", "services": {}}
    
    try:
        memory.get_all(user_id="health_check", limit=1)
        health["services"]["storage"] = "ok"
    except Exception as e:
        health["services"]["storage"] = f"error: {e}"
        health["status"] = "unhealthy"
    
    try:
        memory.search(query="test", user_id="health_check", limit=1)
        health["services"]["vector_store"] = "ok"
        health["services"]["embeddings"] = "ok"
    except Exception as e:
        health["services"]["vector_store"] = f"error: {e}"
        health["status"] = "unhealthy"
    
    return health