Skip to main content

ResumePrePass

Struct ResumePrePass 

Source
pub struct ResumePrePass<'a> {
    pub tool_specs: &'a [ToolSpec],
}
Expand description

The approval resume pre-pass: resolve the tool calls a human already decided.

Before the turn drives the model, execute the calls the human approved that are dangling in the resumed transcript, resolve signed or denied calls to synthetic results, splice those results in after the paused batch, and append any approver-injected context notes.

On an approval resume the control plane replays the paused turn’s assistant tool_use (which has NO paired tool_result — the call was paused, never executed) and forwards the signed decisions via RunTurnOptions::approval_decisions. The function-calling loop only executes tool calls the model emits this turn, so without this step an approval takes effect only if the model happens to RE-EMIT the same call. Resolving the dangling calls deterministically here makes an approval ALWAYS take effect, independent of whether the model re-emits.

Classification and the #141 approval binding mirror the in-loop batch so the two can’t drift. It runs only on a resume: a fresh turn carries an empty decision set, so this step is a no-op and the hot path is unchanged.

A forwarded signed decision must never resolve silently to nothing: whenever approval_decisions is non-empty, Self::run logs a resolution summary and tracing::warn!s individually for every approved tuple that matches no unanswered call in the resumed transcript — distinguishing an already- answered (harmless) re-forward from a call that is missing outright (a projection loss upstream, e.g. one folded into a compaction summary). This is purely observational: an approval that resolves to nothing still resolves to nothing (re-pausing here would loop), but the loss is now loud instead of surfacing only as an unexplained model refusal downstream.

Borrows the turn’s read-only resume inputs — the pinned tool-spec set (for pause-card titles), the approver edits, and the signed denials — while the mutable working state (transcript, outputs, the sticky denial set, and the remaining approvals) rides the TurnCtx.

Fields§

§tool_specs: &'a [ToolSpec]

The turn’s pinned tool-spec set, read once for pause-card titles.

Trait Implementations§

Source§

impl<P, T> TurnStep<P, T> for ResumePrePass<'_>
where P: LlmProvider + ?Sized, T: ToolExecutor + ?Sized,

Source§

fn run<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, ctx: &'life1 mut TurnCtx<'life2, P, T>, ) -> Pin<Box<dyn Future<Output = Result<StepOutcome, P::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Run this step against the turn context. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for ResumePrePass<'a>

§

impl<'a> RefUnwindSafe for ResumePrePass<'a>

§

impl<'a> Send for ResumePrePass<'a>

§

impl<'a> Sync for ResumePrePass<'a>

§

impl<'a> Unpin for ResumePrePass<'a>

§

impl<'a> UnsafeUnpin for ResumePrePass<'a>

§

impl<'a> UnwindSafe for ResumePrePass<'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> 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, 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<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> 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> 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