Workflow syntax
version: 1process: department_routinginput: type: jsondecisions: department: decide: one_of question: Which team should handle this ticket? options: billing: Payments, refunds, invoices support: Product problems and bugs sales: New purchasesflow: - else: do: return value: route: "{{ department.value }}"Top-level fields
Section titled “Top-level fields”| Field | Meaning |
|---|---|
version |
Must be 1. |
process |
Workflow name. |
model |
Optional. See below. |
input.type |
Optional: json or text. |
decisions |
At least one one_of, whether or scale decision. |
flow |
At least one rule, with an optional final else. |
Decision IDs use letters, digits and underscores, and can’t start with a digit.
Logical model selection
Section titled “Logical model selection”model: provider: jev model: jev-latestNames a model family and model, not where it’s hosted. The CLI accepts:
laya/laya: native, the default whenmodelis omitted.jev/jev-latest,jev-preview, or a version such asjev-1.13.0. NeedsBANH_INFERENCE_TOKEN.kev/kev-4b: compatibility only.
Flags and environment variables override this for local runs. Cloud accepts only its managed models. Infrastructure fields such as baseUrl or token are rejected. See providers.
Inputs
Section titled “Inputs”json:--inputreads a JSON file.text:--inputreads a file as-is;--texttakes a string.- Omitted: either is accepted; the CLI parses
--inputas JSON.
input.type doesn’t define a schema.
Validation
Section titled “Validation”banh validate workflow.yamlRejects unknown fields, duplicate keys, non-string keys, YAML aliases, unsupported expressions and bad references. Never loads a model.
Next: decisions, flow rules.