use crate::error::Result;
use crate::memory::embedder::Embedder;
use futures::future::BoxFuture;
pub struct MockEmbedder {
dimension: usize,
}
impl MockEmbedder {
pub fn new(dimension: usize) -> Self {
assert!(dimension > 0, "dimension must be > 0");
Self { dimension }
}
}
impl Embedder for MockEmbedder {
fn embed<'a>(&'a self, text: &'a str) -> BoxFuture<'a, Result<Vec<f32>>> {
Box::pin(async move {
let mut vec = vec![0.0f32; self.dimension];
for (i, b) in text.bytes().enumerate() {
vec[i % self.dimension] += b as f32;
}
let norm: f32 = vec.iter().map(|x| x * x).sum::<f32>().sqrt();
if norm > 0.0 {
for v in &mut vec {
*v /= norm;
}
}
Ok(vec)
})
}
}