0
Phase 8

PydanticAI

~3 min read

Concept & How It Works

    Why Does It Exist?

    Most agent frameworks treat type safety as an afterthought. PydanticAI brings Pydantic's validation philosophy to agents — typed dependencies, structured results, and compile-time-like safety that catches errors before runtime. Built for developers who want robust, testable agent code.

    Real-World Analogy

    PydanticAI is like TypeScript for agents — you define exactly what goes in and what comes out, and the framework catches mismatches before they become production bugs.
    Loading diagram...

    Visual Workflows

    What is PydanticAI?

    Loading diagram...

    Example

    Scenario

    Support agent with typed deps (database, config) returns a structured SupportResponse (answer, confidence, suggested_actions). Tools access the database via RunContext. Tests use FunctionModel — no API calls needed.

    Solution

    In Agent Frameworks, apply PydanticAI to this scenario: Support agent with typed deps (database, config) returns a structured SupportResponse (answer, confidence, suggested_actions). Identify the inputs, run the technique, validate the output, and note one thing you would monitor in production.

    Practice Task

    Do this before moving to the next module — reading alone is not enough.

    Open the Code Walkthrough below and run it locally. Change one parameter related to PydanticAI (e.g. model, temperature, top_k, or tool name), observe the difference in output, and write 2–3 sentences explaining what changed.

    Code Walkthrough

    Highlighted lines show where PydanticAI happens in the code.

    PydanticAI
    1from pydantic_ai import Agent, RunContext  # import dependencies2from pydantic import BaseModel  # import dependencies3from dataclasses import dataclass  # import dependencies4
    5@dataclass6class SupportDeps:  # define a data structure or component7    db: DatabaseConn8    customer_id: str9
    10class SupportResponse(BaseModel):  # define a data structure or component11    answer: str12    confidence: float13    suggested_actions: list[str]14
    15agent = Agent(16    "openai:gpt-4o",17    deps_type=SupportDeps,18    output_type=SupportResponse,19    system_prompt="You are a helpful support agent.",20)21
    22@agent.tool23async def lookup_order(ctx: RunContext[SupportDeps], order_id: str) -> dict:24    return await ctx.deps.db.get_order(ctx.deps.customer_id, order_id)  # return the result25
    26result = await agent.run(27    "Where is my order #12345?",28    deps=SupportDeps(db=db, customer_id="cust_1"),29)30print(result.output.answer)  # typed SupportResponse

    Commands to Remember

    Commands to Remember

    • pip install langgraph langchain-openai # LangGraph agent framework
    • pip install openai-agents # OpenAI Agents SDK
    • pip install crewai # multi-agent CrewAI framework

    Common Mistakes

    • Untyped deps — loses the main benefit
    • Not using structured output — parsing strings manually
    • Testing against real APIs instead of FunctionModel
    • Using PydanticAI for complex multi-agent orchestration
    • Ignoring async — framework is async-first

    Cheat Sheet

    Quick recap — the most important points from this module.

    Cheat Sheet

    quick ref
    • deps_type + output_type
    • RunContext[Deps].deps
    • @agent.tool decorator
    • Pydantic output models
    • FunctionModel for tests
    • Model string: 'openai:gpt-4o'