1use async_trait::async_trait;
4
5use super::entry::MemoryEntry;
6use crate::Result;
7
8#[async_trait]
10pub trait MemoryStore: Send + Sync {
11 async fn add(&self, entry: MemoryEntry) -> Result<String>;
13
14 async fn search(&self, query: &str, limit: usize) -> Result<Vec<MemoryEntry>>;
16
17 async fn search_by_embedding(
19 &self,
20 embedding: &[f32],
21 limit: usize,
22 threshold: f32,
23 ) -> Result<Vec<MemoryEntry>>;
24
25 async fn get(&self, id: &str) -> Result<Option<MemoryEntry>>;
27
28 async fn update(&self, entry: MemoryEntry) -> Result<()>;
30
31 async fn delete(&self, id: &str) -> Result<()>;
33
34 async fn clear(&self) -> Result<()>;
36
37 async fn count(&self) -> Result<usize>;
39
40 async fn ids(&self) -> Result<Vec<String>>;
42}