pub struct ConcurrentWorkflow { /* private fields */ }Expand description
Concurrent workflow: all registered agents execute in parallel; results are merged via a merge function.
§Example
use echo_core::agent::{Agent, AgentEvent};
use echo_core::error::Result;
use echo_orchestration::workflow::{ConcurrentWorkflow, Workflow};
use futures::future::BoxFuture;
use futures::stream::{self, BoxStream};
let agent_x = DummyAgent::new("tech");
let agent_y = DummyAgent::new("business");
let mut wf = ConcurrentWorkflow::builder()
.agent(agent_x)
.agent(agent_y)
.merge(|results| {
format!("Combined analysis:\n{}", results.join("\n\n"))
})
.build();
let output = wf.run("Analyze AI Agent development trends").await?;
println!("{}", output.result);Implementations§
Source§impl ConcurrentWorkflow
impl ConcurrentWorkflow
pub fn builder() -> ConcurrentWorkflowBuilder
Trait Implementations§
Source§impl Workflow for ConcurrentWorkflow
impl Workflow for ConcurrentWorkflow
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 ConcurrentWorkflow
impl !RefUnwindSafe for ConcurrentWorkflow
impl Send for ConcurrentWorkflow
impl Sync for ConcurrentWorkflow
impl Unpin for ConcurrentWorkflow
impl UnsafeUnpin for ConcurrentWorkflow
impl !UnwindSafe for ConcurrentWorkflow
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