Agent with Structured Output

Get typed Pydantic responses instead of free-form text.

Use output_schema to get structured, typed responses you can trust. The agent returns a Pydantic model instead of free-form text.

Create a Python file

1from typing import List, Optional
2
3from kern.agent import Agent
4from kern.models.openai import OpenAIResponses
5from kern.tools.yfinance import YFinanceTools
6from pydantic import BaseModel, Field
7
8
9class StockAnalysis(BaseModel):
10 ticker: str = Field(..., description="Stock ticker symbol")
11 company_name: str = Field(..., description="Full company name")
12 current_price: float = Field(..., description="Current price in USD")
13 pe_ratio: Optional[float] = Field(None, description="P/E ratio")
14 summary: str = Field(..., description="One-line summary")
15 key_drivers: List[str] = Field(..., description="2-3 key growth drivers")
16 key_risks: List[str] = Field(..., description="2-3 key risks")
17
18
19agent = Agent(
20 model=OpenAIResponses(id="gpt-5.2"),
21 tools=[YFinanceTools()],
22 output_schema=StockAnalysis,
23)
24
25response = agent.run("Analyze NVIDIA stock")
26
27# Access typed data directly
28analysis: StockAnalysis = response.content
29print(f"{analysis.company_name} ({analysis.ticker})")
30print(f"Price: ${analysis.current_price}")
31print(f"P/E Ratio: {analysis.pe_ratio or 'N/A'}")
32print(f"Summary: {analysis.summary}")
33print("Key Drivers:")
34for driver in analysis.key_drivers:
35 print(f" - {driver}")
36print("Key Risks:")
37for risk in analysis.key_risks:
38 print(f" - {risk}")

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U kern-ai openai yfinance

Export your OpenAI API key

1export OPENAI_API_KEY="your_openai_api_key_here"
1$Env:OPENAI_API_KEY="your_openai_api_key_here"

Run Agent

1python structured_output.py