pub mod bow;
#[cfg(any(feature = "bundled-ort", feature = "load-dynamic", feature = "cuda"))]
pub mod neural;
pub use bow::BowEmbedder;
#[cfg(any(feature = "bundled-ort", feature = "load-dynamic", feature = "cuda"))]
pub use neural::NeuralEmbedder;
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "lowercase")]
pub enum EmbedderKind {
#[default]
Bow,
Neural,
}
impl EmbedderKind {
pub fn as_str(&self) -> &'static str {
match self {
Self::Bow => "bow",
Self::Neural => "neural",
}
}
}
pub trait Embedder: Send + Sync {
fn kind(&self) -> EmbedderKind;
fn embed_batch(&self, texts: &[&str]) -> anyhow::Result<Vec<Vec<f32>>>;
fn dim(&self) -> usize;
}