Skip to main content

offline_intelligence/
memory.rs

1// Server/src/memory.rs
2
3use serde::{Deserialize, Serialize};
4use dashmap::DashMap;
5use std::sync::Arc;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Message {
9    pub role: String,
10    pub content: String,
11}
12
13pub trait MemoryStore: Send + Sync {
14    fn get_history(&self, session_id: &str) -> Vec<Message>;
15    fn add_message(&self, session_id: &str, message: Message);
16    fn clear_history(&self, session_id: &str);
17}
18
19#[derive(Clone)]
20pub struct InMemoryMemoryStore {
21    store: Arc<DashMap<String, Vec<Message>>>,
22}
23
24impl InMemoryMemoryStore {
25    pub fn new() -> Self {
26        Self::default()
27    }
28}
29
30impl Default for InMemoryMemoryStore {
31    fn default() -> Self {
32        Self {
33            store: Arc::new(DashMap::new()),
34        }
35    }
36}
37
38impl MemoryStore for InMemoryMemoryStore {
39    fn get_history(&self, session_id: &str) -> Vec<Message> {
40        match self.store.get(session_id) {
41            Some(history) => history.clone(),
42            None => Vec::new(),
43        }
44    }
45
46    fn add_message(&self, session_id: &str, message: Message) {
47        let mut entry = self.store.entry(session_id.to_string()).or_default();
48        entry.push(message);
49    }
50
51    fn clear_history(&self, session_id: &str) {
52        self.store.remove(session_id);
53    }
54}