Pydantic AI 2.37 už váže volání nástroje k oznámené zprávě
Pydantic AI při odpovědi tvořené jen voláním nástroje posílala odkaz na zprávu, kterou proud AG-UI nikdy nezahájil. Verze 2.37.0 přidává prázdný pár začátku a konce zprávy; assistant-ui 0.0.56 z něj ovšem udělala prázdný textový díl.

Balíček Pydantic AI 2.37.0 se na PyPI objevil 1. září 2026 krátce po 02:07 UTC. Mezi opravami je nenápadná změna proudu událostí AG-UI: volání nástroje už neodkazuje na zprávu asistenta, o které klient předtím nedostal žádnou zprávu.
AG-UI je protokol pro průběžné předávání dění mezi agentem a uživatelským rozhraním. Odpověď v něm není jeden hotový blok. Klient dostává sled událostí: začátek zprávy, kusy textu, volání nástroje, jeho argumenty a výsledek. Identifikátory drží tyto části pohromadě i po uložení a opětovném načtení konverzace.
Volání nástroje ukazovalo na zprávu, která v proudu nebyla
Chybu popsal 17. srpna uživatel smartly-petri v hlášení číslo 7527. Reprodukce nepotřebovala žádný model ani přístup k poskytovateli. Stačil umělý proud, v němž první odpověď obsahovala jen volání nástroje a další odpověď text.
Pydantic AI si pro první odpověď vytvořila interní identifikátor X. Událost TOOL_CALL_START ho poslala jako parentMessageId, jenže předtím nepřišel TEXT_MESSAGE_START se stejným X. Až konečný text začal novou zprávu s jiným identifikátorem Y.
[
{"type": "TOOL_CALL_START", "parentMessageId": "X"},
{"type": "TOOL_CALL_RESULT"},
{"type": "TEXT_MESSAGE_START", "messageId": "Y"}
]
Klient si proto musel rodičovskou zprávu pro volání nástroje domyslet. Při přehrání historie pak syntetický identifikátor neseděl na identifikátor, který znal server. Podle reprodukce mohl server staré volání nástroje a jeho výsledek znovu poslat modelu, protože je nerozeznal od nové části rozhovoru. Chování bylo doložené v Pydantic AI 2.31.0 a v době hlášení zůstávalo i v tehdejším hlavním stromu.
Oprava přidává prázdný začátek a konec zprávy
Oprava číslo 7699 byla sloučená 30. srpna a projekt ji zařadil do vydání 2.37.0. Před prvním voláním nástroje teď odešle dvě události navíc. Zprávu s identifikátorem X otevře a hned zavře, aniž mezi ně vloží text. Následující TOOL_CALL_START tak odkazuje na identifikátor, který klient skutečně viděl.
[
{"type": "TEXT_MESSAGE_START", "messageId": "X"},
{"type": "TEXT_MESSAGE_END", "messageId": "X"},
{"type": "TOOL_CALL_START", "parentMessageId": "X"}
]
Tvar odpovídá definicím událostí AG-UI. TEXT_MESSAGE_START nese jedinečný identifikátor zprávy a roli asistenta. TOOL_CALL_START má samostatný identifikátor volání a volitelný parentMessageId. Samotný protokol tedy rodiče nevyžaduje; Pydantic AI ho používá, a proto musí klientovi oznámit, co tento identifikátor znamená.
Prázdná zpráva se zavře okamžitě. Oprava vysvětluje proč: ověřovač událostí v typescriptovém klientu AG-UI odmítá RUN_FINISHED, pokud zůstane textová zpráva otevřená. Vlastní načítání historie v Pydantic AI prázdný obsah zahodí, takže se do zpráv posílaných modelu nepřidá prázdná textová část. Nový regresní test kontroluje jak shodu obou identifikátorů, tak toto opětovné načtení.
Prázdný obal odhalil rozdíl mezi klienty
Oprava identifikátorů má vedlejší účinek, pokud klient bere každou otevřenou textovou zprávu jako skutečný text. Samostatné hlášení projektu assistant-ui ukázalo na zveřejněné verzi @assistant-ui/react-ag-ui 0.0.56, že z prázdného páru vznikne díl {"type": "text", "text": ""}.
Při kopírování zprávy se všechny textové díly spojovaly dvěma konci řádků. Prázdný díl proto přidal na začátek kopírovaného textu, exportu do Markdownu i vstupu pro převod textu na řeč prázdný řádek. Samotné volání nástroje se přitom přiřadilo správně; problém byl jen v tom, že klient prázdný obal zachoval jako obsah.
Oba projekty tím popisují dvě různé povinnosti klienta. Identitu zprávy musí zachovat, aby šla historie beze změny přehrát. Prázdný text ale nemá vydávat za obsah. Pydantic AI 2.37.0 řeší první část a vlastní adaptér má ošetřenou i druhou. Cizí klient, který AG-UI zpracovává po svém, potřebuje stejný případ zahrnout do testů.
Zdroje
- Poznámky k vydání Pydantic AI 2.37.0, zařazení opravy do vydání
- Původní hlášení chyby, reprodukce a dopad na přehrání historie
- Opravný návrh Pydantic AI, změna proudu událostí a regresní test
- Definice událostí v AG-UI, pole textové zprávy a volání nástroje
- Reprodukce v assistant-ui 0.0.56, prázdný díl při kopírování, exportu a převodu na řeč
- Záznam balíčku na PyPI, verze a čas nahrání souborů