Try it
See what your pipeline compiles to
Otium takes a multi-stage pipeline as one artifact and works out which dependencies are real, where the scheduler must stop chaining, and what the whole thing costs — before anything runs.
This is the real compiler, running in your browser. Nothing you type is sent to us — no account, no upload, no retention.
The starter pipeline has a deliberate flaw —
one step waits on another for no reason. The compiler finds it below; delete the after: line it names and watch the graph get one step shallower.
Quick reference — what the keys mean
name- What the workflow is called. You submit against it by name and version.
input.schema- The shape of one item you submit. `${input.…}` reads from it.
nodes.<key>- One inference step. Its body is an OpenAI chat request with bindings substituted in.
target.product- What you bought — a SKU, not a model. Otium resolves the model at dispatch.
${nodes.x.output.y}- Read an upstream node’s output. This is what creates a dependency — you never declare edges.
after: [x]- Ordering with no data flowing. The only edge you write by hand, and the one the lint questions.
when- A structured guard. If it is false the node is skipped, and the skip propagates.
output.validators- What a good output looks like. A failure retries in place instead of costing another batch window.
fallback- Where to retry when validation keeps failing — a different product, or the same one with different parameters.
estimate- Your expected tokens in and out. Without it the cost figure is assumed from prompt size, and says so.
type: external- A step you run. The run parks, you do the work, you resume it — Otium never runs your code.
The full format — assets, external nodes, predicates, fallback policy — is in the workflow guide.