Skip to main content

mem7_vector/
lib.rs

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/// A vector search result entry.
16#[derive(Debug, Clone)]
17pub struct VectorSearchResult {
18    pub id: Uuid,
19    pub score: f32,
20    pub payload: serde_json::Value,
21}
22
23/// Trait for vector index implementations.
24#[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}