enact_core/graph/
schema.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct GraphDefinition {
6 pub name: String,
7 #[serde(default = "default_version")]
8 pub version: String,
9 pub description: Option<String>,
10 #[serde(default)]
11 pub model: Option<String>, #[serde(default)]
13 pub triggers: Vec<String>, #[serde(default)]
15 pub inputs: HashMap<String, String>, pub nodes: HashMap<String, NodeDefinition>,
17}
18
19fn default_version() -> String {
20 "1.0".to_string()
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(tag = "type", rename_all = "snake_case")]
25pub enum NodeDefinition {
26 Llm {
28 #[serde(default)]
29 model: Option<String>, system_prompt: String,
31 #[serde(default)]
32 tools: Vec<String>, #[serde(default)]
34 edges: HashMap<String, String>, },
36 Function {
38 action: String, #[serde(default)]
40 edges: HashMap<String, String>,
41 },
42 Condition {
44 expr: String, edges: HashMap<String, String>, },
47 Graph {
49 graph_name: String,
50 #[serde(default)]
51 edges: HashMap<String, String>,
52 },
53}
54
55impl NodeDefinition {
56 pub fn edges(&self) -> &HashMap<String, String> {
57 match self {
58 NodeDefinition::Llm { edges, .. } => edges,
59 NodeDefinition::Function { edges, .. } => edges,
60 NodeDefinition::Condition { edges, .. } => edges,
61 NodeDefinition::Graph { edges, .. } => edges,
62 }
63 }
64}