EVEMISSTechnology

Repository guide · getting started · v5

pydantic / pydantic-ai · Getting started

This repository is a Python project described as an agent framework. Static analysis records 4,082 files, 45 parsed dependencies across three manifests, and 65 entrypoint records. Execution paths terminate at external or unresolved boundaries, and runtime commands are unverified.

Original repository
pydantic/pydantic-ai
License
MIT · open-source license
Analyzed revision · last verified
5b73d7c0da119f12c65b015b15eba3e4d128fca9 ·

Newer revision observed; the code this guide cites is unchanged. The default branch moved to f06bba53794d, checked 2026-10-03. A revision diff of 39 changed files found no change in the code regions this guide cites. The guide still describes revision 5b73d7c0da11; repository-wide counts (files, calls and so on) refer to that revision.

Getting Started with pydantic/pydantic-ai: Initial Guide

Terms used on this page
Entrypoint record
A file the analyzer marks as a place where execution can start. When it carries a __main__ guard excerpt, the file contains an if __name__ == "__main__": block and the excerpt shows what that block calls; without an excerpt, the file was flagged by its name only.
Bounded static execution path
A call chain reconstructed from the source code without running it, stopped after a fixed number of steps. It shows how far the code can be followed on paper, not what happens at run time.
Unresolved boundary
Where a static path stops because the next call goes into an external library or cannot be resolved without running the code. It marks the edge of this analysis, not a defect in the repository.
Static relations
Calls and imports found in the source. "External or unresolved" relations point outside the analyzed files.
Module role
The analyzer's label for a file, inferred from how many calls go in and out (for example core, entry/orchestration, leaf). It describes a position in the call graph, not the authors' design.
Test-like files
Files whose names or locations look like tests. This analysis counts them; it does not run them.
Observed · inferred · author-claimed · unresolved
How each statement is supported: read directly from the analyzed files; derived by the analyzer from them; stated by the repository's authors (metadata, README); or not established by this analysis.
Verified
Two uses on these pages. In an analyzer record ("verified provenance", "a verified entrypoint") it means the record was read directly from the analyzed files, which these guides call observed; for an entrypoint, the __main__ guard text is present. Since the analyzer fix of 2026-10-04, a file that only has an entrypoint-like name such as cli.py or main.py is recorded as inferred; guides analyzed before that still call such a file verified, and it is still only a guess about how the file is used. It does not mean the code was run or tested. "Last verified" is the date the guide last passed the lab's checks against the analysis record of the stated revision; it is not a review of the repository itself.

What You Are Looking At

Repository metadata describes the project as an agent and multimodal framework typed end to end. GitHub platform metadata lists Python as the primary language, with an MIT license, a latest release tag of v2.54.0 published on October 3, 2026, and 20,385 stargazers. Static summary metrics indicate 4,082 analyzed files in total.

What It Needs

Three manifests produced dependency records: pydantic_evals/pyproject.toml, pydantic_graph/pyproject.toml, and pyproject.toml. Across these, 45 dependency records were captured.

From pydantic_evals/pyproject.toml, optional dependency logfire is recorded. From pydantic_graph/pyproject.toml, runtime dependencies include anyio, logfire-api, pydantic, and typing-inspection. In the root pyproject.toml, 40 development dependencies are recorded, including pytest, hypothesis, inline-snapshot, mypy, pyright, ruff, httpx, trio, fastmcp and mcp-types. Dependency extraction is limited to supported tables, leaving other manifest formats unparsed.

How It Starts

The repository inventory contains 65 total entrypoint records, of which 20 are detailed in the packet. Entrypoints carrying a main execution guard include script utilities such as scripts/check_cassettes.py and scripts/typecheck_changed.py calling sys.exit(main()), asyncio scripts such as scripts/upload_test_files.py calling asyncio.run(main()), test servers in tests/mcp_server.py calling mcp.run(), and automation scripts in .github/scripts/ invoking main(). In clai/clai/__main__.py, the guard executes _cli.cli_exit('clai').

The analyzer reports 580 bounded execution paths; 5 are listed, all originating at .claude/skills/testing-skill/parse_cassette.py:__main__. Each listed path terminates at unresolved boundaries such as ArgumentParser or local argument calls. Runtime execution behavior beyond these static paths is not established.

Where to Look First

Top-level directories include tests (2,501 files), src (498 files), pydantic_ai_slim (426 files), docs (351 files), and examples (63 files). The repository contains 2,514 test-like files.

The analyzer highlights project-level important files README.md, pyproject.toml, and LICENSE, alongside entrypoint files like .claude/skills/testing-skill/parse_cassette.py and automation scripts. Teaching records recommend beginning inspection with manifests and important symbols before tracing bounded paths, noting detected starting points in examples/pydantic_ai_examples/slack_lead_qualifier/app.py.

What This Analysis Cannot Tell You

Analysis is strictly static: dynamic imports, runtime dependency injection, monkey-patching, and framework dispatch are not resolved. Manifest extraction is partial and install or run commands are not verified. README extraction is line-based and author-claimed.

Analysis bounds capped repository relation extraction at 150,000 edges, leaving files after tests/harness/subagents/test_subagents_disk.py without extracted relations. Five files exceeding 400 kB were inventoried but skipped. Additionally, teaching records cite examples/pydantic_ai_examples/slack_lead_qualifier/app.py as a starting point, which is not present among the listed entrypoint records.

What this analysis could not establish

The writing model's own notes on the analysis record. Identifiers such as lim_3, exec_* or claim_… name records of that analysis; the claims table cites the same records.

  • 5 files larger than 400 kB were inventoried but not parsed.
  • Static relation extraction was truncated at the 150,000 repository cap.
  • An entrypoint record that teaching claims refer to is omitted from the listed entrypoint records.
Claims and evidence — 25 claims, 25 supported by an independent verifier

Every substantive statement above is a claim bound to grounding IDs of the analyzed revision. Global grounding IDs are namespaced by the analysis run.

Claim Epistemic status Verifier Grounding (global IDs)
c1 Repository metadata describes the project as covering AI agents, realtime voice, image generation, and embeddings typed end to end. author_claimed supported analysis_169ebfd40f3abfe7:meta_description
c2 Platform metadata records Python as primary language, an MIT license, release v2.54.0 published on 2026-10-03, and 20,385 stargazers. observed supported analysis_169ebfd40f3abfe7:meta_primary_language, analysis_169ebfd40f3abfe7:meta_license, analysis_169ebfd40f3abfe7:meta_latest_release, analysis_169ebfd40f3abfe7:meta_stars
c3 The repository summary indicates 4,082 analyzed files across the project. inferred supported analysis_169ebfd40f3abfe7:summary_repository
c4 Three pyproject.toml manifests yielded 45 total dependency records. observed supported analysis_169ebfd40f3abfe7:dep_1, analysis_169ebfd40f3abfe7:dep_2, analysis_169ebfd40f3abfe7:dep_3, analysis_169ebfd40f3abfe7:dep_4, analysis_169ebfd40f3abfe7:dep_5, analysis_169ebfd40f3abfe7:dep_6, analysis_169ebfd40f3abfe7:dep_7, analysis_169ebfd40f3abfe7:dep_8, analysis_169ebfd40f3abfe7:dep_9, analysis_169ebfd40f3abfe7:dep_10, analysis_169ebfd40f3abfe7:dep_11, analysis_169ebfd40f3abfe7:dep_12, analysis_169ebfd40f3abfe7:dep_13, analysis_169ebfd40f3abfe7:dep_14, analysis_169ebfd40f3abfe7:dep_15, analysis_169ebfd40f3abfe7:dep_16, analysis_169ebfd40f3abfe7:dep_17, analysis_169ebfd40f3abfe7:dep_18, analysis_169ebfd40f3abfe7:dep_19, analysis_169ebfd40f3abfe7:dep_20, analysis_169ebfd40f3abfe7:dep_21, analysis_169ebfd40f3abfe7:dep_22, analysis_169ebfd40f3abfe7:dep_23, analysis_169ebfd40f3abfe7:dep_24, analysis_169ebfd40f3abfe7:dep_25, analysis_169ebfd40f3abfe7:dep_26, analysis_169ebfd40f3abfe7:dep_27, analysis_169ebfd40f3abfe7:dep_28, analysis_169ebfd40f3abfe7:dep_29, analysis_169ebfd40f3abfe7:dep_30, analysis_169ebfd40f3abfe7:dep_31, analysis_169ebfd40f3abfe7:dep_32, analysis_169ebfd40f3abfe7:dep_33, analysis_169ebfd40f3abfe7:dep_34, analysis_169ebfd40f3abfe7:dep_35, analysis_169ebfd40f3abfe7:dep_36, analysis_169ebfd40f3abfe7:dep_37, analysis_169ebfd40f3abfe7:dep_38, analysis_169ebfd40f3abfe7:dep_39, analysis_169ebfd40f3abfe7:dep_40, analysis_169ebfd40f3abfe7:dep_41, analysis_169ebfd40f3abfe7:dep_42, analysis_169ebfd40f3abfe7:dep_43, analysis_169ebfd40f3abfe7:dep_44, analysis_169ebfd40f3abfe7:dep_45
c5 The manifest pydantic_evals/pyproject.toml lists optional dependency logfire (>=3.14.1). observed supported analysis_169ebfd40f3abfe7:dep_1
c6 The manifest pydantic_graph/pyproject.toml lists runtime dependencies anyio, logfire-api, pydantic, and typing-inspection. observed supported analysis_169ebfd40f3abfe7:dep_2, analysis_169ebfd40f3abfe7:dep_3, analysis_169ebfd40f3abfe7:dep_4, analysis_169ebfd40f3abfe7:dep_5
c7 The root pyproject.toml lists 40 dev dependencies including pytest, mypy, pyright, ruff, httpx, fastmcp, and mcp-types. observed supported analysis_169ebfd40f3abfe7:dep_6, analysis_169ebfd40f3abfe7:dep_7, analysis_169ebfd40f3abfe7:dep_8, analysis_169ebfd40f3abfe7:dep_9, analysis_169ebfd40f3abfe7:dep_10, analysis_169ebfd40f3abfe7:dep_11, analysis_169ebfd40f3abfe7:dep_12, analysis_169ebfd40f3abfe7:dep_13, analysis_169ebfd40f3abfe7:dep_14, analysis_169ebfd40f3abfe7:dep_15, analysis_169ebfd40f3abfe7:dep_16, analysis_169ebfd40f3abfe7:dep_17, analysis_169ebfd40f3abfe7:dep_18, analysis_169ebfd40f3abfe7:dep_19, analysis_169ebfd40f3abfe7:dep_20, analysis_169ebfd40f3abfe7:dep_21, analysis_169ebfd40f3abfe7:dep_22, analysis_169ebfd40f3abfe7:dep_23, analysis_169ebfd40f3abfe7:dep_24, analysis_169ebfd40f3abfe7:dep_25, analysis_169ebfd40f3abfe7:dep_26, analysis_169ebfd40f3abfe7:dep_27, analysis_169ebfd40f3abfe7:dep_28, analysis_169ebfd40f3abfe7:dep_29, analysis_169ebfd40f3abfe7:dep_30, analysis_169ebfd40f3abfe7:dep_31, analysis_169ebfd40f3abfe7:dep_32, analysis_169ebfd40f3abfe7:dep_33, analysis_169ebfd40f3abfe7:dep_34, analysis_169ebfd40f3abfe7:dep_35, analysis_169ebfd40f3abfe7:dep_36, analysis_169ebfd40f3abfe7:dep_37, analysis_169ebfd40f3abfe7:dep_38, analysis_169ebfd40f3abfe7:dep_39, analysis_169ebfd40f3abfe7:dep_40, analysis_169ebfd40f3abfe7:dep_41, analysis_169ebfd40f3abfe7:dep_42, analysis_169ebfd40f3abfe7:dep_43, analysis_169ebfd40f3abfe7:dep_44, analysis_169ebfd40f3abfe7:dep_45
c8 Dependency extraction parses supported PEP tables, leaving other manifest formats unparsed. observed supported analysis_169ebfd40f3abfe7:lim_3a
c9 The repository has 65 entrypoint records, with 20 listed in the packet. inferred supported analysis_169ebfd40f3abfe7:claim_2f4c621340bb
c10 Scripts scripts/check_cassettes.py and scripts/typecheck_changed.py contain execution guards calling sys.exit(main()). observed supported analysis_169ebfd40f3abfe7:py_entry_711b9329c9af, analysis_169ebfd40f3abfe7:py_entry_d76ec7f2d16d
c11 Scripts scripts/upload_test_files.py, scripts/verify_vertex_gcs.py, and scripts/verify_vertex_gcs_all_types.py execute asyncio.run(main()). observed supported analysis_169ebfd40f3abfe7:py_entry_4145baa0e887, analysis_169ebfd40f3abfe7:py_entry_6928137f6e36, analysis_169ebfd40f3abfe7:py_entry_28117ece2afb
c12 Test servers tests/mcp_server.py and tests/mcp_task_server.py call mcp.run() in their execution guards. observed supported analysis_169ebfd40f3abfe7:py_entry_bea51f9f5f67, analysis_169ebfd40f3abfe7:py_entry_3d7837eecc2b
c13 File clai/clai/__main__.py executes _cli.cli_exit('clai') within its main guard. observed supported analysis_169ebfd40f3abfe7:py_entry_ced396f72e87
c14 The analyzer reports 580 bounded execution paths; 5 are listed, all originating at .claude/skills/testing-skill/parse_cassette.py:__main__ and ending at unresolved boundaries. inferred supported analysis_169ebfd40f3abfe7:exec_bb0400b95179, analysis_169ebfd40f3abfe7:exec_9bbb24a4ce38, analysis_169ebfd40f3abfe7:exec_1fdb044ec706, analysis_169ebfd40f3abfe7:exec_06af0227393f, analysis_169ebfd40f3abfe7:exec_5f90db10d033
c15 Runtime execution behavior beyond the documented static paths is not established. unresolved supported analysis_169ebfd40f3abfe7:lim_1, analysis_169ebfd40f3abfe7:claim_4d30ade3e21e
c16 Top-level directories include tests (2,501 files), src (498 files), pydantic_ai_slim (426 files), docs (351 files), and examples (63 files). inferred supported analysis_169ebfd40f3abfe7:summary_repository
c17 The repository contains 2,514 test-like files according to summary maturity signals. inferred supported analysis_169ebfd40f3abfe7:summary_repository
c18 Files README.md, pyproject.toml, and LICENSE are classified as project-level important files. observed supported analysis_169ebfd40f3abfe7:important_1, analysis_169ebfd40f3abfe7:important_2, analysis_169ebfd40f3abfe7:important_3
c19 Teaching claims suggest starting with manifests and important symbols before tracing paths, noting examples/pydantic_ai_examples/slack_lead_qualifier/app.py. inferred supported analysis_169ebfd40f3abfe7:claim_e56db45165bf, analysis_169ebfd40f3abfe7:claim_72d2b935d53e, analysis_169ebfd40f3abfe7:claim_067c55f84d85
c20 Static analysis does not resolve dynamic imports, reflection, monkey-patching, or dynamic dispatch. observed supported analysis_169ebfd40f3abfe7:lim_1
c21 Installation, run, and build commands are not verified by this analysis. observed supported analysis_169ebfd40f3abfe7:lim_2
c22 README claims are extracted on a line basis and remain author-claimed. observed supported analysis_169ebfd40f3abfe7:lim_4a
c23 Extraction reached the repository limit of 150,000 relations, truncating relation edges for files after tests/harness/subagents/test_subagents_disk.py. observed supported analysis_169ebfd40f3abfe7:lim_6
c24 Five files exceeding the 400 kB boundary were inventoried but not parsed. observed supported analysis_169ebfd40f3abfe7:lim_6
c25 Teaching claims reference examples/pydantic_ai_examples/slack_lead_qualifier/app.py as a starting point, but that file is not included among the packet's listed entrypoint records. inferred supported analysis_169ebfd40f3abfe7:claim_72d2b935d53e, analysis_169ebfd40f3abfe7:claim_067c55f84d85

Sources, rights and disclosure · attribution-license-templates/v0.1

Rights notice. Original repository hosted on GitHub. Repository source code, documentation, names, media, and related project materials remain subject to the rights of their respective authors, contributors, and other rights holders and to applicable repository license terms.

Platform notice. GitHub is the source hosting platform for the linked repository. GitHub and related marks are trademarks of GitHub, Inc. EVEMISS Technology is not affiliated with or endorsed by GitHub unless explicitly stated otherwise.

How this page is produced. This page was produced using revision-aware repository analysis and AI-assisted editorial tooling. Technical claims are tied to the analyzed repository revision and may be revalidated when the source repository changes.

AI-assisted analysis. Reviewed by EVEMISS Technology through human–AI collaborative review. · Report a rights concern · Back to the overview