use llmosafe::{
sift_perceptions, EscalationPolicy, PressureLevel, SafetyContext, SafetyDecision, WorkingMemory,
};
struct MockService;
impl MockService {
fn process(&self, request: &str) -> Result<String, llmosafe::KernelError> {
let sifted = sift_perceptions(&[request], "safe response");
let mut memory = WorkingMemory::<64>::new(1000);
let validated = memory.update(sifted)?;
let entropy = validated.raw_entropy();
let surprise = validated.raw_surprise();
let has_bias = validated.has_bias();
let policy = EscalationPolicy::default();
let decision = policy.decide(entropy, surprise, has_bias);
match decision {
SafetyDecision::Proceed => Ok(format!("Processed: {}", request)),
SafetyDecision::Warn(reason) => {
eprintln!("Warning: {}", reason);
Ok(format!("Processed with warning: {}", request))
}
SafetyDecision::Escalate { .. } => Err(llmosafe::KernelError::BiasHaloDetected),
SafetyDecision::Halt(err, _) => Err(err),
SafetyDecision::Exit(err) => Err(err),
}
}
}
fn main() {
println!("=== llmosafe Tower Middleware Example ===\n");
let service = MockService;
match service.process("Hello, world!") {
Ok(response) => println!("✓ Safe request: {}", response),
Err(e) => println!("✗ Error: {}", e),
}
match service.process("The expert provided an official recommendation") {
Ok(response) => println!("✓ Biased request: {}", response),
Err(e) => println!("✗ Biased request rejected: {}", e),
}
println!("\n=== SafetyContext Demo ===\n");
let mut ctx = SafetyContext::new(EscalationPolicy::default());
ctx.observe(300, 50, false);
ctx.observe(400, 80, false);
ctx.observe(500, 120, false);
println!("Observations: {}", ctx.observation_count());
println!("Final decision: {:?}", ctx.finalize());
println!("\n=== Pressure-Aware Decision ===\n");
let policy = EscalationPolicy::default();
let decision = policy.decide_with_pressure(400, 100, false, PressureLevel::Critical);
println!("Decision with critical pressure: {:?}", decision);
}