NexusMemory / backend /services /vectorstore.py
bharatverse11's picture
Supabase migration: Postgres engine (psycopg2) + pgvector vector store with Chroma fallback
443e09c
Raw
History Blame Contribute Delete
1.37 kB
"""Vector store factory.
Uses pgvector (Postgres) when DATABASE_URL points at Postgres so embeddings
PERSIST across restarts; falls back to local ChromaDB for local dev.
"""
import logging
from config import settings
from services.llm import get_embeddings
from database import SQLALCHEMY_DATABASE_URL, IS_POSTGRES
logger = logging.getLogger(__name__)
def get_vectorstore(collection_name: str):
"""Return a vector store bound to `collection_name`."""
embeddings = get_embeddings()
if IS_POSTGRES:
from langchain_community.vectorstores import PGVector
return PGVector(
connection_string=SQLALCHEMY_DATABASE_URL,
collection_name=collection_name,
embedding_function=embeddings,
)
from langchain_chroma import Chroma
return Chroma(
collection_name=collection_name,
embedding_function=embeddings,
persist_directory=str(settings.CHROMA_DIR),
)
def drop_collection(collection_name: str) -> bool:
"""Delete an entire collection (PGVector or Chroma)."""
try:
store = get_vectorstore(collection_name)
store.delete_collection()
logger.info(f"Deleted collection: {collection_name}")
return True
except Exception as e:
logger.error(f"Failed to delete collection {collection_name}: {e}")
return False