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
Python
TypeScript
| 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
- Index Selection: - Use
hnswfor faster search performance when memory usage is not a constraint- Manage indexes manually if you need a different pgvector index strategy
- 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
- Format:
Indexing
The pgvector provider can create an HNSW index for faster vector search.
- Set
hnswtotrueto enable a Hierarchical Navigable Small World index. - Leave
hnswasfalseif you want to create or manage indexes yourself.
Similarity Search
The pgvector provider uses cosine similarity for vector search. Make sure your embedding dimensions match the configured embedding_model_dims value.