v2.28.0

Fosowl/agenticSeekv2.28.0Aug 12, 2026by dsfaccini

AI Summary

This release introduces major features for realtime speech-to-speech support, adds the Crusoe provider, and patches a high-severity security vulnerability in the development web chat UI.

Key Highlights

  • Add realtime speech-to-speech support with Agent.realtime()
  • Add Crusoe provider
  • Add browser WebRTC + server sideband support for realtime speech-to-speech
  • Fixes high-severity web chat UI security vulnerability (CORS/Content-Type)

New Features

  • Add realtime speech-to-speech support with Agent.realtime()
  • Add Crusoe provider
  • Add browser WebRTC + server sideband support for realtime speech-to-speech

Full Release Notes

### 🛡️ Security

Fixes a high-severity vulnerability in the development web chat UI (`Agent.to_web()`, `clai web`): the chat endpoint didn't check the request's content type, so a plain cross-origin request from a website open in the developer's browser could reach the endpoint without a CORS preflight and trigger the served agent to run and execute its tools with the local process's privileges and credentials. The endpoint now requires `Content-Type: application/json` and rejects other requests before the body is parsed and before the agent runs. See [GHSA-h4xc-3qfq-jf93](https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-h4xc-3qfq-jf93). Patched in `2.28.0` (v2) and `1.107.4` (v1).


## What's Changed
### 🚀 Features
* Add realtime speech-to-speech support with `Agent.realtime()` by @DouweM in https://github.com/pydantic/pydantic-ai/pull/6324
* Add Crusoe provider by @acheamponge in https://github.com/pydantic/pydantic-ai/pull/6457
* Add browser WebRTC + server sideband support for realtime speech-to-speech by @DouweM in https://github.com/pydantic/pydantic-ai/pull/6676
### 🐛 Bug Fixes
* fix(bedrock): attach a leading `CachePoint` to the preceding user message instead of raising by @Diwak4r in https://github.com/pydantic/pydantic-ai/pull/7071
* Test cancellation of concurrent `PeekableAsyncStream` pulls by @mikemikimike in https://github.com/pydantic/pydantic-ai/pull/7023
* Settle in-flight state and report `state_restored` honestly on realtime reconnect by @DouweM in https://github.com/pydantic/pydantic-ai/pull/7379
* Only accept JSON request bodies on the web UI chat endpoint by @DouweM in https://github.com/pydantic/pydantic-ai/pull/7382
* Await callback results uniformly via a shared `await_maybe` helper by @DouweM in https://github.com/pydantic/pydantic-ai/pull/7265
* Fix `safe_download` Host header dropping non-default port by @pydanty[bot] in https://github.com/pydantic/pydantic-ai/pull/7348
* Serialize AG-UI dict tool-call deltas with Pydantic Core by @bferanmi806-sketch in https://github.com/pydantic/pydantic-ai/pull/7221
### 📦 Dependencies
* Add the `cerebras` optional dependency group by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/7387

## New Contributors
* @Diwak4r made their first contribution in https://github.com/pydantic/pydantic-ai/pull/7071
* @mikemikimike made their first contribution in https://github.com/pydantic/pydantic-ai/pull/7023
* @acheamponge made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6457
* @bferanmi806-sketch made their first contribution in https://github.com/pydantic/pydantic-ai/pull/7221

**Full Changelog**: https://github.com/pydantic/pydantic-ai/compare/v2.27.1...v2.28.0