🦜🔀 Parakeet Workflows
High performance and flexible event-driven workflow engine, designed to build complex tasks.
✨ Highlight features
- Event-driven execution — Steps communicate through typed events.
- Fan-out / Fan-in — Emit multiple events in parallel and join results back, with full async support.
- Shared state — Pass data across steps via a built-in
Contextobject without global variables. - Internal buffer — Events are queued internally, so steps can produce and consume at their own pace.
- Declarative API — Define steps with a simple
@stepdecorator. - Built-in observability — Instrument workflows with OpenTelemetry-compatible tracing and custom metrics.
📦 Installation
pip install parakeet-workflows
With uv:
uv add parakeet-workflows
🚀 Quickstart
Here's a simple example to get you started with Parakeet Workflows:
import asyncio
from parakeet_workflows import Workflow, Context, step
from parakeet_workflows.events import Event, StartEvent, StopEvent
class MessageEvent(Event):
message: str
class MyWorkflow(Workflow):
@step(when=StartEvent)
async def start(self, ctx: Context, ev: StartEvent) -> MessageEvent:
input_msg = ev.get("message", "")
return MessageEvent(message=f"Processed: {input_msg}")
@step(when=MessageEvent)
async def process(self, ctx: Context, ev: MessageEvent) -> StopEvent:
return StopEvent(result=ev.message)
async def main():
workflow = MyWorkflow()
result = await workflow.run(input_msg="Hello, World!")
print(result)
asyncio.run(main())
Core Concepts
Workflow
A workflow is a class that inherits from Workflow and contains one or more steps. It orchestrates the execution of steps based on events.
Steps
Steps are asynchronous methods decorated with @step(when=EventType) that define what happens when a specific event is received.
- Steps receive a
Contextand anEvent. - Steps can return new events to trigger subsequent steps.
Events
Events are the building blocks of workflows. They carry data between steps and trigger step execution.
- StartEvent: Automatically triggered when a workflow starts
- StopEvent: Signals the end of a workflow and carries the final result
- Custom Events: Define your own events by inheriting from
Event
Context
The Context object provides access to workflow state and allows steps to share data throughout the workflow execution.
# Read-only access
current_value = ctx.state.count
# Edit state
async with ctx.store.edit_state() as state:
state.count = current_counter + 1
# Send events
ctx.send_event(MyEvent(...))
Server
Parakeet Workflows includes an optional HTTP server built on FastAPI that exposes your workflows as REST endpoints.
import asyncio
from parakeet_workflows.server import WorkflowServer
server = WorkflowServer()
server.add_workflow("my-workflow", MyWorkflow())
asyncio.run(server.serve(host="0.0.0.0", port=8080))
| Endpoint | Description |
|---|---|
GET /workflows |
List all registered workflows |
POST /workflows/{id}/run |
Execute a workflow |
License
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 parakeet_workflows-0.1.0.tar.gz.
File metadata
- Download URL: parakeet_workflows-0.1.0.tar.gz
- Upload date:
- Size: 30.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf85838925d4a7f23bcee0efe201a0098e291f8e80a72045ca176b0e8a77efab
|
|
| MD5 |
43a1b37d7870f38833ca715f8e9bea3b
|
|
| BLAKE2b-256 |
5bfb169add3c06bbc3eae3c118cade971a14cc386acfcdbb99cb4e14325899b1
|
File details
Details for the file parakeet_workflows-0.1.0-py3-none-any.whl.
File metadata
- Download URL: parakeet_workflows-0.1.0-py3-none-any.whl
- Upload date:
- Size: 40.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcf1e0fceafa81a777189ee4fbbcb9348b215afaf9176a2fb817f74593868576
|
|
| MD5 |
649a891a20fa12e0038a65f94c84512d
|
|
| BLAKE2b-256 |
932c0d1db088610f1670426d107623871c2c7c76717f53efdfd4b4be0debb60d
|