pub struct InProcessExecutor { /* private fields */ }Expand description
Executes every operation from TurnEngine immediately in the caller’s
async task.
A prepared tool batch runs concurrently by default: when a model asks
for three file reads at once it means all three, and running them one after
another turns a model’s parallelism into a host’s latency. Results are
still recorded in batch order, so the event sequence is identical either
way — see InProcessExecutor::sequential for when to give that up.
Implementations§
Source§impl InProcessExecutor
impl InProcessExecutor
Sourcepub fn sequential() -> Self
pub fn sequential() -> Self
Run a batch one call at a time.
The one thing this buys is policy inside a batch: budget checks and cancellation are evaluated between calls, so a batch of ten can stop after two. Concurrent dispatch necessarily commits to the whole batch (cancellation still drops all of it at once). Choose this when tools contend for the same resource, or when a budget must bite mid-batch.
Source§impl InProcessExecutor
impl InProcessExecutor
Sourcepub async fn run_turn(
&self,
host: &mut TurnHost<'_>,
input: Message,
) -> Result<TurnResult>
pub async fn run_turn( &self, host: &mut TurnHost<'_>, input: Message, ) -> Result<TurnResult>
Run one turn by immediately executing every prepared engine operation.
Sourcepub async fn resume_turn(
&self,
host: &mut TurnHost<'_>,
state: TurnState,
) -> Result<TurnResult>
pub async fn resume_turn( &self, host: &mut TurnHost<'_>, state: TurnState, ) -> Result<TurnResult>
Continue a replayed, incomplete turn from its current durable head.
External operations are at-least-once: if a process failed after a tool
performed its side effect but before tool.completed was recorded,
recovery invokes that tool again. Hosts that need stronger guarantees
must give tools idempotency keys or deduplicate at the activity boundary.