Skip to main content

do_memory_core/extraction/
mod.rs

1//! # Pattern Extractor
2//!
3//! Extracts reusable patterns from completed episodes:
4//! - Tool sequences that worked well
5//! - Decision points with outcomes
6//! - Error recovery strategies
7//! - Context-based patterns
8//!
9//! ## Example
10//!
11//! ```
12//! use do_memory_core::extraction::PatternExtractor;
13//! use do_memory_core::{Episode, TaskContext, TaskType, TaskOutcome, ExecutionStep};
14//!
15//! let context = TaskContext::default();
16//! let mut episode = Episode::new("Test task".to_string(), context, TaskType::Testing);
17//!
18//! // Add some execution steps
19//! for i in 0..3 {
20//!     let step = ExecutionStep::new(i + 1, format!("tool_{}", i), "Action".to_string());
21//!     episode.add_step(step);
22//! }
23//!
24//! episode.complete(TaskOutcome::Success {
25//!     verdict: "Done".to_string(),
26//!     artifacts: vec![],
27//! });
28//!
29//! let extractor = PatternExtractor::new();
30//! let patterns = extractor.extract(&episode);
31//!
32//! // Patterns may be extracted based on episode content
33//! ```
34
35mod extractor;
36mod extractors;
37mod utils;
38
39#[cfg(test)]
40mod tests;
41
42// Re-export main types
43pub use extractor::PatternExtractor;
44pub use utils::{deduplicate_patterns, rank_patterns};
45
46/// Minimum success rate to extract a pattern
47pub const MIN_PATTERN_SUCCESS_RATE: f32 = 0.7;
48
49/// Minimum sequence length for tool sequence patterns
50pub const MIN_SEQUENCE_LENGTH: usize = 2;
51
52/// Maximum sequence length for tool sequence patterns
53pub const MAX_SEQUENCE_LENGTH: usize = 5;