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: UsageSum 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
impl Clone for TurnResult
Source§fn clone(&self) -> TurnResult
fn clone(&self) -> TurnResult
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TurnResult
impl Debug for TurnResult
Source§impl Default for TurnResult
impl Default for TurnResult
Source§fn default() -> TurnResult
fn default() -> TurnResult
Auto Trait Implementations§
impl Freeze for TurnResult
impl RefUnwindSafe for TurnResult
impl Send for TurnResult
impl Sync for TurnResult
impl Unpin for TurnResult
impl UnsafeUnpin for TurnResult
impl UnwindSafe for TurnResult
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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