(
&self,
effective_prompt: &str,
context_results: &mut Vec<ContextResult>,
event_tx: &Option<mpsc::Sender<AgentEvent>>,
)
| 148 | } |
| 149 | |
| 150 | async fn recall_memory_context( |
| 151 | &self, |
| 152 | effective_prompt: &str, |
| 153 | context_results: &mut Vec<ContextResult>, |
| 154 | event_tx: &Option<mpsc::Sender<AgentEvent>>, |
| 155 | ) { |
| 156 | let Some(ref memory) = self.config.memory else { |
| 157 | return; |
| 158 | }; |
| 159 | |
| 160 | match memory.recall_similar(effective_prompt, 5).await { |
| 161 | Ok(items) if !items.is_empty() => { |
| 162 | if let Some(tx) = event_tx { |
| 163 | for item in &items { |
| 164 | tx.send(AgentEvent::MemoryRecalled { |
| 165 | memory_id: item.id.clone(), |
| 166 | content: item.content.clone(), |
| 167 | relevance: item.relevance_score(), |
| 168 | }) |
| 169 | .await |
| 170 | .ok(); |
| 171 | } |
| 172 | tx.send(AgentEvent::MemoriesSearched { |
| 173 | query: Some(effective_prompt.to_string()), |
| 174 | tags: Vec::new(), |
| 175 | result_count: items.len(), |
| 176 | }) |
| 177 | .await |
| 178 | .ok(); |
| 179 | } |
| 180 | context_results.push(crate::memory::memory_items_to_context_result( |
| 181 | "memory", items, |
| 182 | )); |
| 183 | } |
| 184 | Ok(_) => {} |
| 185 | Err(e) => { |
| 186 | tracing::warn!(error = %e, "Failed to recall memory context"); |
| 187 | } |
| 188 | } |
| 189 | } |
| 190 | |
| 191 | async fn emit_context_resolved( |
| 192 | &self, |
no test coverage detected