agenthub · transform.combine
Merge several structured outputs into one. Point several nodes at it and it fans them in.
Why the node earns its place
Its input accepts many edges, and the executor hands it a bag keyed by source node. That is the whole point: three LLM nodes each producing a structured verdict become one object, without an intermediate node per pair.
Two strategies, and the difference matters. merge deep-merges every input into one flat object — right when the inputs describe different fields of one thing. sections nests each under its source key — right when they are separate assessments you need to tell apart.
How it works at run time
template against the result with simple placeholder substitution, otherwise emit formatted JSON.combined the merged object text the rendered template, or the JSON message the same as an assistant message
What you wire
Configuration
| Key | Type | Default & options | What it does |
|---|---|---|---|
| strategy * | string | default "merge" merge · sections | merge: deep-merge all inputs into one JSON object. sections: nest each input under its source key. |
| template | string | — | Optional Jinja-style summary template rendered against the merged data. When set, the output 'text' port carries the rendered string. |
What usually goes wrong
Watch for this
merge lets a later input overwrite an earlier one's field silently — two nodes both emitting summary leave one of them. If the inputs are peers rather than parts, use sections.
The template is plain {{key}} substitution against top-level keys only. It is not Jinja; loops and dotted paths do not work.
Behaviour & provenance