Pydantic Output
Demonstrates team-level typed output using Pydantic schemas.
"""
Pydantic Output
===============
Demonstrates team-level typed output using Pydantic schemas.
"""
from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.team import Team, TeamMode
from agno.tools.websearch import WebSearchTools
from agno.utils.pprint import pprint_run_response
from pydantic import BaseModel
class StockAnalysis(BaseModel):
symbol: str
company_name: str
analysis: str
class CompanyAnalysis(BaseModel):
company_name: str
analysis: str
class StockReport(BaseModel):
symbol: str
company_name: str
analysis: str
# ---------------------------------------------------------------------------
# Create Members
# ---------------------------------------------------------------------------
stock_searcher = Agent(
name="Stock Searcher",
model=OpenAIResponses(id="gpt-5.2"),
output_schema=StockAnalysis,
role="Searches for information on stocks and provides price analysis.",
tools=[WebSearchTools()],
)
company_info_agent = Agent(
name="Company Info Searcher",
model=OpenAIResponses(id="gpt-5.2"),
role="Searches for information about companies and recent news.",
output_schema=CompanyAnalysis,
tools=[WebSearchTools()],
)
# ---------------------------------------------------------------------------
# Create Team
# ---------------------------------------------------------------------------
team = Team(
name="Stock Research Team",
model=OpenAIResponses(id="gpt-5.2"),
mode=TeamMode.route,
members=[stock_searcher, company_info_agent],
output_schema=StockReport,
markdown=True,
)
# ---------------------------------------------------------------------------
# Run Team
# ---------------------------------------------------------------------------
if __name__ == "__main__":
response = team.run("What is the current stock price of NVDA?")
assert isinstance(response.content, StockReport)
pprint_run_response(response)Routed output
Route mode selects a member and returns its answer. The team then parses that answer into StockReport; a selected member must provide fields compatible with that schema. The stock member's schema includes symbol, while the company member's schema does not. If you adapt this team to handle both kinds of question under one output contract, give both members output_schema=StockReport and instructions to include the ticker.
Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno ddgs openaiExport your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"Run the example
Save the code above as pydantic_output.py, then run:
python pydantic_output.pyFull source: cookbook/03_teams/04_structured_input_output/pydantic_output.py