Skip to main content

ToolResult

Enum ToolResult 

Source
pub enum ToolResult {
    Done(Box<ToolCallOutput>),
    Pending(PendingCompletion),
}
Expand description

The outcome a ToolProvider::execute returns for a single call.

The variant a tool returns chooses its completion mode:

§The completion-key contract

Before returning ToolResult::Pending, a tool must first obtain a completion key by calling ToolContext::completion_key (reachable through call.context). That key names the durable wait the runtime parks the call on, and is what an external resolver uses to deliver the outcome. Returning Pending without having taken a completion key fails the call with the internal error pending_tool_missing_completion_key.

async fn execute(&self, call: ToolCall<'_>) -> ToolResult {
    // Take the key first, then hand it to whatever completes the work out-of-band.
    let key = match call.context.completion_key().await {
        Ok(key) => key,
        Err(err) => return ToolResult::err_fmt(err),
    };
    enqueue_external_work(key);
    ToolResult::pending(PendingCompletion::new())
}

Variants§

§

Done(Box<ToolCallOutput>)

Active await: the tool finished inline; this is its final output.

§

Pending(PendingCompletion)

Deferred completion: the tool parked on a durable wait keyed by the ToolContext::completion_key it took before returning. The outcome arrives later through the resolve seam and is shaped by the carried PendingCompletion.

Implementations§

Source§

impl ToolResult

Source

pub fn from_output(output: ToolCallOutput) -> Self

Source

pub fn pending(pending: PendingCompletion) -> Self

Source

pub fn ok(result: Value) -> Self

Source

pub fn err(result: Value) -> Self

Source

pub fn err_fmt(msg: impl Display) -> Self

Source

pub fn failure(failure: ToolFailure) -> Self

Source

pub fn retryable_failure( class: ToolFailureClass, code: impl Into<String>, message: impl Into<String>, after_ms: Option<u64>, ) -> Self

Source

pub fn cancelled(message: impl Into<String>) -> Self

Source

pub fn cancelled_with_raw(message: impl Into<String>, raw: Value) -> Self

Source

pub fn with_control(self, control: ToolControl) -> Self

Source

pub fn is_success(&self) -> bool

Source

pub fn is_pending(&self) -> bool

Source

pub fn value_for_projection(&self) -> Value

Source

pub fn as_done_output(&self) -> Option<&ToolCallOutput>

Source

pub fn as_output(&self) -> &ToolCallOutput

Source

pub fn into_done_output(self) -> Result<ToolCallOutput, PendingCompletion>

Trait Implementations§

Source§

impl Clone for ToolResult

Source§

fn clone(&self) -> ToolResult

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ToolResult

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T, E> From<Result<T, E>> for ToolResult
where T: Serialize, E: Display,

Source§

fn from(result: Result<T, E>) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for ToolResult

Source§

fn eq(&self, other: &ToolResult) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ToolResult

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more