eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.42 kB
JavaScript
var GenerationSteeredError=class extends Error{constructor(){super(`Model generation superseded by steering.`),this.name=`GenerationSteeredError`}},GenerationSteering=class{controller=new AbortController;active=!1;effectsStarted=!1;steeringSignal;signal;outputStarted;constructor(e){this.steeringSignal=e.steeringSignal,this.outputStarted=e.outputStarted===!0,this.signal=e.steeringSignal===void 0&&e.abortSignal!==void 0?e.abortSignal:e.abortSignal===void 0?this.controller.signal:AbortSignal.any([e.abortSignal,this.controller.signal]),this.steeringSignal?.addEventListener(`abort`,this.onSteering)}get interrupted(){return this.controller.signal.aborted}begin(){this.active=!0,this.onSteering(),this.check()}protectToolExecution(){this.check(),this.effectsStarted=!0}beforeEvent(e){this.active&&(this.check(),(e.type===`input.requested`||e.type===`step.failed`||e.type===`turn.completed`)&&(this.effectsStarted=!0),(e.type===`message.appended`&&e.data.messageDelta.length>0||e.type===`message.completed`&&(e.data.message?.length??0)>0||e.type===`result.completed`)&&(this.outputStarted=!0))}check(){if(this.interrupted)throw this.controller.signal.reason}dispose(){this.steeringSignal?.removeEventListener(`abort`,this.onSteering)}onSteering=()=>{this.active&&!this.effectsStarted&&!this.outputStarted&&this.steeringSignal?.aborted&&this.controller.abort(new GenerationSteeredError)}};export{GenerationSteering};