Skip to main content

AssistantOutcome

Struct AssistantOutcome 

Source
pub struct AssistantOutcome {
    pub status: &'static str,
    pub summary: String,
    pub turns: u32,
    pub turns_completed: u32,
    pub tools_called: Vec<String>,
    pub tool_receipts: Vec<AssistantToolReceipt>,
    pub prior_receipts: usize,
    pub models_served: Vec<AssistantModelAttribution>,
    pub model_used: String,
    pub auth_required: Option<AuthRequiredReason>,
    pub failure_cause: Option<AssistantFailureCause>,
}

Fields§

§status: &'static str

Every value this field can hold:

  • "success" — the model finished with an answer.
  • "max_turns" — the turn budget ran out.
  • "stalled" — the no-progress guard broke a loop that was repeating itself.
  • "error" — the run failed (inference/transport/durability).
  • "auth_required" — the turn was refused because of the Parslee account; see AssistantOutcome::auth_required for the reason.
  • "cancelled" — the caller cancelled mid-turn.
  • "goal_pending" — the goal loop’s initial value, before any iteration has produced an outcome.
§summary: String

The final assistant text (or the error message).

§turns: u32

Turns consumed, including an in-flight turn whose generation failed.

§turns_completed: u32

Primary model turns that returned successfully before the run ended. Unlike Self::turns, this never counts the failed in-flight attempt.

§tools_called: Vec<String>

Names of tools that executed successfully.

§tool_receipts: Vec<AssistantToolReceipt>

Tool executions attempted during this loop run, used to ground final prose claims such as “I ran the tests” against actual receipts.

The leading Self::prior_receipts entries were replayed from the persisted thread rather than executed here — see that field.

§prior_receipts: usize

How many leading Self::tool_receipts entries came from earlier turns of the same thread rather than from this invocation.

Grounding wants the whole vec: a continuity turn may legitimately cite a previous turn’s evidence. A host receipt wants the opposite — it reports what the person just watched happen — so every wire projection slices with Self::run_receipts. Without the split, turn 12 of a long session published turns 1-4’s rows (tool_receipts_for_wire keeps the FIRST 100) and accumulated desktop actions over the whole session.

§models_served: Vec<AssistantModelAttribution>

Ordered attribution for every completed model call in this run. This is retained separately from the compactable transcript so the terminal run receipt remains complete even after older messages age out.

§model_used: String

The model id that produced the final turn (authoritative attribution; empty if no generate completed). Threaded out so the goal loop can stamp model_id/model_tier onto GoalEvaluated, mirroring the provenance record_turn_completed already stamps on the default path.

§auth_required: Option<AuthRequiredReason>

Some(reason) exactly when status == "auth_required". Carried as data so the chat service and the --json renderer can build their terminal frames without re-deriving the reason from the summary prose.

§failure_cause: Option<AssistantFailureCause>

Typed terminal failure, preserved separately from Self::summary. None for successful/refused/cancelled outcomes and for older non-inference failure sites that have not acquired a typed cause.

Implementations§

Source§

impl AssistantOutcome

Source

pub fn run_receipts(&self) -> &[AssistantToolReceipt]

The receipts this invocation actually produced, with the replayed transcript seed removed. This is what a host receipt reports on.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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