Skip to main content

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.

PyPI Python

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 node
  • GraphOp — Container for nested workflows
  • BranchOp — 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hush_icore-0.1.11.tar.gz (93.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hush_icore-0.1.11-py3-none-any.whl (121.5 kB view details)

Uploaded Python 3

File details

Details for the file hush_icore-0.1.11.tar.gz.

File metadata

  • Download URL: hush_icore-0.1.11.tar.gz
  • Upload date:
  • Size: 93.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hush_icore-0.1.11.tar.gz
Algorithm Hash digest
SHA256 75612ec6a6aeaf43a58ac3ccae2f6b62cada4fda926d6d717d15b01e311dfaff
MD5 c27672f95ec3d658e01f96e44330c77c
BLAKE2b-256 30af972eb0ee44384015e17b1170a17981c3e7f18fb7f776179ae251d7c2628e

See more details on using hashes here.

File details

Details for the file hush_icore-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: hush_icore-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 121.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hush_icore-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 52027e35d97b0cfdc137e752276753c23dce1fe67424a3fb6dd6106ce8a66976
MD5 84aac7050a9258fb4467ac936e92b5de
BLAKE2b-256 0e285fb83901cbf17a6c94c3257a78a5f6857d80f57e3a9b32860c5ef8b42768

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page