Neon - Mem0

Usage

Use Neon as a vector store in Mem0, powered by PostgreSQL and the pgvector extension. Neon is a serverless Postgres platform. Since Mem0 supports Postgres through the pgvector provider, Neon can be used with a standard Postgres connection string.

Python

import os

from dotenv import load_dotenv
from mem0 import Memory

load_dotenv()

config = {
    "vector_store": {
        "provider": "pgvector",
        "config": {
            "connection_string": os.environ["DATABASE_URL"],
            "collection_name": "memories",
            "embedding_model_dims": 1536,
            "hnsw": True,
        },
    },
}

m = Memory.from_config(config)
messages = [
    {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"},
    {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."},
    {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."},
    {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."},
]
m.add(messages, user_id="alice", metadata={"category": "movies"})

results = m.search(
    "What movies should I recommend?",
    filters={"user_id": "alice"},
)

print(results)

TypeScript

import "dotenv/config";
import { Memory } from "mem0ai/oss";

const m = new Memory({
  vectorStore: {
    provider: "pgvector",
    config: {
      connectionString: process.env.DATABASE_URL!,
      ssl: {
        rejectUnauthorized: false,
      },
      collectionName: "memories",
      dimension: 1536,
      embeddingModelDims: 1536,
      hnsw: true,
    },
  },
});

const messages = [
  { role: "user" as const, content: "I'm planning to watch a movie tonight. Any recommendations?" },
  { role: "assistant" as const, content: "How about thriller movies? They can be quite engaging." },
  { role: "user" as const, content: "I'm not a big fan of thriller movies but I love sci-fi movies." },
  { role: "assistant" as const, content: "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future." },
];

await m.add(messages, {
  userId: "alice",
  metadata: { category: "movies" },
});

const results = await m.search("What movies should I recommend?", {
  filters: { user_id: "alice" },
});

console.log(results);

SQL Migration

You don’t need to run any SQL migrations. Mem0 creates the collection table when it initializes the pgvector store.

Environment

OPENAI_API_KEY=sk-xx...
DATABASE_URL=postgresql://user:password@ep-example.us-east-2.aws.neon.tech/neondb?sslmode=require

Config

Parameter Description Default Value
connection_string Neon Postgres connection string. Required
collection_name Name for the vector collection. mem0
embedding_model_dims Embedding model dimensions. 1536
hnsw Enables HNSW indexing. False
sslmode PostgreSQL SSL mode. Use require for Neon. Driver default

Best Practices

  1. Index Selection: - Use hnsw for faster search performance when memory usage is not a constraint
    • Manage indexes manually if you need a different pgvector index strategy
  2. Connection String: - Always use environment variables or even better, a secret manager for sensitive information in the connection string
    • Format: postgresql://user:password@host:port/database

Indexing

The pgvector provider can create an HNSW index for faster vector search.

Similarity Search

The pgvector provider uses cosine similarity for vector search. Make sure your embedding dimensions match the configured embedding_model_dims value.