pub struct Operator<Q: TypedQuestion> { /* private fields */ }Expand description
A reusable typed question, independent of any inference provider.
This explicitly scripted provider demonstrates typed output without network access or semantic inference.
use semantic_operators::{
AnswerValue, Boolean, FunctionProvider, IndexMap, Operator,
ProviderFuture, Request, State, make_answer,
};
fn scripted(request: &Request) -> ProviderFuture<'_> {
Box::pin(async move {
request.questions().iter().map(|(name, question)| {
let probabilities = IndexMap::from([
("true".into(), 0.1), ("false".into(), 0.9),
]);
Ok((name.clone(), make_answer(
question, AnswerValue::Boolean(false), probabilities, None,
)?))
}).collect()
})
}
let operator = Operator::new("urgent", Boolean::new("Is this urgent?")?)?;
let provider = FunctionProvider::new(scripted);
let answer = futures_executor::block_on(operator.ask(&provider, &State::text("Fixture")))?;
assert_eq!(answer.value(), Some(&false)); // False is a decided answer.Implementations§
Source§impl<Q: TypedQuestion> Operator<Q>
impl<Q: TypedQuestion> Operator<Q>
Sourcepub fn new(name: impl Into<String>, question: Q) -> Result<Self>
pub fn new(name: impl Into<String>, question: Q) -> Result<Self>
Create an operator with a nonempty name.
§Errors
Returns InvalidArgument if the operator name is empty.
Sourcepub fn erased(&self) -> NamedQuestion
pub fn erased(&self) -> NamedQuestion
Erase the type for a heterogeneous batch.
Sourcepub async fn ask<P: Provider + ?Sized>(
&self,
provider: &P,
state: &State,
) -> Result<Answer<Q::Output>>
pub async fn ask<P: Provider + ?Sized>( &self, provider: &P, state: &State, ) -> Result<Answer<Q::Output>>
Ask about a state and retain a typed answer, including uncertainty.
§Errors
Propagates request, provider, response-validation, and typed-conversion errors. An undecided answer is successful and retains its evidence.
Sourcepub async fn ask_request<P: Provider + ?Sized>(
&self,
provider: &P,
request: &Request,
) -> Result<Answer<Q::Output>>
pub async fn ask_request<P: Provider + ?Sized>( &self, provider: &P, request: &Request, ) -> Result<Answer<Q::Output>>
Ask about a request’s state and assets, replacing its questions.
§Errors
Propagates request/image validation, provider, response-validation, and typed-conversion errors. The supplied request’s questions are replaced.
Trait Implementations§
Auto Trait Implementations§
impl<Q> Freeze for Operator<Q>where
Q: Freeze,
impl<Q> RefUnwindSafe for Operator<Q>where
Q: RefUnwindSafe,
impl<Q> Send for Operator<Q>where
Q: Send,
impl<Q> Sync for Operator<Q>where
Q: Sync,
impl<Q> Unpin for Operator<Q>where
Q: Unpin,
impl<Q> UnsafeUnpin for Operator<Q>where
Q: UnsafeUnpin,
impl<Q> UnwindSafe for Operator<Q>where
Q: UnwindSafe,
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