Skip to content

Pydantic AI

Installation

Pydantic AI is a core Kedi dependency:

uv add kedi

Provider credentials and optional provider packages follow Pydantic AI's model requirements.

Model Names

Select the adapter and a Pydantic-style or LiteLLM-style model:

> adapter: pydantic
> model: openai:gpt-4o-mini

Strings using vendor/model are normalized to Pydantic's model naming form. An existing Pydantic AI Model may be passed to PydanticAdapter directly.

Model Settings

Supported settings are max_tokens, temperature, top_p, timeout, parallel_tool_calls, tool_choice, seed, presence_penalty, frequency_penalty, logit_bias, stop_sequences, extra_headers, thinking, service_tier, and extra_body.

> settings:
    temperature: 0.2
    max_tokens: 2048
    parallel_tool_calls: true

max reasoning effort maps to Pydantic AI's xhigh.

CodeMode

Use > codemode: enabled to replace application tool schemas with Kedi's search_tools, get_tool_schema, and execute_code controls:

> adapter: pydantic
> codemode: enabled

The outer capability wraps constructor, caller, scoped Kedi, and local MCP toolsets together. Nested calls retain validation, approval, required-tool, telemetry, cancellation, and artifact behavior. Provider-native MCP and external deferred approval are rejected while CodeMode is active. See CodeMode for the complete contract.

Structured Outputs

Kedi builds a dynamic Pydantic model from each output field:

~Finding(severity: str, message: str)

>> Inspect <code> and return [findings: list[Finding]].

Field descriptions from Annotated[T, "description"] are preserved. Pydantic AI produces and validates the result before Kedi publishes captured fields.

Python and Procedure Tools

Python @kedi.tool functions and Kedi procedures selected by > use: become native Pydantic AI tools for one lexical run. Registration is context-local, so tools do not leak between concurrent calls.

MCP Toolsets

All Kedi MCP transports are mapped to Pydantic AI toolsets:

  • stdio with command, args, and env;
  • SSE with URL and headers;
  • streamable HTTP with URL and headers.

Application and MCP toolsets are approval-required before execution.

Approval Integration

Pydantic's deferred-tool capability is used to resolve Kedi approval requests. Read-only calls pass automatically; mutating and sensitive calls flow through the active static/dynamic policy. Edited arguments are supplied as Pydantic tool overrides after validation.

Nested subagent policies form a ceiling: a child cannot widen a parent's restriction.

Foreground and Background Subagents

Pydantic supports both modes and native conversation resume. Usage limits are translated to Pydantic AI request, tool-call, and token limits. Child tool, MCP, skills, model, and instruction scopes remain isolated.

Usage and Retry Behavior

Pydantic run usage is reported to Kedi's subagent budget observer. The adapter tracks requests, tool calls, and input/output/total tokens.

subagent_failure_policy="fail_closed" is the default. "recover" exposes a sanitized child error to the parent instead of failing the parent run.