pub struct Score(/* private fields */);Expand description
A fixed-point score in the inclusive range 0.0..=1.0, stored as an integer
in 0..=10_000 (steps of 0.0001).
Scores are integers so that every computation is bit-for-bit identical on every platform — decisions are deterministic and exactly testable.
Implementations§
Source§impl Score
impl Score
Sourcepub const fn from_raw(raw: u32) -> Score
pub const fn from_raw(raw: u32) -> Score
Creates a score from a raw fixed-point value, clamped to 0..=SCALE.
Sourcepub const fn raw(self) -> u32
pub const fn raw(self) -> u32
Returns the raw fixed-point value (0..=SCALE).
Examples found in repository?
examples/agent_brain.rs (line 41)
9fn main() {
10 // Signals about the current request, each normalized to 0.0..=1.0.
11 let urgency = Score::from_ratio(80, 100);
12 let confidence = Score::from_ratio(40, 100); // how well we already understand it
13 let llm_available = true; // e.g. circuit breaker closed AND rate limiter has tokens
14
15 let mut brain = Reasoner::new();
16
17 // Answer from a template — strong when we are already confident.
18 brain.add(Action::new("answer_template").consider_labeled(
19 "confidence",
20 Curve::Linear,
21 confidence,
22 ));
23
24 // Escalate to the LLM — strong when urgent, but only if the LLM is available.
25 brain.add(
26 Action::new("call_llm")
27 .gate(llm_available) // constraint-aware: skipped entirely if the LLM is down/limited
28 .consider_labeled("urgency", Curve::Linear, urgency),
29 );
30
31 // An always-available, low-weight fallback so a decision still resolves.
32 brain.add(Action::new("defer").with_base(Score::from_ratio(1, 10)));
33
34 // Abstain if nothing clears the bar — the caller would escalate to a human.
35 let threshold = Score::from_ratio(5, 100);
36 match brain.decide_above(threshold) {
37 Some(decision) => {
38 println!(
39 "chose: {} (utility {}/10000)",
40 decision.id,
41 decision.utility.raw()
42 );
43 if let Some(why) = brain.explain() {
44 for c in why.contributions {
45 println!(
46 " {} : input {} -> {}",
47 c.label,
48 c.input.raw(),
49 c.output.raw()
50 );
51 }
52 }
53 }
54 None => println!("nothing good enough — escalate to a human"),
55 }
56}Sourcepub const fn from_ratio(num: u32, den: u32) -> Score
pub const fn from_ratio(num: u32, den: u32) -> Score
Creates a score from the ratio num / den, clamped to 0.0..=1.0.
A zero denominator yields Score::ZERO.
Examples found in repository?
examples/agent_brain.rs (line 11)
9fn main() {
10 // Signals about the current request, each normalized to 0.0..=1.0.
11 let urgency = Score::from_ratio(80, 100);
12 let confidence = Score::from_ratio(40, 100); // how well we already understand it
13 let llm_available = true; // e.g. circuit breaker closed AND rate limiter has tokens
14
15 let mut brain = Reasoner::new();
16
17 // Answer from a template — strong when we are already confident.
18 brain.add(Action::new("answer_template").consider_labeled(
19 "confidence",
20 Curve::Linear,
21 confidence,
22 ));
23
24 // Escalate to the LLM — strong when urgent, but only if the LLM is available.
25 brain.add(
26 Action::new("call_llm")
27 .gate(llm_available) // constraint-aware: skipped entirely if the LLM is down/limited
28 .consider_labeled("urgency", Curve::Linear, urgency),
29 );
30
31 // An always-available, low-weight fallback so a decision still resolves.
32 brain.add(Action::new("defer").with_base(Score::from_ratio(1, 10)));
33
34 // Abstain if nothing clears the bar — the caller would escalate to a human.
35 let threshold = Score::from_ratio(5, 100);
36 match brain.decide_above(threshold) {
37 Some(decision) => {
38 println!(
39 "chose: {} (utility {}/10000)",
40 decision.id,
41 decision.utility.raw()
42 );
43 if let Some(why) = brain.explain() {
44 for c in why.contributions {
45 println!(
46 " {} : input {} -> {}",
47 c.label,
48 c.input.raw(),
49 c.output.raw()
50 );
51 }
52 }
53 }
54 None => println!("nothing good enough — escalate to a human"),
55 }
56}Sourcepub const fn mul(self, other: Score) -> Score
pub const fn mul(self, other: Score) -> Score
Multiplies two scores in the fixed-point domain (self * other), staying
within 0.0..=1.0. Multiplying by Score::MAX is the identity.
Trait Implementations§
impl Copy for Score
impl Eq for Score
Source§impl Ord for Score
impl Ord for Score
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialOrd for Score
impl PartialOrd for Score
impl StructuralPartialEq for Score
Auto Trait Implementations§
impl Freeze for Score
impl RefUnwindSafe for Score
impl Send for Score
impl Sync for Score
impl Unpin for Score
impl UnsafeUnpin for Score
impl UnwindSafe for Score
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more