omnivore_core/intelligence/
embeddings.rs1use 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}