nexus_memory_core/
traits.rs1use crate::{
4 AgentNamespace, Memory, NamespaceStats, SearchQuery, SearchResult, StoreMemoryRequest,
5};
6use async_trait::async_trait;
7
8#[async_trait]
10pub trait MemoryStorage: Send + Sync {
11 async fn store(&self, request: StoreMemoryRequest) -> crate::Result<Memory>;
13
14 async fn search(&self, query: SearchQuery) -> crate::Result<SearchResult>;
16
17 async fn get_by_id(&self, id: i64) -> crate::Result<Option<Memory>>;
19
20 async fn delete(&self, id: i64) -> crate::Result<bool>;
22
23 async fn update(&self, memory: Memory) -> crate::Result<Memory>;
25}
26
27#[async_trait]
29pub trait NamespaceManager: Send + Sync {
30 async fn get_or_create(&self, name: &str, agent_type: &str) -> crate::Result<AgentNamespace>;
32
33 async fn get_by_name(&self, name: &str) -> crate::Result<Option<AgentNamespace>>;
35
36 async fn list_all(&self) -> crate::Result<Vec<AgentNamespace>>;
38
39 async fn stats(&self, name: &str) -> crate::Result<NamespaceStats>;
41}
42
43#[async_trait]
45pub trait EmbeddingService: Send + Sync {
46 async fn embed(&self, text: &str) -> crate::Result<Vec<f32>>;
48
49 async fn embed_batch(&self, texts: &[String]) -> crate::Result<Vec<Vec<f32>>>;
51
52 fn dimension(&self) -> usize;
54
55 fn model_name(&self) -> &str;
57}
58
59#[async_trait]
61pub trait VectorSearch: Send + Sync {
62 async fn find_similar(
64 &self,
65 embedding: &[f32],
66 namespace_id: i64,
67 limit: usize,
68 threshold: f32,
69 ) -> crate::Result<Vec<(i64, f32)>>;
70
71 async fn store_vector(&self, memory_id: i64, embedding: &[f32]) -> crate::Result<()>;
73
74 async fn delete_vector(&self, memory_id: i64) -> crate::Result<()>;
76}