from agno.workflow import Workflow, OnReject
from agno.workflow.router import Router
from agno.workflow.step import Step
from agno.workflow.types import HumanReview, StepInput, StepOutput
from agno.db.sqlite import SqliteDb
workflow = Workflow(
name="router_review_workflow",
db=SqliteDb(db_file="workflow.db"),
steps=[
Router(
name="analysis_router",
selector=lambda si: [Step(name="quick", executor=quick_analysis)],
choices=[
Step(name="quick", description="Fast analysis (2 min)", executor=quick_analysis),
Step(name="deep", description="Thorough analysis (10 min)", executor=deep_analysis),
Step(name="custom", description="Custom analysis", executor=custom_analysis),
],
human_review=HumanReview(
requires_output_review=True,
output_review_message="Review the analysis. Approve, or pick a different type?",
on_reject=OnReject.retry,
max_retries=5,
),
),
Step(name="report", executor=generate_report),
],
)
run_output = workflow.run("Analyze Q4 sales data")
while run_output.is_paused:
for req in run_output.steps_requiring_output_review:
print(req.step_output.content)
print(f"Available routes: {req.available_choices}")
choice = input("Approve? (yes/no): ").strip().lower()
if choice in ("yes", "y"):
req.confirm()
else:
req.reject()
# After rejection, pick a different route
for req in run_output.steps_requiring_route:
print(f"Pick a different route: {req.available_choices}")
selection = input("Your choice: ").strip()
req.select(selection)
run_output = workflow.continue_run(run_output)