Documentation Index
Fetch the complete documentation index at: https://docs.definable.ai/llms.txt
Use this file to discover all available pages before exploring further.
Sequential Pipeline
Steps execute in order, each receiving the previous step’s output.
import asyncio
from definable.agent import Agent
from definable.agent.workflow import Workflow, Step
researcher = Agent(model="gpt-4o", instructions="Research the topic thoroughly.")
writer = Agent(model="gpt-4o", instructions="Write an article based on the research.")
workflow = Workflow(
name="research-pipeline",
steps=[
Step(name="research", agent=researcher),
Step(name="write", agent=writer),
],
)
async def main():
result = await workflow.arun("The future of AI agents")
print(result.content)
print(f"Duration: {result.duration_ms:.0f}ms")
asyncio.run(main())
Parallel Execution
Run multiple steps concurrently.
from definable.agent.workflow import Workflow, Parallel, Step
workflow = Workflow(
name="multi-analysis",
steps=[
Parallel(name="analysis", steps=[
Step(name="technical", agent=tech_analyst),
Step(name="business", agent=biz_analyst),
Step(name="legal", agent=legal_analyst),
]),
Step(name="synthesizer", agent=synthesizer),
],
)
Conditional Branching
If/else branching based on step output.
from definable.agent.workflow import Workflow, Step, Condition
workflow = Workflow(
name="review-pipeline",
steps=[
Step(name="draft", agent=drafter),
Step(name="review", agent=reviewer),
Condition(
name="quality-gate",
condition=lambda ctx: "APPROVED" in (ctx.get_last_step_content() or ""),
true_steps=Step(name="publish", agent=publisher),
false_steps=Step(name="rewrite", agent=writer),
),
],
)
Iterative Loop
Repeat until an end condition is met.
from definable.agent.workflow import Workflow, Loop, Step
workflow = Workflow(
name="refinement",
steps=[
Loop(
name="improve",
steps=[
Step(name="generate", agent=generator),
Step(name="evaluate", agent=evaluator),
],
end_condition=lambda outputs: any("APPROVED" in (o.content or "") for o in outputs),
max_iterations=5,
),
],
)
Dynamic Router
Route to different steps based on input.
from definable.agent.workflow import Workflow, Router, Step
workflow = Workflow(
name="support",
steps=[
Router(
name="classifier",
selector=lambda ctx: "technical" if "bug" in (ctx.input or "").lower() else "general",
routes={
"technical": Step(name="tech", agent=tech_agent),
"general": Step(name="general", agent=general_agent),
},
),
],
)
Custom Function Steps
Use callables instead of agents.
async def process(step_input):
data = step_input.get_last_step_content()
return f"Processed: {data[:100]}"
workflow = Workflow(
name="mixed",
steps=[
Step(name="research", agent=researcher),
Step(name="process", executor=process),
Step(name="write", agent=writer),
],
)
Accessing Step Results
result = await workflow.arun("Research AI trends")
result.content # Final step's content
result.success # True if all steps succeeded
result.duration_ms # Total execution time
result.step_outputs # List of all step outputs
research = result.get_step_output("research")
print(research.content)
print(research.duration_ms)