fabryk-vector 0.2.0

Vector search infrastructure for Fabryk (LanceDB + fastembed backends)
Documentation

Vector search infrastructure for Fabryk.

This crate provides semantic vector search with pluggable embedding providers and vector backends. It includes LanceDB and fastembed backends (feature-gated), plus in-memory fallbacks for testing.

Features

  • vector-lancedb: Enable LanceDB-based vector storage and ANN search
  • vector-fastembed: Enable local embedding generation via fastembed

Architecture

┌─────────────────────────────────────────────────────────────┐
│                     fabryk-vector                           │
├─────────────────────────────────────────────────────────────┤
│  EmbeddingProvider trait                                    │
│  ├── MockEmbeddingProvider (always available)               │
│  └── FastEmbedProvider (feature: vector-fastembed)          │
├─────────────────────────────────────────────────────────────┤
│  VectorBackend trait                                        │
│  ├── SimpleVectorBackend (in-memory fallback)               │
│  └── LancedbBackend (feature: vector-lancedb)              │
├─────────────────────────────────────────────────────────────┤
│  VectorExtractor trait (domain text composition)            │
│  VectorIndexBuilder (batch embed + index orchestration)     │
├─────────────────────────────────────────────────────────────┤
│  Hybrid search (RRF merge with FTS results)                │
│  Persistence (content hash freshness checking)              │
└─────────────────────────────────────────────────────────────┘

Example

use fabryk_vector::{
    VectorSearchParams, VectorBackend,
    MockEmbeddingProvider, SimpleVectorBackend,
};
use std::sync::Arc;

let provider = Arc::new(MockEmbeddingProvider::new(384));
let backend = SimpleVectorBackend::new(provider);

let params = VectorSearchParams::new("semantic query")
    .with_limit(10)
    .with_category("harmony");

let results = backend.search(params).await?;
for result in results.items {
    println!("{}: {:.3}", result.id, result.score);
}