from polos import workflow, WorkflowContext
from pydantic import BaseModel
class OrderPayload(BaseModel):
order_id: str
items: list[str]
total: float
@workflow(id="process_order")
async def process_order(ctx: WorkflowContext, payload: OrderPayload):
# Steps are automatically retried on failure
await ctx.step.run("validate", validate_order, payload)
await ctx.step.run("reserve", reserve_inventory, payload.items)
await ctx.step.run("charge", process_payment, payload.total)
# Deterministic UUID (same on replay)
confirmation = await ctx.step.uuid("confirmation")
return {"status": "completed", "confirmation": confirmation}