Skip to main content

azoth_vector/
lib.rs

1//! Vector similarity search extension for Azoth using sqlite-vector
2//!
3//! This crate provides vector similarity search capabilities for Azoth applications
4//! using the [sqlite-vector](https://github.com/sqliteai/sqlite-vector) extension.
5//!
6//! # Features
7//!
8//! - Multiple vector types (Float32, Float16, Int8, 1-bit)
9//! - Multiple distance metrics (L2, Cosine, Dot Product, Hamming)
10//! - Fast k-NN search with filtering
11//! - SIMD-optimized for modern CPUs
12//! - No preindexing required
13//! - Migration helpers for easy setup
14//!
15//! # Example
16//!
17//! ```no_run
18//! use azoth::prelude::*;
19//! use azoth_vector::{VectorExtension, Vector, VectorSearch, VectorConfig, DistanceMetric};
20//!
21//! # async fn example() -> Result<()> {
22//! // Initialize Azoth with vector support
23//! let db = AzothDb::open("./data")?;
24//! db.projection().load_vector_extension(None)?;
25//!
26//! // Initialize vector column
27//! db.projection().vector_init(
28//!     "embeddings",
29//!     "vector",
30//!     VectorConfig::default(),
31//! )?;
32//!
33//! // Insert vectors
34//! let vector = Vector::new(vec![0.1, 0.2, 0.3]);
35//! db.projection().transaction(|txn: &rusqlite::Transaction| {
36//!     txn.execute(
37//!         "INSERT INTO embeddings (id, vector) VALUES (?, ?)",
38//!         rusqlite::params![1, vector.to_blob()],
39//!     ).map_err(|e| azoth::AzothError::Projection(e.to_string()))?;
40//!     Ok(())
41//! })?;
42//!
43//! // Search for similar vectors
44//! let query = Vector::new(vec![0.15, 0.25, 0.35]);
45//! let search = VectorSearch::new(db.projection().clone(), "embeddings", "vector");
46//! let results = search.knn(&query, 10).await?;
47//! # Ok(())
48//! # }
49//! ```
50
51pub mod extension;
52pub mod migration;
53pub mod search;
54pub mod types;
55
56pub use extension::VectorExtension;
57pub use migration::{add_vector_column, create_vector_table};
58pub use search::VectorSearch;
59pub use types::{DistanceMetric, SearchResult, Vector, VectorConfig, VectorType};