Skip to main content
Agent Composer YAML defines executable agent workflows as graphs.
Each graph specifies inputs → nodes → outputs and runs via /query/acl.

Minimal Graph

inputs:
  query: str

outputs:
  response: str

nodes:
  generate:
    type: ResponseGenerationStep
    input_mapping:
      query: __inputs__#query

  __outputs__:
    type: output
    input_mapping:
      response: generate#response

Root-level Fields

FieldRequiredNotes
inputsRoot graph accepts only query: str
outputsMust be JSON-serializable
nodesExecution steps
ui_output⚠️Required if multiple outputs

Core Rules (Remember These)

  • Root graph: one input only (query)
  • All node inputs must be wired
  • Outputs must be JSON-serializable
  • Multiple outputs → set exactly one ui_output
  • __outputs__ node is mandatory

Wiring Syntax

node_name#output_key
Special nodes:
  • __inputs__ → graph/subgraph inputs
  • __outputs__ → graph outputs

Node Template

node_name:
  type: StepType
  config: {}
  config_overrides: {}
  input_mapping:
    input: upstream#output
Common fields:
  • type (required)
  • input_mapping
  • config (static)
  • config_overrides (runtime)
  • ui_stream_types

Output Node

__outputs__:
  type: output
  input_mapping:
    result: node#output
  • No config
  • No outputs
  • Maps internal values → API outputs

UI Streaming

ui_stream_types:
  retrievals: true
  generation: true
  • Declared per node
  • Multiple nodes may stream
  • Independent of ui_output

Subgraphs (Reusable Workflows)

Define:
my_subgraph:
  inputs:
    query: str
  outputs:
    docs: List[str]
  nodes: ...
Use:
retriever:
  type: subgraph:my_subgraph
  input_mapping:
    query: __inputs__#query
  • Nestable
  • Reusable
  • Isolated I/O scope

Conditional Execution

conditional:
  type: ConditionalStep
  config:
    variable: score
    branches:
      - condition: ">= 0.8"
        executable: HighQuality
      - condition: "< 0.8"
        executable: LowQuality
  input_mapping:
    score: eval#score
  • Top-down evaluation
  • First match executes
  • Branch __inputs__ != graph inputs

Agentic Research Pattern

Standard flow:
  1. CreateMessageHistoryStep
  2. AgenticResearchStep
  3. GenerateFromResearchStep

Message History

create_message_history:
  type: CreateMessageHistoryStep
  input_mapping:
    query: __inputs__#query

Agentic Research

research:
  type: AgenticResearchStep
  ui_stream_types:
    retrievals: true
  • Multi-turn agent loop
  • Plans and invokes tools
  • Produces structured research

Tools

tools_config:
  - name: search_docs
    step_config:
      type: SearchUnstructuredDataStep
Rules:
  • Use either step_config or graph_config
  • Inputs = basic Python types

Final Generation

generate:
  type: GenerateFromResearchStep
  ui_stream_types:
    generation: true
Consumes message_history and research as inputs

Run a Graph (Python)

graph = ExecutableGraph.from_yaml(yaml_string)
graph.execute_graph({"query": "Hello"})

API Response

  • outputs
  • workflow_trace
  • dynamic_agent_trace (if agentic steps used)

Common Errors

ErrorFix
Missing node inputWire it
No __outputs__Add output node
Multiple outputsSet ui_output
Non-serializable outputConvert to basic types