walrus_core/memory/embedder.rs
1//! Embedding trait for converting text to vector representations.
2//!
3//! Used by memory backends that support semantic search.
4
5use std::future::Future;
6
7/// Converts text into a dense vector embedding.
8///
9/// Implementations may call external APIs (OpenAI, local models, etc.).
10/// Uses RPITIT for async without boxing.
11pub trait Embedder: Send + Sync {
12 /// Embed the given text into a dense float vector.
13 fn embed(&self, text: &str) -> impl Future<Output = Vec<f32>> + Send;
14}
15
16/// A no-op embedder that always returns an empty vector.
17///
18/// Used with memory backends that support optional embeddings
19/// (e.g. `SqliteMemory<NoEmbedder>`) when no embedding model is configured.
20pub struct NoEmbedder;
21
22impl Embedder for NoEmbedder {
23 async fn embed(&self, _text: &str) -> Vec<f32> {
24 Vec::new()
25 }
26}