What's Changed
⚠️ Compatibility Notes
- Default
CodeModetodynamic_catalog=True, so a revealed tool is appended instead of rewriting the cached prompt by @DouweM in #11358 - Pass the Gemini Live reconnect replay to
GoogleRealtimeConnection'sdialas a keyword-onlyreplayargument by @DouweM in #11515 - Give Harness
LLMRemindera defaultinterval=10instead of generating on every request by @DouweM in #11641 - Replay signed and encrypted history data to providers with the same
canonical_systemby @DouweM in #11504 - Let a deferred
CombinedCapabilityload as one capability, with members keeping their global ordering by @adtyavrdhn in #10321 - End a GPT-Live reply that delegated at Live's next pause instead of mid-sentence when the backend answers by @DouweM in #11250
- Say what the
<system>tag means and escape it in user and tool text on models without mid-conversation system messages by @DouweM in #11506
🚀 Features
- Add
task_timeouttoDataset.evaluateto bound each task attempt by @dmontagu in #10291 - Support
ag-ui-protocol1.0 by @adtyavrdhn in #8627 - Default
CodeModetodynamic_catalog=True, so a revealed tool is appended instead of rewriting the cached prompt by @DouweM in #11358 - Pass the Gemini Live reconnect replay to
GoogleRealtimeConnection'sdialas a keyword-onlyreplayargument by @DouweM in #11515 - Add OpenAI
gpt-6.1-terramodel support by @dsfaccini in #11393 - Add an IPython Code Mode (
IPythonCodeMode) alongside the Monty-basedCodeModeby @mpfaffenberger in #11570 - Give Harness
LLMRemindera defaultinterval=10instead of generating on every request by @DouweM in #11641 - Add a
DetectLoopscapability to interrupt repeated-action loops by @mpfaffenberger in #11471 - Add
manage_message_historyto UI adapters so a server-held history isn't sent to the model twice by @DouweM in #11431 - Keep strict schemas within Anthropic's and OpenAI's complexity limits, falling back to non-strict output where no mode was chosen by @DouweM in #11464
- Add a public
pydantic_ai.framingmodule withwrap,neutralize_tagsandregister_tag, so extensions can frame their own tags by @DouweM in #10957 - Replay signed and encrypted history data to providers with the same
canonical_systemby @DouweM in #11504 - Add
PostgresSpendStoreso harnessSpendLimitsbudgets can be shared through PostgreSQL by @DouweM in #11527
🐛 Bug Fixes
- Let a deferred
CombinedCapabilityload as one capability, with members keeping their global ordering by @adtyavrdhn in #10321 - List the modules Monty 1.2-1.4 added in the
CodeModerun_codedescription by @mpfaffenberger in #11459 - Require
mistralai>=3.1.0and drop the legacyhttpximport soMistralModelimports on fresh installs by @adtyavrdhn in #11549 - Keep the rate-limit category of Azure
too_many_requestsResponses failures onopenai>=3.32.0by @dsfaccini in #11532 - Run
ToolOutputLimitsspill writes in adurable_operationso replays do not write them again by @mpfaffenberger in #11460 - Record the instructions a
before_model_requesthook sent when it rewrote the history with a copy of the request by @DouweM in #11501 - State a deferred capability's instructions on the request where a
before_model_requesthook loaded it by @DouweM in #11516 - Escape framing tags consistently in
BackgroundTools,RepoContext,TrajectoryJudgeandPlanningframes by @DouweM in #11530 - Record a
thinkingchange after an unansweredModelSettingsDeltaPartinstead of replacing it, so UI streams and hook-rebuilt requests keep it by @DouweM in #11514 - Make typed turns on Gemini
gemini-robotics-errealtime models see the image sent just before them by @DouweM in #11484 - End a GPT-Live WebRTC sideband session cleanly when the browser hangs up by @DouweM in #11435
- End a GPT-Live reply that delegated at Live's next pause instead of mid-sentence when the backend answers by @DouweM in #11250
- Withdraw a pending batch request when the run doesn't end with its
PendingModelResponseby @DouweM in #11517 - Send per-message effort changes through
AsyncAnthropicBedrockMantleon Claude Opus 5.5 by @DouweM in #11486 - Enable thinking-block binding recovery on
AsyncAnthropicBedrockMantleby @DouweM in #11487 - Stop offering
AdvisorToolonAsyncAnthropicBedrockMantle, which rejects it by @DouweM in #11488 - Keep the stored
CodeModeREPL state whenrepl_storeload fails, instead of saving a fresh REPL over it by @mpfaffenberger in #11483 - Fix
RuntimeError: coroutine ignored GeneratorExitand an escapingKeyboardInterruptonAgent.iter()teardown by @pydanty in #10258 - Return a
wrap_runoron_run_errorrecovery result fromrun_stream()instead of raisingAgentRunErrorby @DouweM in #11571 - Say what the
<system>tag means and escape it in user and tool text on models without mid-conversation system messages by @DouweM in #11506 - Escape framing tags consistently in the
SummarizingCompactionsummarizer transcript by @DouweM in #11583 - Enforce
allowed_patternson the real path whensearch_filestargets a single symlinked file by @mpfaffenberger in #11639 - Normalize bare
Nonetype arguments inDatasetby @pydanty in #11254 - Stop offering
WebSearchToolandWebFetchToolonAsyncAnthropicBedrockMantle, which rejects them by @DouweM in #11489 - Don't commit an automatic
SummarizingCompactionsummary that would make the history larger by @DouweM in #11649 - Clear the caption in
stream_transcripts(delta=True)when a transcript is corrected to empty by @DouweM in #11667 - Evaluate runs with every
OnlineEvaluationcapability on an agent, not just the outermost by @DouweM in #11663 - Omit realtime span
model_settingswheninclude_content=Falseby @DouweM in #11668 - Call
AsyncAnthropicBedrockMantlethe Bedrock Messages API, not Claude Platform on AWS, in comments and docstrings by @DouweM in #11482 - Record the provider item ID on the model's realtime
SpeechPart.idby @DouweM in #11675
Full Changelog: v2.62.0...v2.63.0