A Python 3 library for parsing, validating, and executing workflows defined in the CNCF Serverless Workflow v1.0 specification. Supports all state types (OperationState, ForEachState, SwitchState, SubflowState, ParallelState, EndState, EventState, DelayState, InjectState), JQ-based data filtering, events, retries, and authentication. Optimized for agentic workflows with LLM-friendly design.
- Parse and Validate: Validates YAML/JSON workflows against the v1.0 schema, enforcing
transitionorend: truefor non-EndStatetypes, collecting all errors. - Execute Workflows: Handles all state types, including event-driven, delay, and data injection.
- JQ Integration: Supports JQ for
stateDataFilter,arguments, andinputCollection. - LLM-Friendly: Structured comments (e.g.,
# MANDATORY Transition) and comprehensive error reporting for LLM generation. - Testing: Pytest suite for validation of multiple error cases.
- Clone the repository:
git clone https://github.com/rvergis/cncf-serverless-workflow-python-v1.git cd cncf-serverless-workflow-python-v1 - Install dependencies:
pip install pyyaml jq jsonschema pytest - Install as a package:
pip install .
- Save your workflow (
workflow.yaml) and schema (workflow_schema.yaml). - Validate and execute:
from cncf_serverless_workflow.workflow_validator import load_yaml, validate_workflow from cncf_serverless_workflow.workflowengine import execute_workflow schema = load_yaml("workflow_schema.yaml") workflow = load_yaml("workflow_example.yaml") result = validate_workflow(workflow, schema) if result["status"] == "valid": final_state = execute_workflow(workflow) print(json.dumps(final_state, indent=2)) else: print(json.dumps(result["message"], indent=2))
- Example output for
workflow_example.yaml:{ "context": { "ParallelStartOutput": { "items": [{"value": 60}, {"value": 30}, {"value": 45}], "value": 60, "Branch1Output": 62, "Branch2Output": "Processed: 2" }, "ForEachStateOutput": { "results": [ {"method2": "Processed: 10"}, {"method3": [31, 32]}, {"method3": [46, 47]} ] }, "SwitchStateOutput": {"value": 60}, "OperationStateOutput": { "initOperation": {"value": 70}, "method1": 72, "method2": "Processed: Seq2: 72", "method3": ["Processed: Seq2: 72", "Processed: Seq2: 73"], "method4": {"key": "Processed: Seq2: 72"} } } }
To generate valid workflows:
- Provide
workflow_example.yamlas a one-shot example. - Use prompt: “Generate a state with
transition(to ParallelStart, ForEachState, etc.) orend: trueaftertype, optionalstateDataFilter, anddataOutput.” - Validate with
workflow_validator.py, retrying up to 3 times with errors: “Regenerate fixing: {errors}.” - Example error:
["State 'GetAllObjectIds' missing mandatory transition or end: true"].
Run tests to validate workflows:
pytest test_workflow_validator.py
workflowengine.py: Executes workflows.workflow_validator.py: Validates workflows, collecting all errors.test_workflow_validator.py: Pytest suite for multiple error cases.workflow_schema.yaml: Full CNCF v1.0 schema.workflow_example.yaml: Example workflow with LLM-friendly comments.
- Fork the repository.
- Create a feature branch (
git checkout -b feature/your-feature). - Commit changes (
git commit -m "Add your feature"). - Push to the branch (
git push origin feature/your-feature). - Open a pull request.
MIT License. See LICENSE.
- Built on CNCF Serverless Workflow v1.0.
- Inspired by
serverlessworkflow/sdk-python(v0.8).