This example demonstrates how to use async agents with structured output schemas, comparing structured output mode versus JSON mode for generating movie scripts with defined data models.
import asynciofrom typing import Listfrom agno.agent import Agent, RunOutput # noqafrom agno.models.openai import OpenAIChatfrom pydantic import BaseModel, Fieldfrom rich.pretty import pprint # noqaclass MovieScript(BaseModel): setting: str = Field( ..., description="Provide a nice setting for a blockbuster movie." ) ending: str = Field( ..., description="Ending of the movie. If not available, provide a happy ending.", ) genre: str = Field( ..., description="Genre of the movie. If not available, select action, thriller or romantic comedy.", ) name: str = Field(..., description="Give a name to this movie") characters: List[str] = Field(..., description="Name of characters for this movie.") storyline: str = Field( ..., description="3 sentence storyline for the movie. Make it exciting!" )# Agent that uses structured outputsstructured_output_agent = Agent( model=OpenAIChat(id="gpt-5-mini-2024-08-06"), description="You write movie scripts.", output_schema=MovieScript,)# Agent that uses JSON modejson_mode_agent = Agent( model=OpenAIChat(id="gpt-5-mini"), description="You write movie scripts.", output_schema=MovieScript, use_json_mode=True,)# Get the response in a variable# json_mode_response: RunOutput = json_mode_agent.arun("New York")# pprint(json_mode_response.content)# structured_output_response: RunOutput = structured_output_agent.arun("New York")# pprint(structured_output_response.content)asyncio.run(structured_output_agent.aprint_response("New York"))asyncio.run(json_mode_agent.aprint_response("New York"))