Skip to main content

router_demo/
router_demo.rs

1//! CLI demo for phi_router
2//! Run with: cargo run --example router_demo -- --step=0.005 --threshold=0.9 --verbose
3
4
5use hybrid_phi::quantized_memory::phi_quantized_encode;
6use hybrid_phi::phi_fs::PhiMemoryStore;
7use hybrid_phi::phi_router::{phi_route, phi_similarity};
8use std::env;
9
10fn parse_args() -> (f64, f64, bool) {
11    let mut step = 0.01;
12    let mut threshold = 0.8;
13    let mut verbose = false;
14    for arg in env::args().skip(1) {
15        if let Some(v) = arg.strip_prefix("--step=") {
16            step = v.parse().unwrap_or(step);
17        }
18        if let Some(v) = arg.strip_prefix("--threshold=") {
19            threshold = v.parse().unwrap_or(threshold);
20        }
21        if arg == "--verbose" {
22            verbose = true;
23        }
24    }
25    (step, threshold, verbose)
26}
27
28fn main() {
29    let n = 10;
30    let (step, threshold, verbose) = parse_args();
31    let store = PhiMemoryStore::new(".phi_store");
32
33    // Define and encode reference signals
34    let patterns = vec![
35        ("calm", vec![0.1, 0.1, 0.1, 0.1]),
36        ("ramp", vec![0.1, 0.2, 0.3, 0.4]),
37        ("burst", vec![1.0, 2.0, 3.0, 4.0]),
38    ];
39
40    for (name, signal) in &patterns {
41        let encoded: Vec<f64> = signal
42            .iter()
43            .map(|&x| phi_quantized_encode(x, n, step))
44            .collect();
45        store.save(name, &encoded).expect("save failed");
46    }
47
48    // Simulate input (similar to "burst")
49    let input_signal = vec![0.95, 2.05, 3.1, 3.95];
50    let encoded_input: Vec<f64> = input_signal
51        .iter()
52        .map(|&x| phi_quantized_encode(x, n, step))
53        .collect();
54
55    if verbose {
56        println!("\nSimilarity to each pattern:");
57        let names = store.list().expect("failed to list");
58        for name in names {
59            if let Ok(entry) = store.load(&name) {
60                let score = phi_similarity(&encoded_input, &entry);
61                println!("- {}: {:.3}%", name, score * 100.0);
62            }
63        }
64    }
65
66    // Route input
67    match phi_route(&encoded_input, &store, threshold) {
68        Some((name, score)) => {
69            println!("\nInput routed to '{}', similarity = {:.3}%", name, score * 100.0);
70        }
71        None => println!("\nNo matching route found (threshold = {:.2})", threshold),
72    }
73
74    // Optional cleanup
75    let _ = std::fs::remove_dir_all(".phi_store");
76}