Skip to main content

bench/
bench.rs

1use reflex_rs::{GuardrailSuite, Reflex, SemanticVectorEncoder};
2use std::env;
3use std::time::Instant;
4
5fn main() {
6    let args: Vec<String> = env::args().collect();
7    let iters: usize = args.get(1).and_then(|s| s.parse().ok()).unwrap_or(5000);
8    let sample = "Urgent: Suspicious activity on your account. Click here to cancel wire #8129!";
9
10    let rx = Reflex::new();
11    let encoder = SemanticVectorEncoder::new();
12    let suite = GuardrailSuite::new();
13
14    // 1. Encode
15    let t0 = Instant::now();
16    for _ in 0..iters {
17        let _ = encoder.encode(sample);
18    }
19    let t_enc = t0.elapsed().as_secs_f64();
20
21    // 2. Noul
22    let t0 = Instant::now();
23    for _ in 0..iters {
24        let _ = rx.noul("Is this a security threat or phishing scam?", sample);
25    }
26    let t_noul = t0.elapsed().as_secs_f64();
27
28    // 3. Guardrail
29    let t0 = Instant::now();
30    for _ in 0..iters {
31        let _ = suite.evaluate(sample);
32    }
33    let t_guard = t0.elapsed().as_secs_f64();
34
35    let encode_us = (t_enc / iters as f64) * 1_000_000.0;
36    let noul_us = (t_noul / iters as f64) * 1_000_000.0;
37    let guard_us = (t_guard / iters as f64) * 1_000_000.0;
38    let throughput_ops = iters as f64 / t_noul;
39
40    println!(
41        r#"{{"encode_us": {:.2}, "noul_us": {:.2}, "guard_us": {:.2}, "throughput_ops": {:.2}}}"#,
42        encode_us, noul_us, guard_us, throughput_ops
43    );
44}