Highway Workflow Engine - Stabilize execution layer
Project description
Stabilize
Highway Workflow Engine - Stabilize execution layer.
A lightweight Python workflow execution engine with DAG-based stage orchestration.
Requirements
- Python 3.11+
- SQLite (included) or PostgreSQL 12+
Installation
pip install stabilize # SQLite support only
pip install stabilize[postgres] # PostgreSQL support
pip install stabilize[rag] # RAG-powered pipeline generation
pip install stabilize[all] # All features
Features
- Message-driven DAG execution engine
- Parallel and sequential stage execution
- Synthetic stages (before/after/onFailure)
- PostgreSQL and SQLite persistence
- Pluggable task system
- Retry and timeout support
- RAG-powered pipeline generation from natural language
Quick Start
from stabilize import Workflow, StageExecution, TaskExecution, WorkflowStatus
from stabilize.persistence.sqlite import SqliteWorkflowStore
from stabilize.queue.sqlite_queue import SqliteQueue
from stabilize.queue.processor import QueueProcessor
from stabilize.orchestrator import Orchestrator
from stabilize.tasks.interface import Task
from stabilize.tasks.result import TaskResult
from stabilize.tasks.registry import TaskRegistry
# Define a custom task
class HelloTask(Task):
def execute(self, stage: StageExecution) -> TaskResult:
name = stage.context.get("name", "World")
return TaskResult.success(outputs={"greeting": f"Hello, {name}!"})
# Create a workflow
workflow = Workflow.create(
application="my-app",
name="Hello Workflow",
stages=[
StageExecution(
ref_id="1",
type="hello",
name="Say Hello",
tasks=[
TaskExecution.create(
name="Hello Task",
implementing_class="hello",
stage_start=True,
stage_end=True,
),
],
context={"name": "Stabilize"},
),
],
)
# Setup persistence and queue
store = SqliteWorkflowStore(":memory:")
queue = SqliteQueue(":memory:")
# Register tasks
registry = TaskRegistry()
registry.register("hello", HelloTask)
# Create processor and orchestrator
processor = QueueProcessor.create(queue, store, registry)
orchestrator = Orchestrator(queue)
# Run workflow
store.store(workflow)
orchestrator.start(workflow)
processor.process_all(timeout=10.0)
# Check result
result = store.retrieve(workflow.id)
print(f"Status: {result.status}") # WorkflowStatus.SUCCEEDED
print(f"Output: {result.stages[0].outputs}") # {'greeting': 'Hello, Stabilize!'}
Parallel Stages
Stages with shared dependencies run in parallel:
# Setup
# / \
# Test Lint
# \ /
# Deploy
workflow = Workflow.create(
application="my-app",
name="CI/CD Pipeline",
stages=[
StageExecution(ref_id="setup", type="setup", name="Setup", ...),
StageExecution(ref_id="test", type="test", name="Test",
requisite_stage_ref_ids={"setup"}, ...),
StageExecution(ref_id="lint", type="lint", name="Lint",
requisite_stage_ref_ids={"setup"}, ...),
StageExecution(ref_id="deploy", type="deploy", name="Deploy",
requisite_stage_ref_ids={"test", "lint"}, ...),
],
)
Database Setup
SQLite
No setup required. Schema is created automatically.
PostgreSQL
Apply migrations using the CLI:
# Using mg.yaml in current directory
stabilize mg-up
# Using database URL
stabilize mg-up --db-url postgres://user:pass@host:5432/dbname
# Using environment variable
MG_DATABASE_URL=postgres://user:pass@host:5432/dbname stabilize mg-up
# Check migration status
stabilize mg-status
Example mg.yaml:
database:
host: localhost
port: 5432
user: postgres
password: postgres
dbname: stabilize
RAG-Powered Pipeline Generation
Stabilize includes an AI-powered assistant that generates pipeline code from natural language descriptions using RAG (Retrieval-Augmented Generation).
Requirements
pip install stabilize[rag] # Installs ragit dependency
You also need:
- Local Ollama (required for embeddings - ollama.com doesn't support embeddings API):
# Install from https://ollama.com/download, then: ollama serve # Start the server ollama pull nomic-embed-text # Download embedding model
- Ollama API key for LLM generation (uses ollama.com cloud)
Setup
Create a .env file with your API key:
OLLAMA_API_KEY=your_api_key_here
Initialize the embedding cache:
# Initialize with default context (Stabilize docs + examples)
stabilize rag init
# Include your own code as additional training context
stabilize rag init --additional-context /path/to/your/code/
# Force regenerate embeddings
stabilize rag init --force
Generate Pipelines
# Generate a pipeline from natural language
stabilize rag generate "create a pipeline that processes CSV files in parallel"
# Save to file
stabilize rag generate "build a CI/CD pipeline with test and deploy stages" > my_pipeline.py
Clear Cache
stabilize rag clear
Configuration
Environment variables:
| Variable | Default | Description |
|---|---|---|
OLLAMA_API_KEY |
(required) | API key for ollama.com |
OLLAMA_BASE_URL |
https://ollama.com |
LLM endpoint URL |
OLLAMA_EMBEDDING_URL |
http://localhost:11434 |
Local Ollama for embeddings |
Example
$ stabilize rag generate "create a hello world pipeline"
from stabilize import Workflow, StageExecution, TaskExecution
from stabilize.tasks.interface import Task
from stabilize.tasks.result import TaskResult
...
CLI Reference
stabilize mg-up [--db-url URL] Apply pending PostgreSQL migrations
stabilize mg-status [--db-url URL] Show migration status
stabilize rag init [--force] [--additional-context PATH] Initialize RAG embeddings
stabilize rag generate "prompt" Generate pipeline from natural language
stabilize rag clear Clear embedding cache
Naming Alignment with highway_dsl
| highway_dsl | stabilize |
|---|---|
| Workflow | Workflow |
| TaskOperator | Task interface |
| RetryPolicy | RetryableTask |
| TimeoutPolicy | OverridableTimeoutRetryableTask |
Running Tests
# All tests (requires Docker for PostgreSQL)
pytest tests/ -v
# SQLite tests only (no Docker)
pytest tests/ -v -k sqlite
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stabilize-0.9.4.tar.gz.
File metadata
- Download URL: stabilize-0.9.4.tar.gz
- Upload date:
- Size: 114.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68e2201695fed474681d3b8adcd74cd4400d3268813039e87cc493aa7fae1e99
|
|
| MD5 |
315ef4ec846e3563ef4bf1a68f03636b
|
|
| BLAKE2b-256 |
2cb5455c263481457663e68b97f7509fc4dd2ad4a4b993c3b2d6685d8a5341a0
|
File details
Details for the file stabilize-0.9.4-py3-none-any.whl.
File metadata
- Download URL: stabilize-0.9.4-py3-none-any.whl
- Upload date:
- Size: 145.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
580064c028bf69d982983e5776ebe077ea1ddf10316297b50d8c96475ca3f850
|
|
| MD5 |
c1ea7fae1f24360131227cbc45dbd777
|
|
| BLAKE2b-256 |
fc903eacd26cb55898284d99f2b538357e1b332e6297f88ce3151b6d1c757b26
|