Agent with Structured Outputs
Return a validated Pydantic MovieScript from LiteLLM in JSON mode or with native structured outputs.
The selected provider and model must support the requested output format. Set the model capability flag as shown: the adapter otherwise omits response_format, even when the agent has use_json_mode=True. JSON mode requests JSON and Agno parses it into the Pydantic model; native structured output requests the schema from the provider. Check the returned content type before consuming it in application code.
Code
from typing import List
from agno.agent import Agent, RunOutput # noqa
from agno.models.litellm import LiteLLM
from pydantic import BaseModel, Field
from rich.pretty import pprint # noqa
class 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 JSON mode
json_mode_agent = Agent(
model=LiteLLM(id="gpt-4o", supports_native_structured_outputs=True),
description="You write movie scripts.",
output_schema=MovieScript,
use_json_mode=True,
)
# Agent that uses native structured outputs.
# Set supports_native_structured_outputs=True for the providers that support it.
structured_output_agent = Agent(
model=LiteLLM(id="gpt-4o", supports_native_structured_outputs=True),
description="You write movie scripts.",
output_schema=MovieScript,
structured_outputs=True,
)
json_mode_agent.print_response("New York")
structured_output_agent.print_response("New York")Usage
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateSet your API key
export LITELLM_API_KEY=xxxInstall dependencies
uv pip install -U "litellm>=1.83.0" openai agnoRun Agent
Save the code above as structured_output.py, then run:
python structured_output.py