solo-storage 0.3.7

Solo: SQLite + SQLCipher persistence layer
Documentation
// SPDX-License-Identifier: Apache-2.0

//! Embedder implementations behind the `solo_core::Embedder` trait.
//!
//! Two impls live here:
//!
//!   - [`StubEmbedder`] — deterministic hash-based F32 embedder. Used in
//!     unit tests, integration tests, and as a placeholder until BGE-M3
//!     loading lands. Same input always produces the same vector; vectors
//!     are normalised to unit length so cosine similarity is well-defined.
//!
//!   - [`BgeM3Loader`] — file-discovery + config parsing for HuggingFace
//!     BGE-M3 model directories (`config.json`, `tokenizer.json`,
//!     `model.safetensors`). The actual forward pass via candle-core +
//!     candle-transformers + tokenizers lands in commit 1.4.b — until then,
//!     `BgeM3Loader::open` validates the model directory but the
//!     `Embedder` impl is intentionally not provided. Daemon-main wiring
//!     uses `StubEmbedder` in the interim.
//!
//! ## Why split 1.4 in half
//!
//! Live BGE-M3 inference is a substantial integration: candle-transformers
//! `xlm_roberta` (BGE-M3's base architecture) + the `tokenizers` crate +
//! a model-fetching path + the 1.2 GB weights file. Splitting the
//! integration from the API surface lets commit 1.5 (daemon main) start
//! immediately on the stub embedder and switch to BGE-M3 when 1.4.b lands.
//! Everything downstream of the `Embedder` trait stays untouched.

pub mod bge_m3;
pub mod bge_m3_inference;
pub mod stub;

pub use bge_m3::{BgeM3Config, BgeM3Loader, BgeM3Manifest};
pub use bge_m3_inference::BgeM3Inference;
pub use stub::StubEmbedder;