What's Changed
🚀 Features
- Add
sanitize_messagesfor inbound message-history hardening by @dsfaccini in #6169 - Round-trip multimodal tool returns through the AG-UI and Vercel AI adapters (history and streaming) by @dsfaccini in #5255
🐛 Bug Fixes
- Document why
_clean_message_historymerges consecutiveModelRequests regardless ofconversation_id/metadataby @adtyavrdhn in #6221 - Align LLMJudge
_build_promptsection order with its few-shot examples by @immuhammadfurqan in #6111 - Reject duplicate deferred tool call IDs by @hramezani in #6241
- Fix MoonshotAI Kimi
thinkingsupport and add models toKnownModelNamesby @SuperMarioYL in #6208 - fix(dbos,prefect): preserve runtime
toolsetsin durable runs by @Trollgeir in #6076 - Exclude first-class token counts from
gen_ai.usage.details.*OTel attributes to fix double-counting by @adtyavrdhn in #6244 - fix(dbos,prefect): preserve runtime event stream handlers by @Trollgeir in #6093
- Reject non-object agent spec inputs by @Ghraven in #5820
- Run the sync streaming wrappers on an
anyioportal thread; fix asyncstream_textearly-break teardown by @DouweM in #6199 - fix(bedrock): only synthesize a leading user message for models that require it by @DouweM in #6255
- fix(bedrock): correct
bedrock_supported_media_kinds_in_tool_returnsfor Meta, Mistral, and Qwen by @DouweM in #6254
📦 Dependencies
- Avoid Python 3.14
numpysource builds in examples by @hramezani in #6246
New Contributors
- @pragnyanramtha made their first contribution in #5490
- @Sehlani042 made their first contribution in #6200
- @ChunkyTortoise made their first contribution in #5739
Full Changelog: v2.4.0...v2.5.0