pub struct StateGraphImpl<S>where
S: GraphState,{ /* private fields */ }Expand description
StateGraph implementation - LangGraph-inspired API
§Example
ⓘ
use mofa_foundation::workflow::{StateGraphImpl, AppendReducer, OverwriteReducer};
use mofa_kernel::workflow::{StateGraph, START, END};
let graph = StateGraphImpl::<MyState>::new("my_workflow")
.add_reducer("messages", Box::new(AppendReducer))
.add_node("process", Box::new(ProcessNode))
.add_edge(START, "process")
.add_edge("process", END)
.compile()?;Implementations§
Source§impl<S> StateGraphImpl<S>where
S: GraphState,
impl<S> StateGraphImpl<S>where
S: GraphState,
Sourcepub fn build(id: impl Into<String>) -> StateGraphImpl<S>
pub fn build(id: impl Into<String>) -> StateGraphImpl<S>
Create a new StateGraph builder with the given ID
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Get the number of nodes
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Get the number of edges
Sourcepub fn validate(&self) -> Result<(), AgentError>
pub fn validate(&self) -> Result<(), AgentError>
Validate the graph structure
Trait Implementations§
Source§impl<S> StateGraph for StateGraphImpl<S>where
S: GraphState + 'static,
impl<S> StateGraph for StateGraphImpl<S>where
S: GraphState + 'static,
Source§type Compiled = CompiledGraphImpl<S>
type Compiled = CompiledGraphImpl<S>
The compiled graph type produced by this builder
Source§fn add_node(
&mut self,
id: impl Into<String>,
node: Box<dyn NodeFunc<S>>,
) -> &mut StateGraphImpl<S>
fn add_node( &mut self, id: impl Into<String>, node: Box<dyn NodeFunc<S>>, ) -> &mut StateGraphImpl<S>
Add a node to the graph Read more
Source§fn add_edge(
&mut self,
from: impl Into<String>,
to: impl Into<String>,
) -> &mut StateGraphImpl<S>
fn add_edge( &mut self, from: impl Into<String>, to: impl Into<String>, ) -> &mut StateGraphImpl<S>
Add an edge between two nodes Read more
Source§fn add_conditional_edges(
&mut self,
from: impl Into<String>,
conditions: HashMap<String, String>,
) -> &mut StateGraphImpl<S>
fn add_conditional_edges( &mut self, from: impl Into<String>, conditions: HashMap<String, String>, ) -> &mut StateGraphImpl<S>
Add conditional edges from a node Read more
Source§fn add_parallel_edges(
&mut self,
from: impl Into<String>,
targets: Vec<String>,
) -> &mut StateGraphImpl<S>
fn add_parallel_edges( &mut self, from: impl Into<String>, targets: Vec<String>, ) -> &mut StateGraphImpl<S>
Add parallel edges from a node Read more
Source§fn set_entry_point(&mut self, node: impl Into<String>) -> &mut StateGraphImpl<S>
fn set_entry_point(&mut self, node: impl Into<String>) -> &mut StateGraphImpl<S>
Set the entry point (equivalent to add_edge(START, node))
Source§fn set_finish_point(
&mut self,
node: impl Into<String>,
) -> &mut StateGraphImpl<S>
fn set_finish_point( &mut self, node: impl Into<String>, ) -> &mut StateGraphImpl<S>
Set a finish point (equivalent to add_edge(node, END))
Source§fn add_reducer(
&mut self,
key: impl Into<String>,
reducer: Box<dyn Reducer>,
) -> &mut StateGraphImpl<S>
fn add_reducer( &mut self, key: impl Into<String>, reducer: Box<dyn Reducer>, ) -> &mut StateGraphImpl<S>
Add a reducer for a state key Read more
Source§fn with_config(&mut self, config: GraphConfig) -> &mut StateGraphImpl<S>
fn with_config(&mut self, config: GraphConfig) -> &mut StateGraphImpl<S>
Set the graph configuration
Source§fn compile(self) -> Result<CompiledGraphImpl<S>, AgentError>
fn compile(self) -> Result<CompiledGraphImpl<S>, AgentError>
Compile the graph into an executable form Read more
Auto Trait Implementations§
impl<S> Freeze for StateGraphImpl<S>
impl<S> !RefUnwindSafe for StateGraphImpl<S>
impl<S> Send for StateGraphImpl<S>
impl<S> Sync for StateGraphImpl<S>
impl<S> Unpin for StateGraphImpl<S>
impl<S> UnsafeUnpin for StateGraphImpl<S>
impl<S> !UnwindSafe for StateGraphImpl<S>
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> 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> Message for T
impl<T> Message for T
Source§fn from_boxed(m: BoxedMessage) -> Result<Self, BoxedDowncastErr>
fn from_boxed(m: BoxedMessage) -> Result<Self, BoxedDowncastErr>
Convert a BoxedMessage to this concrete type
Source§fn box_message(self, pid: &ActorId) -> Result<BoxedMessage, BoxedDowncastErr>
fn box_message(self, pid: &ActorId) -> Result<BoxedMessage, BoxedDowncastErr>
Convert this message to a BoxedMessage