// 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 use ;
pub use BgeM3Inference;
pub use StubEmbedder;