use crate::{
error::{Error, Result},
types::{Embedding, EmbeddingDtype},
};
use async_trait::async_trait;
#[async_trait]
pub trait Embedder: Send + Sync {
fn name(&self) -> &str;
fn version(&self) -> &str;
fn dim(&self) -> usize;
fn dtype(&self) -> EmbeddingDtype;
async fn embed_batch(&self, texts: &[&str]) -> Result<Vec<Embedding>>;
async fn embed(&self, text: &str) -> Result<Embedding> {
let mut results = self.embed_batch(&[text]).await?;
results.pop().ok_or(Error::EmbedderProtocol(
"embed_batch returned empty for non-empty input",
))
}
}