Hush workflow engine core - A powerful async workflow orchestration framework
Project description
hush-icore
Core workflow engine for Hush — async DAG execution with built-in tracing and type-safe state management.
Installation
pip install hush-icore
Quick Start
import asyncio
from hush.core import Hush, GraphOp, op, START, END, PARENT
@op
def double(x: int):
return {"result": x * 2}
async def main():
with GraphOp(name="workflow") as graph:
step = double(x=PARENT["x"])
START >> step >> END
result = await Hush(graph).run(inputs={"x": 5})
print(result["result"]) # 10
asyncio.run(main())
Key Concepts
Ops
@op— Turn any function into a workflow nodeGraphOp— Container for nested workflowsBranchOp— Conditional routing (if_(...).else_(...))@graph— Reusable workflow factory with auto-naming
@graph — Reusable Workflow Factory
from hush.core import graph, op, START, END, PARENT, GraphOp, Hush
# fetch
# / \
# summarize translate (parallel)
# \ /
# merge_results
@op
def fetch(url: str):
return {"data": f"content from {url}"}
@op
def summarize(text: str):
return {"summary": text[:50] + "..."}
@op
def translate(text: str):
return {"translated": f"[VI] {text}"}
@op
def merge_results(summary: str, translated: str):
return {"report": f"{summary}\n{translated}"}
@graph
def process_url(url):
f = fetch(url=url)
s = summarize(text=f["data"])
t = translate(text=f["data"])
m = merge_results(summary=s["summary"], translated=t["translated"])
START >> f >> [s, t] >> m >> END
@op
def publish(report: str):
return {"status": f"published: {report[:30]}..."}
# Use in a parent graph — auto-named from variable
async def main():
with GraphOp(name="pipeline") as pipeline:
p = process_url(url=PARENT["url"])
pub = publish(report=p["report"])
START >> p >> pub >> END
result = await Hush(pipeline).run(inputs={"url": "https://example.com"})
print(result["status"])
Flow Control
# Sequential
START >> a >> b >> c >> END
# Parallel (fork + join)
START >> [a, b, c] >> merge >> END
# Generator (streaming iteration)
@op
def each_item(items: list):
for item in items:
yield {"value": item}
# Loop (feedback loop with condition)
with GraphOp.loop(until="count >= 5") as loop:
inc = increment(counter=PARENT["count"])
inc["counter"] >> PARENT["count"]
START >> inc >> END
State References
# PARENT["key"] — external inputs from engine.run()
step = double(x=PARENT["input"])
# op["key"] — output from sibling op
upper = to_upper(text=greet["greeting"])
# Output mapping
step["result"] >> PARENT["answer"]
Tracing
from hush.core.tracing import LocalTracer
engine = Hush(graph, tracer=LocalTracer(tags=["dev"]))
result = await engine.run(inputs={...})
# Traces written to ~/.hush/traces/{request_id}.json
For external backends (Langfuse, OpenTelemetry), see hush-telemetry.
Rust Backend
hush-icore has a companion Rust crate for high-performance execution (~8x faster on pure-compute). Use via hush-serve:
engine = Hush(graph)
engine.serve(port=8000, backend="rust")
Related Packages
| Package | Description |
|---|---|
| hush-providers | LLM, embedding, reranking integrations |
| hush-telemetry | Langfuse, OpenTelemetry tracing |
| hush-serve | HTTP API server (Python + Rust backends) |
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 hush_icore-0.1.9.tar.gz.
File metadata
- Download URL: hush_icore-0.1.9.tar.gz
- Upload date:
- Size: 94.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dfd6764ee0ffffd65ee1f214da9554a73c952614de45988de83c6d797b2fb0e
|
|
| MD5 |
47927a113a5c91b463bc3848f6ba38a6
|
|
| BLAKE2b-256 |
187bcfd76bab37e4096ce251981d847435416d95bbc659507fc6dfd65eff3e67
|
File details
Details for the file hush_icore-0.1.9-py3-none-any.whl.
File metadata
- Download URL: hush_icore-0.1.9-py3-none-any.whl
- Upload date:
- Size: 121.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a52594868c28eac2b37a0884a17cf359fb1aed898d2514e50a8575cd36077c1
|
|
| MD5 |
b988f04255438a6846cd6e51da324cd5
|
|
| BLAKE2b-256 |
2754cc36319e6c57b0fd1439d766eac0215bfcff9007209f334017d662e0ee2b
|