Return structured data from an agent by passing an output_schema.
Create the agent
import asyncio
from pydantic import BaseModel, Field
from definable.agent import Agent
class MovieReview(BaseModel):
title: str = Field(description="Movie title")
rating: float = Field(description="Rating out of 10")
summary: str = Field(description="Brief summary")
pros: list[str] = Field(description="Positive aspects")
cons: list[str] = Field(description="Negative aspects")
agent = Agent(
model="gpt-4o",
instructions="You are a movie critic. Provide structured reviews.",
)
async def main():
output = await agent.arun(
"Review the movie Inception",
output_schema=MovieReview,
)
review = output.parsed # MovieReview instance
print(f"{review.title}: {review.rating}/10")
print(f"Summary: {review.summary}")
for pro in review.pros:
print(f" + {pro}")
for con in review.cons:
print(f" - {con}")
asyncio.run(main())
Export your API key
export OPENAI_API_KEY=sk-***
Run
python agent_structured.py
The agent returns a validated MovieReview Pydantic model.
Use output_schema=, not response_model=. The response_model parameter does not exist.