Pydantic AI 2.40 po zapnutí každou hodinu stahuje 1 678 cenových položek
Pydantic AI 2.40 přidala volitelné stahování cen modelů hned po startu a potom každou hodinu. Při našem testu se seznam rozšířil z 1 646 na 1 678 položek; výpadek stahování ponechal v paměti poslední platná data.
Pydantic AI přidala ve verzi 2.40.0 jednoduchou odpověď na rychle stárnoucí ceníky modelů. Funkce pydantic_ai.prices.update_in_background() stáhne po spuštění aplikace aktuální data a potom se pro ně vrací každých 3 600 sekund. Sama se nezapíná. Vývojář ji musí zavolat v kódu.

Balíček 2.40.0 na PyPI vznikl 5. září 2026 krátce po 00:18 UTC. Odpovídající poznámky k vydání jmenují vedle zvukových relací a událostí agenta právě aktualizaci cen. Nejde o změnu účtování u poskytovatele. Knihovna si pouze zpřesňuje vlastní odhad nákladů podle počtu tokenů a dalších účtovaných jednotek.
Živý seznam přidal 32 položek za pět dní
Pydantic AI ceny sama nesbírá. Používá knihovnu genai-prices 0.1.6, jejíž wheel byl na PyPI nahrán 2. září. Data přibalená v tomto souboru obsahují 41 poskytovatelů a 1 646 modelových položek. Spočítali jsme volání Provider a ModelInfo v modulu data.py, který má po rozbalení 867 260 bajtů.
Výchozí aktualizace míří na soubor data.json v hlavní větvi genai-prices. Večer 7. září měl 482 216 bajtů. Součet délek polí models u všech záznamů dal 1 678 položek od 42 poskytovatelů. Rozdíl tvořilo třicet položek nově vedeného GitHub Copilotu, jedna položka Googlu a jedna OpenAI.
Těch 1 678 položek není stejný počet jedinečných názvů modelů. Jeden model může mít samostatný záznam u více poskytovatelů a zprostředkovatelů. Číslo popisuje řádky ceníku, které knihovna prohledává, ne velikost trhu s modely. Právě poskytovatel je při výpočtu důležitý: tentýž model může prodávat několik služeb za různé ceny.
Jedno volání spustí jednu nit pro celý proces
Návrh změny číslo 4841 se připravoval od března a do hlavní větve se dostal 4. září. Obal v Pydantic AI má jen jedinou úlohu: vytvoří UpdatePrices, spustí ho a vrátí volajícímu. Ten může počkat na první stažení metodou wait() a při vypnutí aplikace zavolat stop().
Skutečnou práci dělá aktualizátor v genai-prices. Všechny jeho instance uvnitř jednoho procesu sdílejí jednu nit pojmenovanou genai_prices:update. Ověřili jsme to spuštěním dvou instancí nad vydanou verzí 0.1.6. Po startu druhé zůstala aktivní jediná nit. Zastavení první ji ponechalo běžet a zmizela až po zastavení druhé.
Nit je typu daemon, takže sama neudrží končící proces při životě. První požadavek na data má celkovou časovou mez deset sekund a na navázání spojení pět sekund. Volající kód mezitím pokračuje; čekání je výslovná volba. Kdo chce jinou adresu nebo interval, musí místo zkrácené funkce Pydantic AI vytvořit přímo genai_prices.UpdatePrices.
Chyba stahování nevymaže poslední ceník
Aktualizace nic neukládá na disk. Stažený seznam nahradí snímek v paměti procesu a zůstane tam i po zastavení aktualizační niti. Podle dokumentace genai-prices jde o volitelnou funkci a data se stahují přímo z GitHubu. Projekt uvádí, že tím nemůže sledovat požadavky ani sbírat telemetrii.
Výpadek jsme zkusili až po úspěšné aktualizaci. Druhý aktualizátor dostal neexistující adresu, server odpověděl kódem 404 a metoda wait() vyhodila chybu. V paměti přesto zůstalo všech 42 poskytovatelů a 1 678 položek z předchozího stažení. Zdrojový kód se chová stejně i u jiných chyb: zapíše je do logu, ale platný snímek nenahradí.
Aktuálnost má svou cenu. Aplikace důvěřuje proměnlivému souboru v hlavní větvi, nikoli datům připnutým ke konkrétní verzi. Stažený obsah projde převodem na typované záznamy, kontrola pevného otisku však v této cestě není. Pro vlastní zdroj lze nastavit jinou adresu. To se hodí tam, kde změna ceníku musí nejdřív projít interním schválením.
Odhad nákladů není strop účtu
Čerstvější seznam odstraňuje jednu příčinu neznámé ceny: model vyšel až po instalaci knihovny. Neřeší model, který v genai-prices není, nesprávně nahlášenou spotřebu ani budoucí změnu způsobu účtování. Pydantic AI proto dál popisuje pole cost jako nejlepší dostupný odhad. Když cenu nenajde, vrátí None, ne nulu.
Stejná výhrada platí pro cost_limit. Pokud se celý běh nepodaří ocenit, knihovna vydá CostNotFoundWarning; požadavek tím automaticky nezíská spolehlivý finanční strop. Dokumentace radí spojit cenový limit s omezením počtu požadavků nebo s vlastními limity poskytovatele. Hodinové stahování tedy zmenšuje slepé místo v odhadu. Účetní pojistku z něj nedělá.
Zdroje
- Pydantic AI 2.40.0 – poznámky k vydání
- Návrh změny číslo 4841 – rozhraní nové funkce a testy
- Dokumentace UpdatePrices – interval, sdílená nit a chování při chybě
- Živý soubor cen – vstup pro vlastní přepočet položek
- genai-prices 0.1.6 na PyPI – vydaný balíček použitý při testu