Supabase Vector Store (#2427)

This commit is contained in:
Saket Aryan
2025-03-25 00:15:50 +05:30
committed by GitHub
parent 9db5f62262
commit 2b49c9eedd
14 changed files with 8422 additions and 8 deletions
@@ -0,0 +1,53 @@
import dotenv from "dotenv";
import { demoMemoryStore } from "./memory";
import { demoSupabase } from "./supabase";
// import { demoQdrant } from "./qdrant";
// import { demoRedis } from "./redis";
// import { demoPGVector } from "./pgvector";
// Load environment variables
dotenv.config();
async function main() {
const args = process.argv.slice(2);
const selectedStore = args[0]?.toLowerCase();
const stores: Record<string, () => Promise<void>> = {
// memory: demoMemoryStore,
supabase: demoSupabase,
// Uncomment these as they are implemented
// qdrant: demoQdrant,
// redis: demoRedis,
// pgvector: demoPGVector,
};
if (selectedStore) {
const demo = stores[selectedStore];
if (demo) {
try {
await demo();
} catch (error) {
console.error(`\nError running ${selectedStore} demo:`, error);
if (selectedStore !== "memory") {
console.log("\nFalling back to memory store...");
await stores.memory();
}
}
} else {
console.log(`\nUnknown vector store: ${selectedStore}`);
console.log("Available stores:", Object.keys(stores).join(", "));
}
return;
}
// If no store specified, run all available demos
for (const [name, demo] of Object.entries(stores)) {
try {
await demo();
} catch (error) {
console.error(`\nError running ${name} demo:`, error);
}
}
}
main().catch(console.error);
@@ -0,0 +1,38 @@
import { Memory } from "../../src";
import { runTests } from "../utils/test-utils";
export async function demoMemoryStore() {
console.log("\n=== Testing In-Memory Vector Store ===\n");
const memory = new Memory({
version: "v1.1",
embedder: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "text-embedding-3-small",
},
},
vectorStore: {
provider: "memory",
config: {
collectionName: "memories",
dimension: 1536,
},
},
llm: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "gpt-4-turbo-preview",
},
},
historyDbPath: "memory.db",
});
await runTests(memory);
}
if (require.main === module) {
demoMemoryStore();
}
@@ -0,0 +1,49 @@
import { Memory } from "../../src";
import { runTests } from "../utils/test-utils";
export async function demoPGVector() {
console.log("\n=== Testing PGVector Store ===\n");
const memory = new Memory({
version: "v1.1",
embedder: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "text-embedding-3-small",
},
},
vectorStore: {
provider: "pgvector",
config: {
collectionName: "memories",
dimension: 1536,
dbname: process.env.PGVECTOR_DB || "vectordb",
user: process.env.PGVECTOR_USER || "postgres",
password: process.env.PGVECTOR_PASSWORD || "postgres",
host: process.env.PGVECTOR_HOST || "localhost",
port: parseInt(process.env.PGVECTOR_PORT || "5432"),
embeddingModelDims: 1536,
hnsw: true,
},
},
llm: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "gpt-4-turbo-preview",
},
},
historyDbPath: "memory.db",
});
await runTests(memory);
}
if (require.main === module) {
if (!process.env.PGVECTOR_DB) {
console.log("\nSkipping PGVector test - environment variables not set");
process.exit(0);
}
demoPGVector();
}
@@ -0,0 +1,50 @@
import { Memory } from "../../src";
import { runTests } from "../utils/test-utils";
export async function demoQdrant() {
console.log("\n=== Testing Qdrant Store ===\n");
const memory = new Memory({
version: "v1.1",
embedder: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "text-embedding-3-small",
},
},
vectorStore: {
provider: "qdrant",
config: {
collectionName: "memories",
embeddingModelDims: 1536,
url: process.env.QDRANT_URL,
apiKey: process.env.QDRANT_API_KEY,
path: process.env.QDRANT_PATH,
host: process.env.QDRANT_HOST,
port: process.env.QDRANT_PORT
? parseInt(process.env.QDRANT_PORT)
: undefined,
onDisk: true,
},
},
llm: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "gpt-4-turbo-preview",
},
},
historyDbPath: "memory.db",
});
await runTests(memory);
}
if (require.main === module) {
if (!process.env.QDRANT_URL && !process.env.QDRANT_HOST) {
console.log("\nSkipping Qdrant test - environment variables not set");
process.exit(0);
}
demoQdrant();
}
@@ -0,0 +1,45 @@
import { Memory } from "../../src";
import { runTests } from "../utils/test-utils";
export async function demoRedis() {
console.log("\n=== Testing Redis Store ===\n");
const memory = new Memory({
version: "v1.1",
embedder: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "text-embedding-3-small",
},
},
vectorStore: {
provider: "redis",
config: {
collectionName: "memories",
embeddingModelDims: 1536,
redisUrl: process.env.REDIS_URL || "redis://localhost:6379",
username: process.env.REDIS_USERNAME,
password: process.env.REDIS_PASSWORD,
},
},
llm: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "gpt-4-turbo-preview",
},
},
historyDbPath: "memory.db",
});
await runTests(memory);
}
if (require.main === module) {
if (!process.env.REDIS_URL) {
console.log("\nSkipping Redis test - environment variables not set");
process.exit(0);
}
demoRedis();
}
@@ -0,0 +1,49 @@
import { Memory } from "../../src";
import { runTests } from "../utils/test-utils";
import dotenv from "dotenv";
// Load environment variables
dotenv.config();
export async function demoSupabase() {
console.log("\n=== Testing Supabase Vector Store ===\n");
const memory = new Memory({
version: "v1.1",
embedder: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "text-embedding-3-small",
},
},
vectorStore: {
provider: "supabase",
config: {
collectionName: "memories",
embeddingModelDims: 1536,
supabaseUrl: process.env.SUPABASE_URL || "",
supabaseKey: process.env.SUPABASE_KEY || "",
tableName: "memories",
},
},
llm: {
provider: "openai",
config: {
apiKey: process.env.OPENAI_API_KEY || "",
model: "gpt-4-turbo-preview",
},
},
historyDbPath: "memory.db",
});
await runTests(memory);
}
if (require.main === module) {
if (!process.env.SUPABASE_URL || !process.env.SUPABASE_KEY) {
console.log("\nSkipping Supabase test - environment variables not set");
process.exit(0);
}
demoSupabase();
}