Goal
Build vd into a complete vectorDB facade per the new report misc/docs/11 -- VectorDB Selection & Setup Guide. Three deliverables:
- Choose — provider registry + decision framework so agents/devs can pick a backend.
- Set up —
check_requirements(backend) per deployment archetype, with "next step" guidance.
- Facade — implement every vectorDB adapter, vendor-lock-in-free, with per-backend escape hatches.
Core redesign (decided with maintainer)
Redesign the core; refactor ef to match (ef is the only consumer, no end users yet).
- Decouple embedding from the facade core. Embedding becomes an optional convenience layer (
connect(backend, embedder=None)); the core deals in vectors. Drop the hard imbed dependency. (Matches the existing .claude/CLAUDE.md §6.)
Client becomes a Mapping[str, Collection]; Collection stays MutableMapping[str, Document] + search(); batch ops demoted to SupportsBatch.
- Shared
AbstractClient / AbstractCollection bases to kill the memory/chroma duplication; backend adapters become thin.
- Per-backend filter translators (
_compile_filter) over the canonical Mongo-style AST; UnsupportedFilterError wired to each backend's documented operator subset.
- Escape hatches (
.client, .native) mandatory on every adapter.
Backend scope
Deep + tested here (pip-installable / embedded): chroma, faiss, sqlite-vec, duckdb-vss, lancedb, qdrant (local), memory.
Adapters written correct-by-construction (need a server/cloud account to run): pgvector, pinecone, weaviate, milvus, redis, elasticsearch, mongodb-atlas, turbopuffer.
Tracking
Dev journal — appended as work proceeds.
Goal
Build
vdinto a complete vectorDB facade per the new reportmisc/docs/11 -- VectorDB Selection & Setup Guide. Three deliverables:check_requirements(backend)per deployment archetype, with "next step" guidance.Core redesign (decided with maintainer)
Redesign the core; refactor
efto match (ef is the only consumer, no end users yet).connect(backend, embedder=None)); the core deals in vectors. Drop the hardimbeddependency. (Matches the existing.claude/CLAUDE.md§6.)Clientbecomes aMapping[str, Collection];CollectionstaysMutableMapping[str, Document]+search(); batch ops demoted toSupportsBatch.AbstractClient/AbstractCollectionbases to kill the memory/chroma duplication; backend adapters become thin._compile_filter) over the canonical Mongo-style AST;UnsupportedFilterErrorwired to each backend's documented operator subset..client,.native) mandatory on every adapter.Backend scope
Deep + tested here (pip-installable / embedded): chroma, faiss, sqlite-vec, duckdb-vss, lancedb, qdrant (local), memory.
Adapters written correct-by-construction (need a server/cloud account to run): pgvector, pinecone, weaviate, milvus, redis, elasticsearch, mongodb-atlas, turbopuffer.
Tracking
Dev journal — appended as work proceeds.