use crate::store::MemoryError;
use async_trait::async_trait;
#[async_trait]
pub trait EmbeddingProvider: Send + Sync {
async fn embed(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>, MemoryError>;
fn dimensions(&self) -> usize;
}
pub struct MockEmbeddingProvider {
dims: usize,
}
impl MockEmbeddingProvider {
pub fn new(dims: usize) -> Self {
Self { dims }
}
}
#[async_trait]
impl EmbeddingProvider for MockEmbeddingProvider {
async fn embed(&self, texts: &[&str]) -> Result<Vec<Vec<f32>>, MemoryError> {
let embeddings = texts
.iter()
.map(|text| {
let bytes = text.as_bytes();
if bytes.is_empty() {
return vec![0.0_f32; self.dims];
}
(0..self.dims)
.map(|i| {
let byte = bytes[i % bytes.len()] as f32;
(byte / 255.0) * 2.0 - 1.0
})
.collect()
})
.collect();
Ok(embeddings)
}
fn dimensions(&self) -> usize {
self.dims
}
}