Ollama 0.33.3 čte doporučené hodnoty vzorkování přímo ze souboru modelu
Ollama do teď používala vlastní výchozí teplotu a top_p vždycky, když je nepřepsal Modelfile nebo požadavek. Verze 0.33.3 z 2. září 2026 se nejdřív podívá, co si o sobě napsal sám vydavatel modelu, a devět voleb umí přečíst z metadat GGUF nebo ze souboru generation_config.json. Ve dvaceti modelech z knihovny Ollamy ale ty klíče nese jediný.
Kdo si pouští jazykový model u sebe přes Ollamu, dostával jeho doporučené nastavení vzorkování jen oklikou. Teplotu, top_p nebo postih za opakování musel k modelu někdo dopsat do Modelfilu; hodnoty, které vydavatel zapsal přímo do souboru s vahami, server přehlížel a sáhl po svých vlastních. Verze 0.33.3 vydaná 2. září 2026 je začala číst.

Nová vrstva se vsunula mezi Modelfile a výchozí hodnoty serveru
Celý zásah je návrh změny 16471. Otevřel ho 3. června 2026 Daniel Hiltgen, sloučený byl 1. září a o den později vyšel ve verzi 0.33.3. Sahá na jedenáct souborů a přidává mezi ně nový, types/model/generation.go.
Volby požadavku vznikají v Ollamě vrstvením a od 0.33.3 jsou ty vrstvy čtyři. Úplně dole leží výchozí hodnoty serveru, nad nimi nově to, co si k sobě napsal vydavatel modelu, pak parametry z Modelfilu a nahoře to, co pošle klient v požadavku. V kódu je to čtveřice volání ve funkci modelOptions v souboru server/routes.go, v přesně tomhle pořadí.
Dno té hromady se nemění: DefaultOptions() v api/types.go pořád vrací teplotu 0,8, top_k 40, top_p 0,9 a postih za opakování 1,0, tedy vypnutý – od srpna. Model, který si nic neurčí, tam dopadne stejně jako dřív.
Devět voleb a dvě místa, odkud se berou
Nový soubor je v podstatě jedna tabulka. Ke každé z devíti voleb Ollamy drží jméno klíče v metadatech GGUF a jedno nebo víc jmen v souboru generation_config.json, který si s sebou nesou modely stažené z Hugging Face ve formátu safetensors.
| volba Ollamy | klíč v GGUF | jméno v generation_config.json |
|---|---|---|
top_k | general.sampling.top_k | top_k |
top_p | general.sampling.top_p | top_p |
min_p | general.sampling.min_p | min_p |
typical_p | general.sampling.typ_p | typical_p |
temperature | general.sampling.temp | temperature |
repeat_last_n | general.sampling.penalty_last_n | repeat_last_n, penalty_last_n |
repeat_penalty | general.sampling.penalty_repeat | repetition_penalty, repeat_penalty, penalty_repeat |
presence_penalty | general.sampling.penalty_present | presence_penalty |
frequency_penalty | general.sampling.penalty_freq | frequency_penalty |
Obě cesty se přitom uplatní jinde. Metadata GGUF se čtou při načtení modelu, kdežto generation_config.json se přebírá už při zakládání modelu ze safetensorů, tedy v běhovém prostředí MLX na Apple Siliconu.
Blok v GGUF je z listopadu 2025
Ollama si ta jména nevymyslela. Klíče general.sampling.* zavedl do llama.cpp návrh 17120 nazvaný „model-embedded sampling parameters“, sloučený 25. listopadu 2025. Jeho seznam má dvanáct položek a llama.cpp je v common/common.cpp uplatňuje na stejném principu: hodnotu z modelu vezme jen u parametru, který uživatel neurčil na příkazové řádce.
Mezi ty dvě sady je vidět skulinu. Ollama čte devět klíčů, llama.cpp jich zná dvanáct, ale shodných je jen šest. Chybí v Ollamě hlavně general.sampling.sequence, tedy pořadí vzorkovačů – model tak může doporučit hodnoty, ale ne postup, ve kterém se použijí. Bez odezvy zůstávají i klíče pro XTC a mirostat, které Ollama jako volby nemá.
Tři klíče, které zatím nemá kdo zapsat
Opačným směrem je ta neshoda zajímavější. Klíče general.sampling.typ_p, general.sampling.penalty_present a general.sampling.penalty_freq v llama.cpp nejsou – ani ve výčtu v src/llama-arch.cpp, ani v konstantách zapisovací knihovny gguf-py. Do souboru GGUF je tedy převod z Hugging Face nezapíše a Ollama je bude hledat nadarmo, dokud se ta jména někde nezavedou. Typickou pravděpodobnost a oba penalizační parametry umí model po téhle cestě předat jedině tehdy, když jde o safetensors s generation_config.json.
Ve dvaceti modelech z knihovny Ollamy ty klíče nese jediný
Kolik souborů má nová funkce co číst, jde změřit. Modely z knihovny Ollamy leží v otevřeném registru na registry.ollama.ai, manifest vydá otisk vrstvy s vahami a hlavička GGUF stojí na začátku toho souboru, takže se dá přečíst rozsahovým dotazem HTTP bez stahování celého modelu. Přečetl jsem takhle značku latest u dvaceti modelů: qwen3, qwen3.5, qwen3.8, qwen2.5-coder, gemma3, gemma4, embeddinggemma, llama3.1, llama3.2, llama4, phi4, mistral, mistral-small3.2, deepseek-r1, granite3.3, smollm2, gpt-oss, llava, nomic-embed-text a codellama. Na hlavičku stačilo 4 až 17 MB na model.
Klíč general.sampling.* nese jeden jediný z nich, qwen3.8: top_k 20, temp 1,0 a top_p, které je v souboru uložené jako čtyřbajtové desetinné číslo, takže se přečte jako 0,949999988079071. Ostatních devatenáct modelů má tenhle prostor prázdný.
Chování se přitom nezmění ani u toho jednoho. Vrstva s parametry Modelfilu má u qwen3.8 tytéž tři hodnoty – top_k 20, temperature 1 a top_p 0,95 – a stojí nad metadaty, takže vyhrává ona. Nová vrstva pod ní zatím jen opakuje, co už bylo o patro výš.
Vypovídá to spíš o dnešní knihovně než o té změně. Parametry k modelům v ní vypisuje Ollama sama do Modelfilu a dělá to důkladně: qwen3 má takhle uloženou teplotu 0,6, top_k 20 a top_p 0,95, gemma3 teplotu 1 a top_k 64, qwen3.5 dokonce postih za přítomnost 1,5 – hodnotu, pro kterou právě žádný zapisovatelný klíč v GGUF není. Nová cesta je proto užitečná hlavně tam, kde Ollama ruku nepřiloží: u modelu, který si uživatel stáhne nebo převede sám.
Kolik takových souborů bude, rozhoduje převodník. Ten se v llama.cpp opravil 24. srpna 2026 tak, aby doporučený postih za opakování hledal i pod jménem repetition_penalty, které nastavení modelů z Hugging Face opravdu používá. Klíč, který od té doby v nových souborech vzniká, je přesně ten, po kterém Ollama od 1. září sahá.
Zdroje
- Ollama v0.33.3 a návrh změny 16471
- types/model/generation.go ve značce v0.33.3
- llama.cpp, návrh změny 17120 a src/llama-arch.cpp
- vlastní čtení hlaviček GGUF z registru Ollamy, 4. září 2026