Ollama 0.33.1 začala v MLX skutečně vynucovat JSON Schema
Ollama uměla přijmout JSON Schema i u modelů v MLX, její runner se jím však neřídil. Verze 0.33.1 to mění: XGrammar před každým krokem zakáže tokeny, které by porušily zadanou strukturu. Podle měření autorů Ollamy běžel 27miliardový model se schématem 32 tokenů za sekundu místo 65, rozdíl ale připadá na vypnuté spekulativní dekódování.

Ollama 0.33.1, vydaná 26. srpna 2026, přidala do svého MLX runneru podporu strukturovaného výstupu. Nejde jen o další zápis do seznamu funkcí. Parametr format pro JSON nebo JSON Schema runner přijímal už dřív, ale podle popisu opravy jej nevynucoval. Program žádající strojově čitelnou odpověď tak mohl bez varování dostat obyčejnou větu.
Požadavek prošel, omezení se k modelu nedostalo
Rozdíl zachytil v červnu uživatelský test Ollamy 0.30.6 na macOS. Stejný pokyn „Say hi“ a stejné schéma dostaly běžná a MLX varianta modelů Qwen 3.5 a Gemma 4. Běžné varianty vrátily objekt JSON s požadovaným polem, obě MLX varianty odpověděly pozdravem v přirozeném jazyce. Hlášení se uzavřelo až s novou implementací ve verzi 0.33.1.
To je podstatný rozdíl proti chybě při zpracování odpovědi. Klient poslal schéma správně a server požadavek přijal, jen se omezení ztratilo na cestě k MLX. Aplikace, která výsledek rovnou předávala parseru nebo dalšímu nástroji, se proto nemohla opřít ani o syntakticky platný JSON. MLX runner jsme dříve popisovali u modelu Muse Glimmer; tehdy šlo o to, na jakém počítači a s jak velkými vahami běží. Nová změna se týká rozhraní mezi modelem a programem, který jeho odpověď čte.
Neplatný token dostane pravděpodobnost nula
Ollama problém neopravila dodatečnou kontrolou hotového textu. Do MLX sestavení přidala knihovnu XGrammar 0.2.5 a omezení uplatňuje už při dekódování. V každém kroku se sestaví binární maska nad slovníkem modelu. Logity tokenů, které by v daném místě porušily gramatiku, maska nastaví na záporné nekonečno; po převodu na pravděpodobnosti tak mají nulu a vzorkovač je nemůže vybrat.
Tento postup popisuje nezávisle na Ollamě také dokumentace XGrammar. Stavový matcher po každém přijatém tokenu připraví masku pro token následující. Tím hlídá i konec generování: ukončovací token dovolí teprve ve chvíli, kdy je objekt podle gramatiky celý.
V Ollamě jsou dvě podoby omezení. Hodnota "json" vyžádá objekt JSON, celé JSON Schema může navíc určit názvy polí, jejich typy, povolené hodnoty a zákaz dalších položek. Integrační test nové verze záměrně posílá modelu pokyn k obyčejnému pozdravu, ale současně schéma s poli color a count. Výsledek musí navzdory pokynu projít schématem při běžném i proudovém výstupu a při nenulové teplotě.
Správný tvar ještě neznamená pravdivý obsah
Maska řeší strukturu, nikoli věcnou správnost. Když schéma dovoluje libovolný řetězec, může do něj model pořád napsat nesmysl. Ani povinné číselné pole nezaručuje, že model číslo správně spočítal. XGrammar proto doporučuje požadovaný tvar popsat také v samotném pokynu: omezení zasahuje až do vzorkování, zatímco dobře formulovaný pokyn posune rozdělení pravděpodobností správným směrem už před maskováním.
Nová součást se dodává jako dynamická knihovna ollama_xgrammar vedle MLX. Když v instalaci chybí, obyčejná inference má dál fungovat, ale strukturovaný požadavek skončí výslovnou chybou. To je bezpečnější než dřívější tiché pokračování bez omezení: aplikace pozná, že slíbený formát nemůže dostat.
Poloviční rychlost nezpůsobila samotná gramatika
Autor změny připojil vlastní měření na čipu M5 Max s modelem qwen3.8:27b-mlx, seedem 42, vypnutým přemýšlením a výstupem dlouhým 256 tokenů. Bez omezení naměřil přibližně 65 tokenů za sekundu, se schématem seznamu knih 32 tokenů za sekundu. Čas před prvním tokenem zůstal kolem 70 milisekund. Jde o měření autorů Ollamy, ne o nezávislý test.
Samotné porovnání 65 proti 32 by svádělo k závěru, že gramatika rychlost rozpůlila. Kontrolní běh bez spekulativního dekódování však dosáhl stejných 32 tokenů za sekundu a dvojice běhů se podle autora lišila o méně než 0,1 tokenu za sekundu. Strukturovaný režim totiž zatím návrhový model nepoužívá. Naměřená ztráta tedy připadá na vypnutou spekulaci; měřitelnou režii kompilace gramatiky autor v čase před prvním tokenem nenašel.
Pro uživatele z toho plyne jednoduchá hranice verzí. Kdo posílá JSON Schema modelům s příponou -mlx, potřebuje Ollamu 0.33.1 nebo novější. Tvar požadavku se nemění, mění se jeho účinek. Rychlost se zatím může proti obyčejnému generování snížit tam, kde model využíval spekulativní dekódování; z publikovaného jediného měření nelze odvodit, že stejný poměr platí pro jiné modely nebo počítače.
Zdroje
- Ollama 0.33.1, poznámky k vydání, 26. srpna 2026
- mlxrunner: add structured output support, implementační commit, testy a měření autorů Ollamy
- Structured outputs appear to be ignored for MLX models, uživatelské hlášení s reprodukcí
- Constrained Decoding, dokumentace XGrammar k masce tokenů a vzorkování
- XGrammar 0.2.5, vydání knihovny použité Ollamou