1mod distance;
2mod filter;
3mod index;
4mod upstash;
5
6pub use distance::DistanceMetric;
7pub use index::FlatIndex;
8pub use upstash::UpstashVectorIndex;
9
10use async_trait::async_trait;
11use mem7_core::MemoryFilter;
12use mem7_error::Result;
13use uuid::Uuid;
14
15#[derive(Debug, Clone)]
17pub struct VectorSearchResult {
18 pub id: Uuid,
19 pub score: f32,
20 pub payload: serde_json::Value,
21}
22
23#[async_trait]
25pub trait VectorIndex: Send + Sync {
26 async fn insert(&self, id: Uuid, vector: &[f32], payload: serde_json::Value) -> Result<()>;
27 async fn search(
28 &self,
29 query: &[f32],
30 limit: usize,
31 filters: Option<&MemoryFilter>,
32 ) -> Result<Vec<VectorSearchResult>>;
33 async fn delete(&self, id: &Uuid) -> Result<()>;
34 async fn update(
35 &self,
36 id: &Uuid,
37 vector: Option<&[f32]>,
38 payload: Option<serde_json::Value>,
39 ) -> Result<()>;
40 async fn get(&self, id: &Uuid) -> Result<Option<(Vec<f32>, serde_json::Value)>>;
41 async fn list(
42 &self,
43 filters: Option<&MemoryFilter>,
44 limit: Option<usize>,
45 ) -> Result<Vec<(Uuid, serde_json::Value)>>;
46 async fn reset(&self) -> Result<()>;
47}