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