use reliakit_decide::{Action, Curve, Reasoner, Score};
fn main() {
let urgency = Score::from_ratio(80, 100);
let confidence = Score::from_ratio(40, 100); let llm_available = true;
let mut brain = Reasoner::new();
brain.add(Action::new("answer_template").consider_labeled(
"confidence",
Curve::Linear,
confidence,
));
brain.add(
Action::new("call_llm")
.gate(llm_available) .consider_labeled("urgency", Curve::Linear, urgency),
);
brain.add(Action::new("defer").with_base(Score::from_ratio(1, 10)));
let threshold = Score::from_ratio(5, 100);
match brain.decide_above(threshold) {
Some(decision) => {
println!(
"chose: {} (utility {}/10000)",
decision.id,
decision.utility.raw()
);
if let Some(why) = brain.explain() {
for c in why.contributions {
println!(
" {} : input {} -> {}",
c.label,
c.input.raw(),
c.output.raw()
);
}
}
}
None => println!("nothing good enough — escalate to a human"),
}
}