#[non_exhaustive]pub struct Score {
pub instructions: Option<Content>,
pub criteria: Vec<Content>,
}Expand description
Rates the state against ordered, described levels. The answer is a probability-weighted position on that scale, which can fall between two levels.
A level’s number is its position in criteria, from 0, from the low end of the scale to the
high end. A score should have at least two levels; the API accepts up to 10.
use typesafe_jev::Score;
let frustration = Score::new("How frustrated is the customer?", ["Calm", "Frustrated", "Very angry"]);
assert_eq!(frustration.criteria.len(), 3);Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.instructions: Option<Content>What the model should rate.
criteria: Vec<Content>The description of each level, from level 0 up.
Implementations§
Source§impl Score
impl Score
Sourcepub fn new<L: Into<Content>>(
instructions: impl Into<Content>,
levels: impl IntoIterator<Item = L>,
) -> Self
pub fn new<L: Into<Content>>( instructions: impl Into<Content>, levels: impl IntoIterator<Item = L>, ) -> Self
A rating against levels, given from the low end of the scale to the high end.
Examples found in repository?
examples/ask.rs (lines 42-45)
20fn main() -> Result<(), Error> {
21 let client = Client::from_env(Config::default())?;
22
23 let ticket = Ticket {
24 customer_plan: "business",
25 message: "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. \
26 I'm losing sales. Please help ASAP.",
27 };
28 let questions = Questions::new()
29 .with(
30 "department",
31 Choice::new(
32 "Which team should handle the `message`?",
33 [
34 ("billing", "Payment or subscription issues"),
35 ("technical", "Bugs or integration problems"),
36 ("sales", "Pricing or account questions"),
37 ],
38 ),
39 )
40 .with(
41 "frustration",
42 Score::new(
43 "How frustrated the customer appears",
44 ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"],
45 ),
46 )
47 .with("is_urgent", Noul::new("The message conveys urgency or time-sensitivity"));
48
49 let response = match client.ask(&ticket, &questions) {
50 Ok(response) => response,
51 // Too much state for one request: a real caller would split it and ask again.
52 Err(Error::TokenLimit(message)) => {
53 eprintln!("request too large: {message}");
54 return Ok(());
55 }
56 Err(other) => return Err(other),
57 };
58
59 if let Some(department) = response.choice("department") {
60 println!("department: {} (confidence {:.2})", department.choice, department.confidence);
61 for (option, probability) in &department.probabilities {
62 println!(" {option}: {probability:.2}");
63 }
64 }
65 if let Some(frustration) = response.score("frustration") {
66 println!("frustration: {:.2} of {} (confidence {:.2})", frustration.score, frustration.legend.len() - 1, frustration.confidence);
67 }
68 if let Some(urgent) = response.noul("is_urgent") {
69 println!("urgent: p={:.2}", urgent.noul);
70 }
71
72 let usage = client.usage();
73 println!(
74 "{}: {} request(s), {} retries, {} input tokens, ~${:.6}",
75 response.model,
76 usage.requests(),
77 usage.retries(),
78 usage.input_tokens(),
79 usage.cost_usd()
80 );
81 Ok(())
82}Trait Implementations§
Source§impl<'de> Deserialize<'de> for Score
impl<'de> Deserialize<'de> for Score
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
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