Skip to main content

langchain_rust/memory/
dummy_memory.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use tokio::sync::Mutex;
5
6use crate::schemas::{
7    memory::{BaseMemory, MemoryError},
8    messages::Message,
9};
10
11pub struct DummyMemory {}
12
13impl DummyMemory {
14    pub fn new() -> Self {
15        Self {}
16    }
17}
18
19impl Default for DummyMemory {
20    fn default() -> Self {
21        Self::new()
22    }
23}
24
25impl Into<Arc<dyn BaseMemory>> for DummyMemory {
26    fn into(self) -> Arc<dyn BaseMemory> {
27        Arc::new(self)
28    }
29}
30
31impl Into<Arc<Mutex<dyn BaseMemory>>> for DummyMemory {
32    fn into(self) -> Arc<Mutex<dyn BaseMemory>> {
33        Arc::new(Mutex::new(self))
34    }
35}
36
37#[async_trait]
38impl BaseMemory for DummyMemory {
39    async fn messages(&self) -> Result<Vec<Message>, MemoryError> {
40        Ok(vec![])
41    }
42
43    async fn add_message(&mut self, _message: Message) -> Result<(), MemoryError> {
44        Ok(())
45    }
46
47    async fn clear(&mut self) -> Result<(), MemoryError> {
48        Ok(())
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[tokio::test]
57    async fn never_stores_messages() {
58        let mut memory = DummyMemory::new();
59        memory.add_user_message(&"ignored").await.unwrap();
60        memory.add_ai_message(&"ignored").await.unwrap();
61        assert!(memory.messages().await.unwrap().is_empty());
62        assert_eq!(memory.to_string().await.unwrap(), "");
63    }
64}