tasks) executed sequentially. Each
task is either a deterministic command (such as execute_sql, which runs a
named SQL query) or an agent given a prompt. Tasks compose by passing results
from one to the input of another — the output of each task is accessible with
Jinja as {{ name_of_task }}.
You build, run, and replay Automations from the Oxygen IDE. Each Automation is
stored as an .automation.yml file (the older .procedure.yml extension is
still recognized for back-compat).
Automation components
Automations are DAGs comprised oftasks. Each task has a few common
properties:
Specific task types have additional property requirements — see
Task types for the full set.
A complete example
workflows/monthly_report.automation.yml
Automations vs. chains
An Automation is similar to a “chain” in the prompt-engineering parlance, but with a few key differences:- Automations are DAGs. Whereas chains can become arbitrarily complex with arbitrarily nested loops, complex reply logic, and opaque branching structures, Automations are DAGs, which enforce a clearer, more predictable flow from input to output.
- Automations separate logic from execution. Because Automations are written in YAML, the DAG definition is entirely separate from the execution engine, while other code-based systems keep these tightly coupled and so ultimately become difficult to build and maintain.
langchain or llama_index, but they also dramatically reduce the complexity of
the system. You can think of Oxygen’s Automation paradigm as a domain-specific
chain-builder for data workflows, where most (if not all) tasks simply pass
results around between different agents.
Next steps
Task types
agent, execute_sql, formatter, and sub-automationsLoops
Iterate over values with
loop_sequentialVariables
Parameterize an Automation with typed inputs