pub struct SequentialWorkflow { /* private fields */ }Expand description
Sequential workflow: each agent runs in registration order; the former’s output flows into the latter’s input.
§Example
use echo_core::agent::{Agent, AgentEvent};
use echo_core::error::Result;
use echo_orchestration::workflow::{SequentialWorkflow, Workflow};
use futures::future::BoxFuture;
use futures::stream::{self, BoxStream};
let agent_a = DummyAgent::new("translator");
let agent_b = DummyAgent::new("reviewer");
let mut wf = SequentialWorkflow::builder()
.step(agent_a)
.step(agent_b)
.build();
let output = wf.run("Hello world").await?;
println!("Final result: {}", output.result);
for s in &output.steps {
println!(" {} ({:?}): {}", s.agent_name, s.elapsed, &s.output[..s.output.len().min(80)]);
}Implementations§
Source§impl SequentialWorkflow
impl SequentialWorkflow
pub fn builder() -> SequentialWorkflowBuilder
Trait Implementations§
Source§impl Workflow for SequentialWorkflow
impl Workflow for SequentialWorkflow
Source§fn run<'a>(
&'a mut self,
input: &'a str,
) -> Pin<Box<dyn Future<Output = Result<WorkflowOutput, ReactError>> + Send + 'a>>
fn run<'a>( &'a mut self, input: &'a str, ) -> Pin<Box<dyn Future<Output = Result<WorkflowOutput, ReactError>> + Send + 'a>>
Run the entire workflow with
input as the initial inputSource§fn run_stream<'a>(
&'a mut self,
input: &'a str,
) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<WorkflowEvent, ReactError>> + Send + 'a>>, ReactError>> + Send + 'a>>
fn run_stream<'a>( &'a mut self, input: &'a str, ) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<WorkflowEvent, ReactError>> + Send + 'a>>, ReactError>> + Send + 'a>>
Run the entire workflow with
input as initial input (streaming per-node events). Read moreAuto Trait Implementations§
impl Freeze for SequentialWorkflow
impl !RefUnwindSafe for SequentialWorkflow
impl Send for SequentialWorkflow
impl Sync for SequentialWorkflow
impl Unpin for SequentialWorkflow
impl UnsafeUnpin for SequentialWorkflow
impl !UnwindSafe for SequentialWorkflow
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
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request