pub mod fastembed;
pub use fastembed::FastEmbedGenerator;
use anyhow::Result;
use mr_common::ModelConfig;
use std::sync::Arc;
pub trait EmbeddingGenerator: Send + Sync {
fn dimension(&self) -> usize;
fn embed(&self, text: &str) -> Result<Vec<f32>>;
fn embed_batch(&self, texts: &[String]) -> Result<Vec<Vec<f32>>>;
}
pub struct GeneratorFactory;
impl GeneratorFactory {
pub fn create(config: ModelConfig) -> Result<Arc<dyn EmbeddingGenerator>> {
Ok(Arc::new(FastEmbedGenerator::new(config)?))
}
}
pub struct MockEmbedder;
impl MockEmbedder {
pub fn new() -> Self {
Self
}
}
impl Default for MockEmbedder {
fn default() -> Self {
Self::new()
}
}
impl EmbeddingGenerator for MockEmbedder {
fn dimension(&self) -> usize {
384
}
fn embed(&self, _text: &str) -> Result<Vec<f32>> {
Ok(vec![0.0; 384])
}
fn embed_batch(&self, texts: &[String]) -> Result<Vec<Vec<f32>>> {
Ok(texts.iter().map(|_| vec![0.0; 384]).collect())
}
}