bob_runtime/
memory_context.rs1pub fn inject_memory_prompt(system_instructions: &str, memory_summary: Option<&str>) -> String {
42 let Some(memory) = memory_summary else {
43 return system_instructions.to_string();
44 };
45
46 if memory.trim().is_empty() {
47 return system_instructions.to_string();
48 }
49
50 format!("{}\n\nMemory Context:\n{}", system_instructions, memory.trim())
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn inject_memory_prompt_with_memory() {
59 let base = "You are a helpful assistant.";
60 let memory = "Previous conversation about Rust programming.";
61
62 let result = inject_memory_prompt(base, Some(memory));
63
64 assert!(result.contains(base));
65 assert!(result.contains("Memory Context:"));
66 assert!(result.contains(memory));
67 }
68
69 #[test]
70 fn inject_memory_prompt_without_memory() {
71 let base = "You are a helpful assistant.";
72
73 let result = inject_memory_prompt(base, None);
74
75 assert_eq!(result, base);
76 }
77
78 #[test]
79 fn inject_memory_prompt_with_empty_memory() {
80 let base = "You are a helpful assistant.";
81
82 let result = inject_memory_prompt(base, Some(""));
83
84 assert_eq!(result, base);
85 }
86
87 #[test]
88 fn inject_memory_prompt_with_whitespace_memory() {
89 let base = "You are a helpful assistant.";
90
91 let result = inject_memory_prompt(base, Some(" \n\t "));
92
93 assert_eq!(result, base);
94 }
95
96 #[test]
97 fn inject_memory_prompt_preserves_formatting() {
98 let base = "You are a helpful assistant.\nThink step by step.";
99 let memory = "User prefers detailed explanations.";
100
101 let result = inject_memory_prompt(base, Some(memory));
102
103 assert!(result.starts_with(base));
104 assert!(result.contains("\n\nMemory Context:\n"));
105 assert!(result.ends_with(memory));
106 }
107}