pub(crate) mod checkpoint;
pub mod completion;
pub mod graph;
pub(crate) mod model_steps;
pub mod node;
pub mod permission;
pub mod preparation;
pub(crate) mod reply;
pub(crate) mod scope;
pub(crate) mod tool_steps;
pub(crate) mod usage;
pub mod wait;
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::Error;
use crate::components::message::{Message, Messages};
use crate::components::model::token::Usage;
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct State {
pub chat_id: Option<i64>,
#[serde(rename = "type")]
pub r#type: String,
pub status: String,
pub stream: bool,
pub usage: Option<Usage>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub preparation: Option<preparation::State>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub completion: Option<completion::State>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub execution: Option<node::Execution>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub graph: Option<graph::State>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub nodes: BTreeMap<String, node::State>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub history: Vec<graph::History>,
#[serde(default)]
pub messages: Messages,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub steps: Vec<node::Step>,
#[serde(default)]
pub waits: Vec<wait::Wait>,
pub error: Option<Error>,
pub final_message: Option<Message>,
#[serde(default)]
pub metadata: BTreeMap<String, Value>,
}