wesichain-graph 0.3.0

Rust-native LLM agents & chains with resumable ReAct workflows
Documentation
use thiserror::Error;

#[derive(Debug, Error)]
pub enum GraphError {
    #[error("checkpoint failed: {0}")]
    Checkpoint(String),
    #[error("node failed: {node}: {source}")]
    NodeFailed {
        node: String,
        #[source]
        source: Box<dyn std::error::Error + Send + Sync>,
    },
    #[error("missing node: {node}")]
    MissingNode { node: String },
    #[error("invalid edge to '{node}'")]
    InvalidEdge { node: String },
    #[error("Max steps exceeded: reached {reached}, limit {max}")]
    MaxStepsExceeded { max: usize, reached: usize },
    #[error("Cycle detected: node '{node}' repeated in recent window")]
    CycleDetected { node: String, recent: Vec<String> },
    #[error("interrupted")]
    Interrupted,
    #[error("tool call failed for '{0}': {1}")]
    ToolCallFailed(String, String),
    #[error("invalid tool call response: {0}")]
    InvalidToolCallResponse(String),
    #[error("duplicate tool name: {0}")]
    DuplicateToolName(String),
    #[error("Global execution timed out after {elapsed:?}")]
    Timeout {
        node: String,
        elapsed: std::time::Duration,
    },
    #[error("Max visits exceeded for node '{node}': limit {max}")]
    MaxVisitsExceeded { node: String, max: u32 },
    #[error("Max loop iterations exceeded: node '{node}' visited {max} times on path {path_id}")]
    MaxLoopIterationsExceeded {
        node: String,
        max: u32,
        path_id: u64,
    },
    #[error("system error: {0}")]
    System(String),
    #[error(transparent)]
    Wesichain(#[from] wesichain_core::WesichainError),
}