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