offline_intelligence/
memory.rs1use 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}