Skip to main content

memory_mcp/embedding/
mod.rs

1mod candle;
2
3use crate::error::MemoryError;
4
5pub use self::candle::{CandleEmbeddingEngine, MODEL_ID};
6
7/// Trait abstracting embedding backends so we can swap implementations
8/// without changing calling code.
9#[async_trait::async_trait]
10pub trait EmbeddingBackend: Send + Sync {
11    /// Embed a batch of texts, returning one vector per input.
12    async fn embed(&self, texts: &[String]) -> Result<Vec<Vec<f32>>, MemoryError>;
13
14    /// Convenience: embed a single text.
15    async fn embed_one(&self, text: &str) -> Result<Vec<f32>, MemoryError> {
16        let mut results = self.embed(&[text.to_string()]).await?;
17        results
18            .pop()
19            .ok_or_else(|| MemoryError::Embedding("embedding returned no vectors".to_string()))
20    }
21
22    /// Number of dimensions produced by the model.
23    fn dimensions(&self) -> usize;
24}