Skip to main content

YAML Workflow Framework

YAML workflow engine — parses, validates, and executes step-based workflows with pluggable Action / Evaluator / Predicate / Iterable methods.

Overview

vcti-ywf is the workflow engine behind VCollab Insights. A workflow is a directory of YAML files — about.yaml, variables/main.yaml, steps/main.yaml — that describe an automated process declaratively. The engine parses those files (with support for !var, !include, and !module tags), resolves variables, evaluates control-flow blocks (if-else, for-each, try-except), and dispatches each step to a registered method plugin.

Method plugins come in four typed shapes — Action (side-effecting), Evaluator (produces a value), Predicate (boolean test), and Iterable (yields keys for for-each). A built-in stdlib package ships common methods; downstream consumers add domain-specific methods (CAE data extraction, plotting, report generation) by registering their own classes.

Workflow YAML is evaluated against a sandboxed Context by default — - evaluator: evaluate expressions go through simpleeval, and {{ var }} template interpolation goes through Jinja2's SandboxedEnvironment. Engine-internal context variables (__runtime__ and friends) are filtered from author-facing scope. Hosts that run fully-trusted YAML can opt into raw eval or the full Jinja2 environment by constructing the Context themselves and passing it to Runner.run().

Installation

pip install vcti-ywf>=3.0.1

In requirements.txt

vcti-ywf>=3.0.1

In pyproject.toml dependencies

dependencies = [
    "vcti-ywf>=3.0.1",
]

Quick Start

Run a workflow from Python:

from pathlib import Path

from vcti.ywf import Runner, Workflow

workflow = Workflow(Path("path/to/my-workflow"))
workflow.read_all()

result = Runner(workflow).run({"input_file": "data/model.h5"})

print(result.return_value)   # top-level block's value
print(result.outputs)        # declared outputs read from final context

For monitoring or debugging, build an ObservableContext, attach observers, and pass it to run():

from vcti.ywf import ObservableContext, Runner
from vcti.ywf.execution.observers.history_observer import HistoryObserver

context = ObservableContext()
context.add_observer(HistoryObserver())

Runner(workflow).run({"input_file": "data/model.h5"}, context)

A minimal workflow directory looks like:

my-workflow/
├── about.yaml              # title, description, tags, images
├── variables/
│   └── main.yaml           # inputs + outputs declarations
└── steps/
    └── main.yaml           # execution steps

variables/main.yaml declares the workflow's external contract — inputs (supplied by the caller) and outputs (produced by the run):

inputs:
  - name: input_file
    type: input_file_path
    description: Path to the simulation results
    default: data/sample.h5

outputs:
  - name: mode_count
    type: int
    default: 0
    description: Number of modes extracted.

steps/main.yaml lists actions, evaluators, predicates, and iterables — each is a YAML mapping keyed by its method name. The data-scope actions illustrate the typical pattern:

- action: define_data_scope
  name: simulation
  type: paths-group

- action: add_path_source
  path: !var input_file
  format: hdf5-file
  label: results

- action: load_data_scope

- if:
    predicate: is_data_scope_valid
  then:
    - action: log_message
      message: "Data scope ready."
  else:
    - action: log_message
      log_level: error
      message: "Data scope failed to load."

Documentation

User guides — start here:

  • docs/tutorial.md — walk through the greeting workflow end-to-end with the Python API, then expand to control-flow blocks and data-scope actions.
  • docs/yaml-reference.md — exhaustive field reference for about.yaml, variables/main.yaml, steps/main.yaml, and every step type (action / evaluator / predicate / iterable / if-else / for-each / try-except).
  • docs/yaml-tags.md — !var, !include, and !module semantics with scoping rules.
  • docs/plugins.md — author guide for custom workflow methods.
  • docs/api.md — autogenerated API reference.

Developer reference — engine concepts subpackage by subpackage:

Internals — for engine maintainers and tool builders:


Dependencies

Third-party:

  • pydantic (>=2.0) — model validation
  • PyYAML (>=6.0) and pyyaml-include (>=2.0) — YAML parsing with !include
  • Jinja2 (>=3.0) — {{ var }} interpolation in Property[str] fields (sandboxed via SandboxedEnvironment in the default Context)
  • simpleeval (>=1.0) — sandboxed expression evaluator for - evaluator: evaluate
  • NumPy (>=1.24) — array handling via vcti-array-tree
  • pandas (>=2.0) — CSV reading in the read_file evaluator and DataFrame iteration in list_items

VCollab platform packages:

Optional extras:

Metadata

Release files for vcti-ywf 3.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vcti-ywf 3.0.1
File Size Uploaded
vcti_ywf-3.0.1.tar.gz 136.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vcti-ywf 3.0.1
File Interpreter ABI Platform
vcti_ywf-3.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 244.2 kB

Release files / vcti_ywf-3.0.1.tar.gz

Download URL vcti_ywf-3.0.1.tar.gz
Size 136.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e1e4378ebe2159d414054acd99defcb2caa7f73beeaab2642692644726c90ea5
BLAKE2b-256 checksum
How to use checksums
a168d9f112e189cbb3fc65623c07dcb4f632da8356ad912643bff268786757b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 25, 2026.

Transparency log

Release files / vcti_ywf-3.0.1-py3-none-any.whl

Download URL vcti_ywf-3.0.1-py3-none-any.whl
Size 107.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a9d3b759f97d5a645993f0a0b8af0ef8700aeceb0efe21ef842b661fc3b9e507
BLAKE2b-256 checksum
How to use checksums
2a01407cd86e366ad2f55c506910bff484ffa0e880ad73b8e34e7a69b13a1af6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page