use async_trait::async_trait;
use crate::domain::{errors::DomainError, Memory, MemoryType, TagMatchMode};
#[derive(Debug, Default, Clone)]
pub struct MemorySearchFilter {
pub memory_type: Option<MemoryType>,
pub tags: Vec<String>,
pub tags_match_mode: TagMatchMode,
pub min_importance: Option<f32>,
}
#[async_trait]
pub trait MemoryRepository: Send + Sync {
async fn add(
&self,
rei_id: &str,
memory: Memory,
embedding: Vec<f32>,
) -> Result<(), DomainError>;
async fn search(
&self,
rei_id: &str,
query_vector: Vec<f32>,
limit: usize,
) -> Result<Vec<Memory>, DomainError>;
async fn search_with_filter(
&self,
rei_id: &str,
query_vector: Vec<f32>,
limit: usize,
filter: MemorySearchFilter,
) -> Result<Vec<Memory>, DomainError>;
}