Skip to main content

ModelTurnFinished

Struct ModelTurnFinished 

Source
pub struct ModelTurnFinished<'a> {
    pub turn: usize,
    pub content: &'a Vec<AssistantContent>,
    pub usage: Usage,
    pub identity: &'a ResponseIdentity,
    pub finish_reason: Option<&'a FinishReason>,
    pub max_tokens: Option<u64>,
    pub raw: &'a Value,
}
Expand description

Medium-neutral accepted model-turn event.

The turn is canonicalized and parked in the run state, but has not yet been advanced into tool execution or finalization. A hook may therefore reject a tool-free turn with ModelTurnAction::Retry.

Fields§

§turn: usize

One-based model-call index.

§content: &'a Vec<AssistantContent>

Canonical assistant content parked for hook acceptance.

§usage: Usage

Usage reported for the turn.

§identity: &'a ResponseIdentity

This exact attempt’s response identity metadata. Fired for every completed model call on both surfaces — including streamed tool-only and reasoning-only turns, which fire no StreamResponseFinish — so a provider-neutral hook observing this event alone records identity for every accepted call. On a retry, this is the retried attempt’s own identity, never a previous attempt’s.

§finish_reason: Option<&'a FinishReason>

Why the provider stopped generating this attempt, normalized.

FinishReason is the portable vocabulary — Stop, Length, ToolCalls, ContentFilter, and Other(String) carrying a provider’s own spelling verbatim for anything outside it — so a hook can decide whether to accept a turn without naming a provider or touching a raw response type. FinishReason::truncated_output is the predicate for “the provider cut this turn short”, which is the usual retry trigger.

None means the provider reported no reason at all, which is a real outcome for several OpenAI-compatible gateways; it is deliberately not smoothed into Stop, because “finished normally” and “did not say” are different facts to steer on.

The value is the one recorded for this attempt’s completion call, after the StopToolCalls reconciliation that both surfaces apply, so a provider that reports a bare stop on a turn carrying tool calls still reads as ToolCalls here. On a retry this is the retried attempt’s own reason, never a previous attempt’s.

§max_tokens: Option<u64>

The output-token cap this exact attempt was prepared with.

Resolved after the agent’s configured value, the runner/request override, and the merged completion-call RequestPatch — so a stateful completion-call hook that raises the cap for a retry sees its own new value here on the following turn, not the agent’s baseline. None means no cap was sent, so the provider’s own default applied.

Paired with finish_reason this is what makes a portable retry-on-truncation decision possible: a hook can tell a turn cut short at a cap it chose from one cut short at a cap it did not.

§raw: &'a Value

The provider’s own response for this attempt — see CompletionResponse::raw in rig-core for the exact meaning of the payload: the value the model’s inherent raw_completion / raw_stream would have returned, serialized. Every provider seam populates it; Value::Null only when the response was built without a provider behind it (a hand-constructed model, a record persisted before the field). On a retry this is the retried attempt’s own, never a previous attempt’s.

Carried here, and not only on the surface-specific events, for the same reason identity is: this is the medium-neutral event, so a hook observing it alone sees the payload for every accepted call on both surfaces.

Trait Implementations§

Source§

impl<'a> Clone for ModelTurnFinished<'a>

Source§

fn clone(&self) -> ModelTurnFinished<'a>

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<'a> Copy for ModelTurnFinished<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for ModelTurnFinished<'a>

§

impl<'a> RefUnwindSafe for ModelTurnFinished<'a>

§

impl<'a> Send for ModelTurnFinished<'a>

§

impl<'a> Sync for ModelTurnFinished<'a>

§

impl<'a> Unpin for ModelTurnFinished<'a>

§

impl<'a> UnsafeUnpin for ModelTurnFinished<'a>

§

impl<'a> UnwindSafe for ModelTurnFinished<'a>

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<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> CloneableStorage for T
where T: Any + Send + Sync + Clone,

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

Source§

fn vzip(self) -> V

Source§

impl<T> WasmCompatSend for T
where T: Send,

Source§

impl<T> WasmCompatSync for T
where T: Sync,

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
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