langchain-velesdb
LangChain integration for VelesDB vector database.
Installation
pip install langchain-velesdb
Quick Start
from langchain_velesdb import VelesDBVectorStore
from langchain_openai import OpenAIEmbeddings
# Initialize vector store
vectorstore = VelesDBVectorStore(
path="./my_vectors",
collection_name="documents",
embedding=OpenAIEmbeddings()
)
# Add documents
vectorstore.add_texts([
"VelesDB is a high-performance vector database",
"Built entirely in Rust for speed and safety",
"Perfect for RAG applications and semantic search"
])
# Search
results = vectorstore.similarity_search("fast database", k=2)
for doc in results:
print(doc.page_content)
Usage with RAG
from langchain_velesdb import VelesDBVectorStore
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.chains import RetrievalQA
# Create vector store with documents
vectorstore = VelesDBVectorStore.from_texts(
texts=["Document 1 content", "Document 2 content"],
embedding=OpenAIEmbeddings(),
path="./rag_data",
collection_name="knowledge_base"
)
# Create RAG chain
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(),
chain_type="stuff",
retriever=retriever
)
# Ask questions
answer = qa_chain.run("What is VelesDB?")
print(answer)
API Reference
VelesDBVectorStore
VelesDBVectorStore(
embedding: Embeddings,
path: str = "./velesdb_data",
collection_name: str = "langchain",
metric: str = "cosine", # "cosine", "euclidean", "dot" (aliases: "dotproduct", "inner", "ip"), "hamming", "jaccard"
storage_mode: str = "full", # "full"/"f32", "sq8"/"int8" (4× compression), "binary"/"bit" (32× compression), "pq" (8-32× compression), "rabitq" (32× with scalar correction)
search_quality: str = None, # "fast", "balanced", "accurate", "perfect", "autotune", "custom:N", "adaptive:MIN:MAX"
)
Methods
Core Operations:
add_texts(texts, metadatas=None, ids=None)- Add texts to the storeadd_texts_bulk(texts, metadatas=None, ids=None)- Bulk insert (2-3x faster for large batches)add_texts_streaming(texts, metadatas=None, ids=None, ...)- Stream-insert via the bounded-channel ingestion pipeline (returns the list of inserted IDs)delete(ids)- Delete documents by IDget_by_ids(ids)- Retrieve documents by their IDsflush()- Flush pending changes to disk
Search:
similarity_search(query, k=4)- Search for similar documentssimilarity_search_with_score(query, k=4)- Search with similarity scores (cosine scores normalized to [0, 1])similarity_search_by_vector(embedding, k=4, filter=None)- Search with a pre-computed query vectormax_marginal_relevance_search(query, k=4, fetch_k=20, lambda_mult=0.5)- MMR search balancing relevance and diversitymax_marginal_relevance_search_by_vector(embedding, k=4, fetch_k=20, lambda_mult=0.5)- MMR search with a pre-computed query vectorsimilarity_search_with_filter(query, k=4, filter=None)- Search with metadata filteringbatch_search(queries, k=4)- Batch search multiple queries in parallelbatch_search_with_score(queries, k=4)- Batch search with scoresmulti_query_search(queries, k=4, fusion="rrf", ...)- Multi-query fusion searchmulti_query_search_with_score(queries, k=4, ...)- Multi-query search with fused scoreshybrid_search(query, k=4, vector_weight=0.5, filter=None)- Hybrid vector+BM25 searchtext_search(query, k=4, filter=None)- Full-text BM25 searchquery(query_str, params=None)- Execute VelesQL query
Utilities:
as_retriever(**kwargs)- Convert to LangChain retrieverfrom_texts(texts, embedding, ...)- Create store from texts (class method)get_collection_info()- Get collection metadata (name, dimension, point_count)is_empty()- Check if collection is emptyscroll(batch_size=100, filter=None)- Iterate over all points in stable batches without a query vector
Advanced Features
Multi-Query Fusion (MQG)
Search with multiple query reformulations and fuse results using various strategies. Perfect for RAG pipelines using Multiple Query Generation (MQG).
# Basic usage with RRF (Reciprocal Rank Fusion)
results = vectorstore.multi_query_search(
queries=["travel to Greece", "Greek vacation", "Athens trip"],
k=10,
)
# With weighted fusion (like SearchXP's scoring)
results = vectorstore.multi_query_search(
queries=["travel Greece", "vacation Mediterranean"],
k=10,
fusion="weighted",
fusion_params={
"avg_weight": 0.6, # Average score weight
"max_weight": 0.3, # Maximum score weight
"hit_weight": 0.1, # Hit ratio weight
}
)
# Get fused scores
results_with_scores = vectorstore.multi_query_search_with_score(
queries=["query1", "query2", "query3"],
k=5,
fusion="rrf",
fusion_params={"k": 60} # RRF parameter
)
for doc, score in results_with_scores:
print(f"{score:.3f}: {doc.page_content}")
Fusion Strategies:
"rrf"- Reciprocal Rank Fusion (default, robust to score scale differences)"average"- Mean score across all queries"maximum"- Maximum score from any query"weighted"- Custom combination of avg, max, and hit ratio"relative_score"- Linear blend of dense and sparse scores
# Relative Score Fusion — explicit control over dense vs sparse weight
results = vectorstore.multi_query_search(
queries=["semantic search", "keyword retrieval"],
k=10,
fusion="relative_score",
fusion_params={"dense_weight": 0.7, "sparse_weight": 0.3}
)
Advanced Search
search_quality — Quality Presets
Control the recall/latency trade-off for all similarity searches with a single parameter set at construction time or overridden per-call.
# Set once on the store — applies to every similarity_search call
vectorstore = VelesDBVectorStore(
embedding=OpenAIEmbeddings(),
path="./data",
search_quality="accurate", # higher recall at the cost of latency
)
results = vectorstore.similarity_search("machine learning", k=10)
# Override per-call via kwargs
results = vectorstore.similarity_search_with_score(
"machine learning", k=10, search_quality="fast",
)
Accepted values:
| Value | Description |
|---|---|
"fast" |
Lowest latency, reduced recall |
"balanced" |
Balanced latency/recall |
"accurate" |
Higher recall, higher latency |
"perfect" |
Exhaustive search, maximum recall |
"autotune" |
Runtime-adaptive quality |
"custom:N" |
Explicit ef_search (e.g. "custom:256") |
"adaptive:MIN:MAX" |
Adaptive ef range (e.g. "adaptive:32:512") |
similarity_search_with_ef(query, ef_search, k)
Search with an explicit HNSW ef_search parameter to trade query latency for recall.
Higher ef_search increases recall at the cost of slower search.
# Use a high ef_search for maximum recall at query time
results = vectorstore.similarity_search_with_ef(
query="machine learning",
ef_search=256,
k=10
)
Hybrid Search (Vector + BM25)
# Combine vector similarity with keyword matching
results = vectorstore.hybrid_search(
query="machine learning performance",
k=5,
vector_weight=0.7 # 70% vector, 30% BM25
)
for doc, score in results:
print(f"{score:.3f}: {doc.page_content}")
Full-Text Search (BM25)
# Pure keyword-based search
results = vectorstore.text_search("VelesDB Rust", k=5)
for doc, score in results:
print(f"{score:.3f}: {doc.page_content}")
Metadata Filtering
# Search with filters
results = vectorstore.similarity_search_with_filter(
query="database",
k=5,
filter={"condition": {"type": "eq", "field": "category", "value": "tech"}}
)
Cross-Collection MATCH
The query() method runs single-collection VelesQL/MATCH queries against the
vector store's own collection:
results = vectorstore.query(
"MATCH (p:Product)-[:STORED_IN]->(w:Warehouse) RETURN p.name, w.city LIMIT 20"
)
for row in results:
print(row["p.name"], row["w.city"])
Cross-collection
@collectionMATCH is not available through the LangChain integration.vectorstore.query()delegates to a singlevelesdb.Collection, which cannot resolve@collection-annotated nodes from other collections — that requiresDatabase-level routing. For cross-collection MATCH, use the corevelesdb.DatabaseAPI or the REST server directly. (Tracked indocs/reference/ECOSYSTEM_PARITY.md, action item #7.)
Features
- High Performance: VelesDB's Rust backend delivers sub-millisecond latencies
- SIMD Optimized: Hardware-accelerated vector operations
- Multi-Query Fusion: Native support for MQG pipelines with RRF/Weighted fusion
- Hybrid Search: Combine vector similarity with BM25 text matching
- Full-Text Search: BM25 ranking for keyword queries
- Metadata Filtering: Filter results by document attributes
- Typed Column Store: Schema-aware metadata collections with ColumnStore-backed range / equality predicates
- Simple Setup: Self-contained single binary, no external services required
- LangChain VectorStore API: implements
add_texts,add_documents,similarity_search,similarity_search_with_score,similarity_search_with_relevance_scores,similarity_search_by_vector,max_marginal_relevance_search(+_by_vector),get_by_ids,delete,from_texts, andas_retriever(includingsearch_type="mmr"), so it plugs into standard retriever-based chains and agents. Async (a*) methods fall back to LangChain's default thread-pool wrappers.
Agent Memory (optional)
langchain-velesdb also re-exports three agent-memory wrappers around VelesDB's
native memory subsystems. They are imported lazily — if the underlying
langchain extras aren't installed, the import becomes a no-op and the
symbols are exposed as None.
from langchain_velesdb import (
VelesDBChatMemory, # short-term conversational buffer
VelesDBSemanticMemory, # long-term knowledge store
VelesDBProceduralMemory, # learned action patterns with reinforcement
)
See langchain_velesdb/memory.py for the full per-class API (chat history
buffer with optional embedding, semantic recall with score, procedural
reinforcement). Tests under integrations/langchain/tests/ exercise each.
License
MIT License (this integration). See LICENSE for details.
VelesDB Core itself is licensed under the VelesDB Core License 1.0 (based on ELv2).
Release files for langchain-velesdb 3.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_velesdb-3.11.0.tar.gz | 70.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_velesdb-3.11.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.8 kB
Release files / langchain_velesdb-3.11.0.tar.gz
| Download URL | langchain_velesdb-3.11.0.tar.gz |
|---|---|
| Size | 70.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bd1256c7f5ea8af97e9b6591c28e77cc0dcea7ae80cf077d472e56b859354209
|
|
BLAKE2b-256 checksum How to use checksums |
e55a8969a5b43f1e0f682ed07317c52e3b29c5a880d52bd77d2d122534e69854
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Release files / langchain_velesdb-3.11.0-py3-none-any.whl
| Download URL | langchain_velesdb-3.11.0-py3-none-any.whl |
|---|---|
| Size | 44.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4783502b1c125a1658f22ae32d986c8ebaeb8cc1cff49bfff0a7268ec8466db2
|
|
BLAKE2b-256 checksum How to use checksums |
1ef96b0effd175efa38266fb72537ce2c557372a140db7e6ed898d3ac3ad0182
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|