Skip to main content

This is a node

Also known as a Workflow Object, or WOB for short.

Nodes are connected by Edges

A transmitter can be connected to multiple receivers, but a receiver can only be connected to one transmitter.

Edges move data between nodes

Edges move data from transmitters to receivers. Nodes are ran sequentially depth-first.

Edges care about types

Transmitters and receivers can have different types. Edges can only connect transmitters and receivers of the same type. Each type has a different color.
  • value - individual values, such as strings, numbers, and vectors.
  • data - collections of values, such as tables, datasets, and tensors.
  • state - JSON objects and classes, such as LLM messages and HTTP requests.
  • model - functions/functors that can be called by nodes later

Receivers can have controls

Controls are configurable input and display elements for nodes. They can be added onto receivers using the control argument. If an edge is connected to a receiver with a control, the control will disappear and the value will be taken from the edge instead. Read more about controls.
from mirmod.controls import Textbox

@wob.receiver("value", "input", control=Textbox())
def receive_value(self, value):
    self.value = value

Fields let nodes run in loops

They are defined by a pair of receivers and transmitters that are both marked as is_field=True. Visually, you can tell that a transmitter or receiver is a field transmitter/receiver by their pointier shape. Nodes within a field are continously run until the field transmitter runs out of values to transmit. Read more about fields.