Execution model

Connecties, branching en runtime uitvoering

Deze pagina legt uit hoe de graph wordt opgebouwd en uitgevoerd: connection schema, branch routing, context-overdracht en validatie.

Connecties, branching en runtime uitvoering overzicht screenshot placeholder
Connecties, branching en runtime uitvoering overzicht

Maak hier een screenshot van het hoofdscherm voor Connecties, branching en runtime uitvoering overzicht, met de belangrijkste controls en een representatieve zichtbare state.

Maak hier een screenshot van het hoofdscherm voor Connecties, branching en runtime uitvoering overzicht, met de belangrijkste controls en een representatieve zichtbare state.

1. Connection schema

Veld Type Required Beschrijving
idstringYesUnieke connection ID.
sourceIdstringYesBron node ID.
targetIdstringYesDoel node ID.
branchstringNo*Toegestane waarden: default, if, else. Essentieel bij condition-like nodes.
labelstring|nullNoUI-label; legacy labels YES/NO worden naar branch gemapt.
{
  "id": "edge_cond_if",
  "sourceId": "cond_revenue_down",
  "targetId": "action_medium",
  "branch": "if",
  "label": "YES"
}

2. Branching regels

Condition en LLM condition

  • Node types condition en llmcondition kiezen tijdens runtime een if- of else-branch.
  • Verbind alleen de branches die downstream werk moeten uitvoeren.
  • Als de gekozen branch niet verbonden is, eindigt de flow geldig op deze node.

Legacy mapping

  • YES of IF label wordt gezien als if.
  • NO of ELSE label wordt gezien als else.
  • Andere waarden vallen terug op default.

Branch selectie tijdens runtime

  • condition: evaluatie true = if, false = else.
  • llmcondition: modeloutput wordt naar boolean geparsed, daarna idem.
  • Als operands ontbreken in condition, route valt deterministisch terug op else.
  • Een if- of else-branch mag naar action, sql, elementnode, llmresponse of een andere bewuste vervolgstap gaan. Verifieer bij Element branches altijd dat element.elementId naar het juiste Element wijst.
  • Elke node mag terminal zijn. Een action of sql node kan dus ook midden in de graph staan en daarna via een default-edge doorgaan.
  • llmresponse route is altijd default.

3. Runtime traversing en context

Entry node selectie

  • Eerst alle nodes met 0 inbound edges.
  • Als die er niet zijn: trigger nodes.
  • Daarna: datasource nodes.
  • Geen entry gevonden = runtime error.

Context merge gedrag

  • NodeContext reist mee over alle edges.
  • Bij meerdere inbound paden worden contexten samengevoegd.
  • Filters, metrics, math-values, llm traces en history blijven beschikbaar downstream.
  • Template tokens lezen uit deze merged context.

Safety guards

  • UI voorkomt cycles bij connecteren via wouldCreateCycle().
  • Runtime heeft een traverselimit: max(len(nodes) * 10, 100).
  • Overschrijding geeft error: Automation traversal exceeded safety limit.
  • Test runs geven notificatieresultaten terug voor notificatie-nodes en terminal_node resultaten wanneer traversal eindigt op een niet-notificatie-node.

4. Validatie in AI flow generatie en runtime

Laag Regel Typische fouttekst
Blueprint validatie Meerdere uitgaande condition edges voor dezelfde branch zijn dubbelzinnig. duplicate outgoing branch connections: if
Schema validatie Node moet id hebben. nodes.*.id: Field required
Schema validatie Connection moet sourceId en targetId hebben. connections.*.sourceId: Field required
Runner Node IDs moeten uniek zijn. Duplicate node id ...
Runner Edge moet naar bestaande nodes wijzen. Connection references unknown source/target node

5. Build checklist voor stabiele flows

  1. Gebruik op elke node een expliciete id (geen alleen key).
  2. Gebruik in connecties altijd sourceId en targetId.
  3. Zet bij condition/llmcondition if en/of else edges alleen voor branches die echt door moeten lopen.
  4. Controleer dat nodes zonder uitgaande edge bewust terminal zijn; elke node type mag de laatste uitgevoerde node zijn.
  5. Voer Test uit na iedere branch- of metricwijziging.
  6. Gebruik via MCP validate_autoflow voor de payload en test_autoflow voor runtimegedrag.
{
  "connections": [
    { "id": "edge_1", "sourceId": "metric_current", "targetId": "cond_drop", "branch": "default" },
    { "id": "edge_2", "sourceId": "metric_previous", "targetId": "cond_drop", "branch": "default" },
    { "id": "edge_3", "sourceId": "cond_drop", "targetId": "action_medium", "branch": "if" },
    { "id": "edge_4", "sourceId": "cond_drop", "targetId": "action_ok", "branch": "else" }
  ]
}