use crate::error::Result;
pub trait EmbeddingBackend: Send + Sync {
fn embed(&self, text: &str) -> Result<Vec<f32>>;
fn embed_batch(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>> {
let mut results = Vec::with_capacity(texts.len());
for text in texts {
results.push(self.embed(text)?);
}
Ok(results)
}
fn dimensions(&self) -> usize;
fn is_available(&self) -> bool;
fn model_name(&self) -> &str;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::embeddings::NoopBackend;
#[test]
fn trait_object_works() {
let backend: Box<dyn EmbeddingBackend> = Box::new(NoopBackend::new(384));
assert_eq!(backend.dimensions(), 384);
assert!(backend.is_available());
assert_eq!(backend.model_name(), "noop");
}
}