Skip to main content

TurnResult

Struct TurnResult 

Source
pub struct TurnResult {
    pub messages: Vec<Message>,
    pub usage: Usage,
    pub stop: Option<StopReason>,
    pub pending_approvals: Vec<PendingApproval>,
    pub handoff: Option<HandoffRequest>,
}
Expand description

Output of one run_turn call.

Carries the wire messages produced (assistant text and tool results), the aggregated usage across every provider call in the loop, and the stop reason from the final step.

When Self::pending_approvals is non-empty the turn is paused: the model asked for one or more sensitive tools, run_turn short- circuited before executing them, and the caller must capture a human-in-the-loop decision (idiomatic Temporal “signal” pattern) before re-driving. The choice to surface this as a result field rather than an out-of-band callback keeps run_turn pure (no side-effect handle), keeps the durability boundary at the caller (the event log already gives us replay), and lets the per-conversation Mutex / Lease release while we wait — matching the durable-workflow pattern.

Fields§

§messages: Vec<Message>

Wire messages — assistant text + tool result messages, in order.

§usage: Usage

Sum of input_tokens / output_tokens across every provider call this turn made (the function-calling loop may iterate multiple times).

§stop: Option<StopReason>

Stop reason of the final provider step.

§pending_approvals: Vec<PendingApproval>

Tool calls awaiting human approval. Empty in the common case; when non-empty, the turn paused before executing any tool in this batch.

§handoff: Option<HandoffRequest>

Populated when the model emitted the reserved __handoff_to tool call. The loop suspends without executing any further tools and the caller (control plane) is expected to create a child conversation, emit a signed polyc_proto::proto::polychrome::handoff::v1::Handoff event into the parent’s eventlog, and resume the parent’s turn once a HandoffReturn lands.

If multiple __handoff_to calls appear in the same tool batch (the model emitted two at once), only the first is honored — fan-out is a V2 concern and the wire shape doesn’t model parallel children today.

Trait Implementations§

Source§

impl Clone for TurnResult

Source§

fn clone(&self) -> TurnResult

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 TurnResult

Source§

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

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

impl Default for TurnResult

Source§

fn default() -> TurnResult

Returns the “default value” for a type. Read more

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> 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