use std::sync::Arc;
use awaken_runtime_contract::contract::event_sink::{EventSink, NullEventSink};
use super::AgentRuntime;
use crate::loop_runner::{AgentLoopError, AgentRunResult};
use crate::resolution::{ReplayableResolvedRun, ResolvedRunPlan};
use crate::run::{RunActivation, ThreadContextSnapshot};
impl AgentRuntime {
pub async fn run_to_completion(
&self,
activation: RunActivation,
) -> Result<AgentRunResult, AgentLoopError> {
self.run(activation, Arc::new(NullEventSink)).await
}
pub async fn run(
&self,
activation: RunActivation,
sink: Arc<dyn EventSink>,
) -> Result<AgentRunResult, AgentLoopError> {
self.run_inner(activation, sink, None, None).await
}
pub async fn run_replayable(
&self,
activation: RunActivation,
plan: ReplayableResolvedRun,
sink: Arc<dyn EventSink>,
) -> Result<AgentRunResult, AgentLoopError> {
self.run_inner(
activation,
sink,
None,
Some(ResolvedRunPlan::Replayable(plan)),
)
.await
}
pub async fn run_live(
&self,
activation: RunActivation,
plan: ResolvedRunPlan,
sink: Arc<dyn EventSink>,
) -> Result<AgentRunResult, AgentLoopError> {
self.run_inner(activation, sink, None, Some(plan)).await
}
#[doc(hidden)]
pub async fn run_with_thread_context(
&self,
activation: RunActivation,
sink: Arc<dyn EventSink>,
thread_ctx: Option<ThreadContextSnapshot>,
) -> Result<AgentRunResult, AgentLoopError> {
self.run_inner(activation, sink, thread_ctx, None).await
}
#[doc(hidden)]
pub async fn run_replayable_with_thread_context(
&self,
activation: RunActivation,
plan: ReplayableResolvedRun,
sink: Arc<dyn EventSink>,
thread_ctx: Option<ThreadContextSnapshot>,
) -> Result<AgentRunResult, AgentLoopError> {
self.run_inner(
activation,
sink,
thread_ctx,
Some(ResolvedRunPlan::Replayable(plan)),
)
.await
}
}