use crate::types::TaskContext;
use tracing::{debug, info, instrument};
use super::super::SelfLearningMemory;
impl SelfLearningMemory {
#[instrument(skip(self))]
pub async fn retrieve_relevant_heuristics(
&self,
context: &TaskContext,
limit: usize,
) -> Vec<crate::pattern::Heuristic> {
let heuristics = self.heuristics_fallback.read().await;
debug!(
total_heuristics = heuristics.len(),
limit = limit,
"Retrieving relevant heuristics"
);
let mut scored_heuristics: Vec<_> = heuristics
.values()
.map(|h| {
let relevance = self.calculate_heuristic_relevance(h, context);
let weighted_score = h.confidence * relevance;
(h.clone(), weighted_score)
})
.filter(|(_, score)| *score > 0.0) .collect();
scored_heuristics
.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal));
let result: Vec<_> = scored_heuristics
.into_iter()
.take(limit)
.map(|(h, _)| h)
.collect();
info!(
retrieved_count = result.len(),
"Retrieved relevant heuristics"
);
result
}
}