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 strEvery 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; seeAssistantOutcome::auth_requiredfor the reason."cancelled"— the caller cancelled mid-turn."goal_pending"— the goal loop’s initial value, before any iteration has produced an outcome.
summary: StringThe final assistant text (or the error message).
turns: u32Turns consumed, including an in-flight turn whose generation failed.
turns_completed: u32Primary 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: usizeHow 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: StringThe 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
impl AssistantOutcome
Sourcepub fn run_receipts(&self) -> &[AssistantToolReceipt]
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§
impl Freeze for AssistantOutcome
impl RefUnwindSafe for AssistantOutcome
impl Send for AssistantOutcome
impl Sync for AssistantOutcome
impl Unpin for AssistantOutcome
impl UnsafeUnpin for AssistantOutcome
impl UnwindSafe for AssistantOutcome
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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