fabryk_vector/lib.rs
1//! Vector search infrastructure for Fabryk.
2//!
3//! This crate provides semantic vector search with pluggable embedding
4//! providers and vector backends. It includes LanceDB and fastembed
5//! backends (feature-gated), plus in-memory fallbacks for testing.
6//!
7//! # Features
8//!
9//! - `vector-lancedb`: Enable LanceDB-based vector storage and ANN search
10//! - `vector-fastembed`: Enable local embedding generation via fastembed
11//!
12//! # Architecture
13//!
14//! ```text
15//! ┌─────────────────────────────────────────────────────────────┐
16//! │ fabryk-vector │
17//! ├─────────────────────────────────────────────────────────────┤
18//! │ EmbeddingProvider trait │
19//! │ ├── MockEmbeddingProvider (always available) │
20//! │ └── FastEmbedProvider (feature: vector-fastembed) │
21//! ├─────────────────────────────────────────────────────────────┤
22//! │ VectorBackend trait │
23//! │ ├── SimpleVectorBackend (in-memory fallback) │
24//! │ └── LancedbBackend (feature: vector-lancedb) │
25//! ├─────────────────────────────────────────────────────────────┤
26//! │ VectorExtractor trait (domain text composition) │
27//! │ VectorIndexBuilder (batch embed + index orchestration) │
28//! ├─────────────────────────────────────────────────────────────┤
29//! │ Hybrid search (RRF merge with FTS results) │
30//! │ Persistence (content hash freshness checking) │
31//! └─────────────────────────────────────────────────────────────┘
32//! ```
33//!
34//! # Example
35//!
36//! ```rust,ignore
37//! use fabryk_vector::{
38//! VectorSearchParams, VectorBackend,
39//! MockEmbeddingProvider, SimpleVectorBackend,
40//! };
41//! use std::sync::Arc;
42//!
43//! let provider = Arc::new(MockEmbeddingProvider::new(384));
44//! let backend = SimpleVectorBackend::new(provider);
45//!
46//! let params = VectorSearchParams::new("semantic query")
47//! .with_limit(10)
48//! .with_category("harmony");
49//!
50//! let results = backend.search(params).await?;
51//! for result in results.items {
52//! println!("{}: {:.3}", result.id, result.score);
53//! }
54//! ```
55
56// Core modules (always available)
57pub mod backend;
58pub mod embedding;
59pub mod types;
60
61// Builder and extractor modules (always available)
62pub mod builder;
63pub mod extractor;
64
65// Hybrid search and persistence (always available)
66pub mod hybrid;
67pub mod persistence;
68
69// Feature-gated backend modules
70#[cfg(feature = "vector-fastembed")]
71pub mod fastembed;
72
73#[cfg(feature = "vector-lancedb")]
74pub mod lancedb;
75
76// Re-exports — core types
77pub use types::{
78 BuildError, EmbeddedDocument, VectorConfig, VectorDocument, VectorIndexStats,
79 VectorSearchParams, VectorSearchResult, VectorSearchResults,
80};
81
82// Re-exports — traits
83pub use backend::{SimpleVectorBackend, VectorBackend};
84pub use embedding::{EmbeddingProvider, MockEmbeddingProvider};
85pub use extractor::VectorExtractor;
86
87// Re-exports — builder
88pub use builder::VectorIndexBuilder;
89
90// Re-exports — hybrid search
91pub use hybrid::{FtsResult, HybridSearchResult, reciprocal_rank_fusion};
92
93// Re-exports — persistence
94pub use persistence::is_index_fresh;
95
96// Re-exports — factory
97pub use backend::create_vector_backend;
98
99// Feature-gated re-exports
100#[cfg(feature = "vector-fastembed")]
101pub use fastembed::FastEmbedProvider;
102
103#[cfg(feature = "vector-lancedb")]
104pub use lancedb::LancedbBackend;