Skip to main content

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//!     fn dimension(&self) -> usize { 384 }
26//!     fn model_id(&self) -> &str { "zeros" }
27//! }
28//! ```
29
30mod embedder;
31mod error;
32
33#[cfg(feature = "fastembed-backend")]
34pub mod fastembed;
35
36#[cfg(feature = "openai-backend")]
37pub mod openai;
38
39#[cfg(feature = "ollama-backend")]
40pub mod ollama;
41
42pub use embedder::Embedder;
43pub use error::EmbedError;
44
45pub type Embedding = Vec<f32>;