pub struct TurnDriver { /* private fields */ }Expand description
A pumpable, non-blocking driver for one agentic turn at a time.
Owns the running transcript and at most one in-flight turn. The external
event loop submits input (or
submit_observations shell activity),
polls for completion every frame, and may
cancel the in-flight turn.
Implementations§
Source§impl TurnDriver
impl TurnDriver
Sourcepub fn new(config: TurnDriverConfig) -> Self
pub fn new(config: TurnDriverConfig) -> Self
Build a driver with an empty transcript.
Sourcepub fn with_transcript(
config: TurnDriverConfig,
transcript: Vec<MemMessage>,
) -> Self
pub fn with_transcript( config: TurnDriverConfig, transcript: Vec<MemMessage>, ) -> Self
Build a driver seeded with an existing transcript (e.g. a system prompt plus prior turns the consumer already assembled).
Sourcepub fn transcript(&self) -> &[MemMessage]
pub fn transcript(&self) -> &[MemMessage]
The current transcript — every message the model has seen plus the
replies it produced. Feed it to
transcript_lines for renderer-agnostic,
width-wrapped rows, or render it however the consumer likes.
Sourcepub fn is_running(&self) -> bool
pub fn is_running(&self) -> bool
Whether a turn is currently in flight.
Sourcepub fn submit_observation(&mut self, obs: ShellObservation)
pub fn submit_observation(&mut self, obs: ShellObservation)
Append a ShellObservation to the transcript so it becomes part of the
next turn’s context. The observation is redacted and framed by
ShellObservation::into_mem_message — credentials in shell output are
scrubbed before they enter the transcript. This does not start a
turn on its own; a real human message (submit) drives
the loop, with the accumulated observations already in context.
Sourcepub fn submit(
&mut self,
input: impl Into<String>,
) -> Result<(), TurnDriverError>
pub fn submit( &mut self, input: impl Into<String>, ) -> Result<(), TurnDriverError>
Submit a human message and start a turn.
Appends the message as a User turn, snapshots the transcript, and
spawns a task that runs one chat_complete against the configured
backend. Returns an error (without starting anything) if a turn is
already in flight — the driver runs one turn at a time. Poll
poll for the result.
Sourcepub fn poll(&mut self) -> TurnStatus
pub fn poll(&mut self) -> TurnStatus
Non-blocking poll for the in-flight turn’s status.
TurnStatus::Idle— nothing in flight.TurnStatus::Running— in flight, not done.TurnStatus::Completed— done; the reply has been appended to the transcript as an assistant message. Returned exactly once.TurnStatus::Failed— errored; nothing appended. Returned once.
Sourcepub fn cancel(&mut self)
pub fn cancel(&mut self)
Cancel the in-flight turn, if any. Signals the worker thread to abandon
the turn (winning the select! race against chat_complete) and joins
it so the runtime tears down before returning. The user message that
started the turn stays in the transcript — the consumer can pop it for a
clean retry. No-op when idle.
A turn already blocked deep inside a single HTTP dispatch returns when
that dispatch resolves (or times out); the cancel signal is honored at
the next select! poll point, which in practice is between dispatches.
Auto Trait Implementations§
impl !RefUnwindSafe for TurnDriver
impl !UnwindSafe for TurnDriver
impl Freeze for TurnDriver
impl Send for TurnDriver
impl Sync for TurnDriver
impl Unpin for TurnDriver
impl UnsafeUnpin for TurnDriver
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<T> ErasedDestructor for Twhere
T: 'static,
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