1use ceylon_next::llm::types::Message;
11use ceylon_next::memory::advanced::{
12 AdvancedMemoryManager, ConsolidationTask, MemoryConfig, TimeRange,
13};
14use ceylon_next::memory::{MemoryEntry, SqliteStore};
15use std::sync::Arc;
16
17#[tokio::main]
18async fn main() -> Result<(), String> {
19 println!("🧠 Ceylon AI Framework - Advanced Memory Management Demo\n");
20
21 println!("1️⃣ Setting up Advanced Memory Manager...");
23 let backend = Arc::new(SqliteStore::new("advanced_memory_demo.db").await?);
24
25 let config = MemoryConfig {
26 working_memory_limit: 5,
27 episodic_memory_limit: 100,
28 auto_summarize: true,
29 min_summary_length: 2,
30 auto_consolidate: false, consolidation_interval: 3600,
32 duplicate_threshold: 0.85,
33 enable_decay: true,
34 decay_rate: 0.05,
35 ..Default::default()
36 };
37
38 let memory = AdvancedMemoryManager::new(backend, config).await?;
39 println!(" ✓ Memory manager initialized\n");
40
41 println!("2️⃣ Storing conversations...");
43
44 let conversations = vec![
45 (
46 "What is Rust?",
47 "Rust is a systems programming language focused on safety, concurrency, and performance.",
48 ),
49 (
50 "Tell me about Alice",
51 "Alice is a software engineer who works at Google on cloud infrastructure projects.",
52 ),
53 (
54 "What projects is Alice working on?",
55 "Alice is currently working on Kubernetes optimization and distributed systems.",
56 ),
57 (
58 "How does Rust ensure memory safety?",
59 "Rust ensures memory safety through its ownership system, borrowing rules, and lifetimes.",
60 ),
61 (
62 "What is the capital of France?",
63 "The capital of France is Paris, a major European city known for art and culture.",
64 ),
65 ];
66
67 for (i, (user_msg, assistant_msg)) in conversations.iter().enumerate() {
68 let messages = vec![
69 Message {
70 role: "user".to_string(),
71 content: user_msg.to_string(),
72 },
73 Message {
74 role: "assistant".to_string(),
75 content: assistant_msg.to_string(),
76 },
77 ];
78
79 let entry = MemoryEntry::new(
80 "demo-agent".to_string(),
81 format!("task-{}", i),
82 messages,
83 );
84
85 let id = memory.store_conversation(entry).await?;
86 println!(" ✓ Stored conversation {} (ID: {})", i + 1, &id[..8]);
87 }
88 println!();
89
90 println!("3️⃣ Querying Working Memory (recent context)...");
92 let working = memory.get_working_memory(None).await;
93 println!(" Working memory contains {} conversations", working.len());
94 for (i, mem) in working.iter().enumerate() {
95 if let Some(summary) = &mem.summary {
96 println!(" {}. {}", i + 1, summary);
97 } else {
98 println!(" {}. {} messages", i + 1, mem.entry.messages.len());
99 }
100 }
101 println!();
102
103 println!("4️⃣ Querying Episodic Memory...");
105 let recent = memory
106 .get_episodic_by_time("demo-agent", TimeRange::LastDays(7))
107 .await?;
108 println!(" Found {} conversations in the last 7 days", recent.len());
109
110 let all = memory
111 .get_episodic_by_time("demo-agent", TimeRange::All)
112 .await?;
113 println!(" Total conversations: {}", all.len());
114 println!();
115
116 println!("5️⃣ Searching memories for 'Alice'...");
118 let search_results = memory.search("demo-agent", "Alice").await?;
119 println!(" Found {} results:", search_results.len());
120 for (i, mem) in search_results.iter().enumerate() {
121 if let Some(summary) = &mem.summary {
122 println!(" {}. {}", i + 1, summary);
123 }
124 }
125 println!();
126
127 println!("6️⃣ Querying Semantic Memory...");
129 let stats = memory.get_semantic_stats().await;
130 println!(" Entities tracked: {}", stats.total_entities);
131 println!(" Facts stored: {}", stats.total_facts);
132 println!(" Relationships: {}", stats.total_relationships);
133
134 if stats.total_facts > 0 {
136 println!("\n Facts about 'Alice':");
137 let alice_facts = memory.get_facts_about("Alice").await;
138 for fact in alice_facts {
139 println!(
140 " - {} {} {} (confidence: {:.2})",
141 fact.subject, fact.predicate, fact.object, fact.confidence
142 );
143 }
144 }
145 println!();
146
147 println!("7️⃣ Generating comprehensive agent context...");
149 let context = memory
150 .create_agent_context("demo-agent", Some(1000), true)
151 .await?;
152 println!(" Context length: {} characters", context.len());
153 println!(" Preview:");
154 let preview: String = context.lines().take(10).collect::<Vec<_>>().join("\n");
155 println!("{}\n", preview);
156
157 println!("8️⃣ Getting most relevant memories...");
159 let relevant = memory
160 .get_relevant_memories("demo-agent", 0.0, 3)
161 .await?;
162 println!(" Top 3 most relevant memories:");
163 for (i, mem) in relevant.iter().enumerate() {
164 println!(
165 " {}. Relevance: {:.2} - {} messages",
166 i + 1,
167 mem.relevance_score(),
168 mem.entry.messages.len()
169 );
170 }
171 println!();
172
173 println!("9️⃣ Running memory consolidation...");
175 let result = memory.consolidate(ConsolidationTask::All).await?;
176 println!(" Consolidation results:");
177 println!(" - Memories processed: {}", result.memories_processed);
178 println!(" - Memories merged: {}", result.memories_merged);
179 println!(" - Memories deleted: {}", result.memories_deleted);
180 println!(" - Duration: {}ms", result.duration_ms);
181 println!();
182
183 println!("🔟 Overall Memory Statistics:");
185 let final_stats = memory.get_statistics().await;
186 println!(" Working memory:");
187 println!(" - Count: {}", final_stats.working_memory_count);
188 println!(" - Tokens: {}", final_stats.working_memory_tokens);
189 println!(" Semantic memory:");
190 println!(" - Entities: {}", final_stats.semantic_entities);
191 println!(" - Facts: {}", final_stats.semantic_facts);
192 println!(" - Relationships: {}", final_stats.semantic_relationships);
193 println!();
194
195 println!("✅ Advanced Memory Management Demo Complete!");
196 println!("\n💡 Key Features Demonstrated:");
197 println!(" • Working memory for recent context");
198 println!(" • Episodic memory for past conversations");
199 println!(" • Semantic memory for facts and knowledge");
200 println!(" • Automatic summarization");
201 println!(" • Time-based and relevance-based retrieval");
202 println!(" • Memory consolidation and optimization");
203 println!(" • Comprehensive context generation");
204
205 Ok(())
206}