synaptic_memory/
window.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use synaptic_core::{MemoryStore, Message, SynapticError};
5
6pub struct ConversationWindowMemory {
11 store: Arc<dyn MemoryStore>,
12 window_size: usize,
13}
14
15impl ConversationWindowMemory {
16 pub fn new(store: Arc<dyn MemoryStore>, window_size: usize) -> Self {
20 Self { store, window_size }
21 }
22}
23
24#[async_trait]
25impl MemoryStore for ConversationWindowMemory {
26 async fn append(&self, session_id: &str, message: Message) -> Result<(), SynapticError> {
27 self.store.append(session_id, message).await
28 }
29
30 async fn load(&self, session_id: &str) -> Result<Vec<Message>, SynapticError> {
31 let messages = self.store.load(session_id).await?;
32 if messages.len() <= self.window_size {
33 Ok(messages)
34 } else {
35 let start = messages.len() - self.window_size;
36 Ok(messages[start..].to_vec())
37 }
38 }
39
40 async fn clear(&self, session_id: &str) -> Result<(), SynapticError> {
41 self.store.clear(session_id).await
42 }
43}