Skip to content

Vector Backends

antonyrag edited this page Aug 4, 2026 · 1 revision

Vector Backends

ragleap-rag supports 6 vector storage backends. 2 are live-verified against a real service; 4 are code-complete but not yet live-tested — this is disclosed honestly rather than claimed as fully working, per this project's core standard.

Backend Install Hybrid search Live-verified? Notes
PgVectorBackend included by default Yes — native ✅ Yes Default if vector_backend= is omitted. Conversation memory always uses this same Postgres connection regardless of backend choice.
FAISSBackend pip install ragleap-rag[faiss] No — gracefully degrades to dense-only ✅ Yes Local, in-process, no API key. Pass persist_directory= for data that survives restarts. Metadata filtering is a post-filter, not indexed — fine at small-to-medium scale.
PineconeBackend pip install ragleap-rag[pinecone] No — degrades to dense-only ❌ No account available Managed, serverless. Code-complete against the real installed SDK's source. persist_directory= is required, not optional.
WeaviateBackend pip install ragleap-rag[weaviate] No — degrades to dense-only ❌ No account available Vectors are self-provided. Deterministic UUIDs derived from document_id:chunk_index for idempotent inserts.
QdrantBackend pip install ragleap-rag[qdrant] No — degrades to dense-only ❌ No account available Point IDs must be valid UUID strings at runtime (a real SDK gotcha found via source inspection, not docs).
MilvusBackend pip install ragleap-rag[milvus] No — degrades to dense-only ❌ No account available Accepts arbitrary string primary keys directly — no UUID workaround needed, unlike the other 3 managed backends.

Why the honest "not live-verified" labels matter

One of these backends (PineconeBackend) was previously claimed as "code-complete but unverified" in an earlier internal document — and that claim turned out to be false; it had never actually been built. That mistake is exactly why every backend here gets an explicit, checked status rather than an assumed one. See the CHANGELOG's v0.10.1 entry for the full story.

Switching backends

from ragleap.vectorstores import FAISSBackend, PgVectorBackend

# pgvector (default — no vector_backend= needed)
rag = RagLeap(database_url="...", primary=..., embedder=...)

# FAISS — everything else about ingest/ask stays identical
rag = RagLeap(database_url="...", vector_backend=FAISSBackend(persist_directory="/data/faiss"),
              primary=..., embedder=...)

database_url is always required, even with a non-Postgres vector backend, since conversation memory always lives in Postgres regardless of where vectors are stored.

Want to help verify the remaining 4?

Live-verifying Pinecone, Weaviate, Qdrant, and Milvus against real accounts is tracked as Phase 6 items #6 in ROADMAP.md — blocked purely on access to real accounts for these services, not on remaining engineering work. If you have an account and are willing to help verify, please open an issue.

Clone this wiki locally