All nodes/AI/LLM
Message
Builds a canonical message (role + text + attachments) from the text and files inputs. Use it when you need to pass a message with files to an LLM node, sub-workflow, or memory.
Type in the graph: message
Exec
An error branch can be enabled (expose_error_output) to handle failures on their own path.
Ports can be split into separate execution and data handles.
Try it
Minimal working workflow
- Execute + Data
Runs as pasted
When to use it
This node exists for the two things a plain string cannot carry: attachments and a role. If the
model only needs text, you do not need a separate node — the Message port of the LLM nodes accepts
a plain string and treats it as a user turn, and the text itself is easiest to build with a
Template. Reach for message when the text has to come with a file —
an image, audio, a document — or when the turn should come from the system or from the assistant.
To assemble several turns into a conversation, use Messages.
How it works
The node fires when execution arrives at the Text input. The Files port is pure data: it does not trigger the node, it only reads a value that is already there, so the branch that produces the file has to finish earlier along the execution path.
The “Text” field is a fallback, not the main source: it is used only when the Text port delivered nothing — either it is not connected, or it delivered an empty string. A connected non-empty text always wins over the field.
The output carries the whole message: text, role and attachments. In templates
{{ nodes.<id>.output }} shows the text only — the attachments travel along the edge and reach the
node that edge points to.
Files takes file references: the output of File Read, a list from file_glob, images from Generate Image, a file from telegram_get_file. The message from Entry works here too — its own attachments are taken from it.
Common mistakes
- Two edges into Files. The port takes a single edge; a second one makes the input ambiguous and the graph fails validation. Pass several files as one list — for example the output of file_glob or of image generation.
- Sending a string into Files. The port expects a file reference; a path or a name as text silently produces no attachments at all, and the message leaves without files.
- Role system or assistant instead of a question. LLM nodes take the last turn with role user as the prompt. A single message with another role travels as context, and the model is left without a question.
- The model does not see the attached file. An attachment reaches the request only if the model accepts that type: images when it supports images, audio when it supports audio, text files are inlined into the prompt as text. Anything else — PDFs, archives, office documents — is left out of the request, without an error.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Texttext | Execute + Dataexecute_data | string | Message text |
Filesfiles | Datadata | file | File attachments |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Messagemessage | Execute + Dataexecute_data | message |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Rolerole | string | user | Author role of the composed message Options: |
Texttext_template | string | "" | Optional text template; used when the Text port delivers nothing (not connected, or an empty string). supports templates |
Shared fields
Every node has these three — the platform adds them, not the node author.
expose_error_output— When enabled, show an execution output to connect nodes that run if this step fails.split_ports_in— Show separate execution and data input handles instead of one combined port.split_ports_out— Show separate execution and data output handles instead of one combined port.