Skip to main content

seekr_code/embedder/
traits.rs

1//! Embedder trait definition.
2//!
3//! Defines the pluggable backend interface for text embedding.
4
5use crate::error::EmbedderError;
6
7/// Trait for text embedding backends.
8///
9/// Implementations convert text strings into dense vector representations
10/// suitable for semantic similarity search.
11pub trait Embedder: Send + Sync {
12    /// Embed a single text string into a vector.
13    fn embed(&self, text: &str) -> Result<Vec<f32>, EmbedderError>;
14
15    /// Embed a batch of text strings into vectors.
16    ///
17    /// Default implementation calls `embed` for each text sequentially.
18    /// Backends should override this for batch-optimized inference.
19    fn embed_batch(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>, EmbedderError> {
20        texts.iter().map(|t| self.embed(t)).collect()
21    }
22
23    /// Return the dimensionality of the output embedding vectors.
24    fn dimension(&self) -> usize;
25}
26
27/// Blanket implementation for boxed trait objects.
28impl Embedder for Box<dyn Embedder> {
29    fn embed(&self, text: &str) -> Result<Vec<f32>, EmbedderError> {
30        (**self).embed(text)
31    }
32
33    fn embed_batch(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>, EmbedderError> {
34        (**self).embed_batch(texts)
35    }
36
37    fn dimension(&self) -> usize {
38        (**self).dimension()
39    }
40}
41