use std::sync::Arc;
use crate::index::Embedder;
pub struct BobbinEmbeddingProvider {
embedder: Arc<Embedder>,
}
impl BobbinEmbeddingProvider {
pub fn new(embedder: Arc<Embedder>) -> Self {
Self { embedder }
}
}
impl quipu::embedding::EmbeddingProvider for BobbinEmbeddingProvider {
fn embed_text(&self, text: &str) -> quipu::Result<Vec<f32>> {
self.embedder
.embed_sync(text)
.map_err(|e| quipu::Error::InvalidValue(format!("bobbin embedder failed: {e}")))
}
fn embed_batch(&self, texts: &[&str]) -> quipu::Result<Vec<Vec<f32>>> {
self.embedder
.embed_batch_sync(texts)
.map_err(|e| quipu::Error::InvalidValue(format!("bobbin embedder failed: {e}")))
}
fn dimension(&self) -> usize {
self.embedder.dimension()
}
}
pub fn attach_embedder(store: &mut quipu::Store, embedder: Arc<Embedder>) {
store.set_embedding_provider(Arc::new(BobbinEmbeddingProvider::new(embedder)));
}
#[cfg(test)]
#[path = "embedding_tests.rs"]
mod tests;