omnivore_core/intelligence/
embeddings.rs

1use crate::Result;
2
3pub struct EmbeddingGenerator {
4    dimension: usize,
5}
6
7impl EmbeddingGenerator {
8    pub fn new(dimension: usize) -> Self {
9        Self { dimension }
10    }
11
12    pub fn generate(&self, text: &str) -> Result<Vec<f32>> {
13        let hash = self.simple_hash(text);
14        let mut embedding = vec![0.0f32; self.dimension];
15
16        for (i, value) in embedding.iter_mut().enumerate().take(self.dimension) {
17            *value = ((hash + i as u64) % 1000) as f32 / 1000.0;
18        }
19
20        Ok(embedding)
21    }
22
23    fn simple_hash(&self, text: &str) -> u64 {
24        text.bytes()
25            .fold(0u64, |acc, b| acc.wrapping_mul(31).wrapping_add(b as u64))
26    }
27}