semtree_embed/lib.rs
1//! **Text-embedding abstraction for semtree.**
2//!
3//! One trait - [`Embedder`] - with swappable backends behind feature flags, so
4//! the rest of the pipeline never hard-codes an embedding provider:
5//!
6//! | Backend | Feature | Type |
7//! |---------|---------|------|
8//! | fastembed (local ONNX, default) | `fastembed-backend` | [`fastembed::FastEmbedder`] |
9//! | OpenAI | `openai-backend` | `openai::OpenAIEmbedder` |
10//! | Ollama | `ollama-backend` | `ollama::OllamaEmbedder` |
11//!
12//! Implement [`Embedder`] to plug in any model:
13//!
14//! ```
15//! use async_trait::async_trait;
16//! use semtree_embed::{Embedder, Embedding, EmbedError};
17//!
18//! struct Zeros;
19//!
20//! #[async_trait]
21//! impl Embedder for Zeros {
22//! async fn embed(&self, texts: &[&str]) -> Result<Vec<Embedding>, EmbedError> {
23//! Ok(texts.iter().map(|_| vec![0.0; 384]).collect())
24//! }
25//! }
26//! ```
27
28mod embedder;
29mod error;
30
31#[cfg(feature = "fastembed-backend")]
32pub mod fastembed;
33
34#[cfg(feature = "openai-backend")]
35pub mod openai;
36
37#[cfg(feature = "ollama-backend")]
38pub mod ollama;
39
40pub use embedder::Embedder;
41pub use error::EmbedError;
42
43pub type Embedding = Vec<f32>;