Overview
The Vector Search API (TIP-040) extends the Memory layer with semantic search capabilities using dense embeddings. It provides:- Embedding Storage: Store f32 vectors alongside memory entries
- Cosine Similarity: Measure semantic similarity between vectors
- Vector Search: Pure semantic search via brute-force cosine scan
- Hybrid Search: Merge FTS5 keyword + vector results using Reciprocal Rank Fusion (RRF)
vector.rs
VectorMemory Trait
vector.rs:115
Methods
store_with_embedding()
content: Text content to storemeta: Metadata (tags, priority, source)embedding: Dense vector representation
vector.rs:117, sqlite.rs:267
vector_search()
query: Vector query with embedding, limit, and min_similarity threshold
vector.rs:120, sqlite.rs:288
hybrid_search()
text: Keyword query stringquery_embedding: Query vector for semantic searchlimit: Maximum results to return
- Run FTS5 keyword search → List A (ranked by BM25)
- Run vector similarity search → List B (ranked by cosine similarity)
- Merge lists using RRF scoring
- Return top
limitresults by RRF score
vector.rs:122, sqlite.rs:334
has_vector_support()
true if the implementation supports vector search.
Source: vector.rs:131
vector_stats()
vector.rs:134, sqlite.rs:385
Data Types
Embedding
vector.rs:12
VectorQuery
limit: 10min_similarity: 0.0
vector.rs:57
VectorSearchResult
vector.rs:89
VectorStats
vector.rs:98
Algorithms
Cosine Similarity
- Returns 0.0 if dimensions mismatch
- Returns 0.0 if either vector is zero-length
- Returns 0.0 for empty vectors
vector.rs:140
Reciprocal Rank Fusion (RRF)
k = 60 (standard constant).
Properties:
- Documents appearing in both lists get boosted scores
- Rank matters more than raw scores
- Handles disjoint lists gracefully
vector.rs:171
Performance
Vector Search Complexity
- Time: O(n * d) where n = entries with embeddings, d = dimensions
- Space: O(n * d) for embedding storage
- Benchmark: 1000 entries × 128-dim completes in under 100ms (brute force)
sqlite.rs:823
Hybrid Search Complexity
- FTS5 Search: O(log n) via inverted index
- Vector Search: O(n * d) brute force
- RRF Merge: O(m log m) where m = unique IDs
Future Optimizations
Planned improvements for production scale:- ANN Indexing: Approximate Nearest Neighbor (HNSW, IVF)
- Quantization: Reduce f32 → int8 for 4× storage/bandwidth savings
- GPU Acceleration: Batch vector operations on GPU
SqliteMemory Implementation
SqliteMemory implements VectorMemory with:
- Storage: f32 vectors as little-endian BLOBs
- Schema:
embedding,embedding_model,embedding_dimcolumns - Migration: Idempotent ALTER TABLE on initialization
- Search: Brute-force cosine scan over all embedded entries