use do_memory_core::{
ComplexityLevel, ExecutionStep, SelfLearningMemory, TaskContext, TaskOutcome, TaskType,
};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let memory = SelfLearningMemory::new();
println!("🧠 Pattern Search & Recommendation Demo");
println!("========================================\n");
println!("📝 Creating sample episodes...\n");
let context1 = TaskContext {
domain: "web-api".to_string(),
language: Some("rust".to_string()),
framework: Some("axum".to_string()),
complexity: ComplexityLevel::Moderate,
tags: vec!["rest".to_string(), "async".to_string()],
};
let ep1 = memory
.start_episode(
"Build REST API with authentication".to_string(),
context1.clone(),
TaskType::CodeGeneration,
)
.await;
memory
.log_step(
ep1,
ExecutionStep::new(1, "create_router".to_string(), "Setup routes".to_string()),
)
.await;
memory
.complete_episode(
ep1,
TaskOutcome::Success {
verdict: "API created with JWT auth".to_string(),
artifacts: vec!["api.rs".to_string()],
},
)
.await?;
let context2 = TaskContext {
domain: "cli".to_string(),
language: Some("rust".to_string()),
framework: Some("clap".to_string()),
complexity: ComplexityLevel::Simple,
tags: vec!["argparse".to_string()],
};
let ep2 = memory
.start_episode(
"Build CLI tool".to_string(),
context2.clone(),
TaskType::CodeGeneration,
)
.await;
memory
.log_step(
ep2,
ExecutionStep::new(1, "parse_args".to_string(), "Parse CLI args".to_string()),
)
.await;
memory
.complete_episode(
ep2,
TaskOutcome::Success {
verdict: "CLI tool working".to_string(),
artifacts: vec!["main.rs".to_string()],
},
)
.await?;
println!("✅ Created 2 sample episodes\n");
println!("🔍 Demo 1: Semantic Pattern Search");
println!("-----------------------------------");
println!("Query: 'How to build a REST API with authentication'\n");
let search_context = TaskContext {
domain: "web-api".to_string(),
language: Some("rust".to_string()),
framework: None,
complexity: ComplexityLevel::Moderate,
tags: vec!["rest".to_string()],
};
let results = memory
.search_patterns_semantic(
"How to build a REST API with authentication",
search_context,
5,
)
.await?;
println!("Found {} patterns:", results.len());
for (i, result) in results.iter().enumerate() {
println!(
" {}. Relevance: {:.2} | Success Rate: {:.1}%",
i + 1,
result.relevance_score,
result.pattern.success_rate() * 100.0
);
println!(" Pattern ID: {}", result.pattern.id());
if let Some(ctx) = result.pattern.context() {
println!(" Domain: {}", ctx.domain);
}
}
println!();
println!("💡 Demo 2: Pattern Recommendations");
println!("-----------------------------------");
println!("Task: 'Build an async HTTP client with connection pooling'\n");
let rec_context = TaskContext {
domain: "web-api".to_string(),
language: Some("rust".to_string()),
framework: None,
complexity: ComplexityLevel::Complex,
tags: vec!["async".to_string(), "http".to_string()],
};
let recommendations = memory
.recommend_patterns_for_task(
"Build an async HTTP client with connection pooling",
rec_context,
3,
)
.await?;
println!("Got {} recommendations:", recommendations.len());
for (i, rec) in recommendations.iter().enumerate() {
println!(
" {}. Relevance: {:.2} | Effectiveness: {:.2}",
i + 1,
rec.relevance_score,
rec.score_breakdown.effectiveness
);
println!(" Pattern ID: {}", rec.pattern.id());
}
println!();
println!("🌐 Demo 3: Cross-Domain Pattern Discovery");
println!("------------------------------------------");
println!("Finding CLI patterns applicable to web-api\n");
let target_context = TaskContext {
domain: "web-api".to_string(),
language: Some("rust".to_string()),
framework: None,
complexity: ComplexityLevel::Moderate,
tags: vec![],
};
let analogous = memory
.discover_analogous_patterns("cli", target_context, 5)
.await?;
println!("Found {} analogous patterns:", analogous.len());
for (i, pattern) in analogous.iter().enumerate() {
println!(" {}. Relevance: {:.2}", i + 1, pattern.relevance_score);
if let Some(ctx) = pattern.pattern.context() {
println!(" Original Domain: {}", ctx.domain);
}
}
println!();
println!("✨ Demo complete!");
println!("\nKey Features:");
println!(" • Multi-signal ranking (semantic + context + effectiveness + recency + success)");
println!(" • Configurable search parameters");
println!(" • Cross-domain pattern discovery");
println!(" • High-quality recommendations for tasks");
Ok(())
}