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/activate

Set your API key

export LITELLM_API_KEY=xxx

Install dependencies

uv pip install -U "litellm>=1.83.0" openai agno

Run Agent

Save the code above as structured_output.py, then run:

python structured_output.py