
Release-noten för Ollama v0.40.14 säger att OpenAI-kompatibla vägar inte längre skriver över en modells paketerade samplingsvärden: klienter som inte skickar temperature eller top_p får ”the model's own values instead of 1.0, matching /api/chat”. Artikeln gäller lokala modeller och en lokal server på http://localhost:11434/v1/. Molnmodeller har vi inte granskat.
Ett fält som saknas i requesten är nu osatt, och då avgör modellen. Ett fält med ett värde, också 0, avgör klienten. Därför räcker det inte att veta vilken Ollama-version du kör. Du behöver också se vad klienten faktiskt skickar.
Vad ändringen gör, väg för väg
Pull request 19432 går längre än release-noten. Den namnger /v1/chat/completions, /v1/completions och /v1/responses, och ger exempel: lfm3 har temperature 0.1 men kördes med 1.0 på /v1, och deepseek-r1 med 0.6 och 0.95 fick 1.0 och 1.0. Tabellen bygger på PR-texten och själva kodändringen.
| Klienten | Till och med v0.40.13 | Från v0.40.14 |
|---|---|---|
Utelämnar temperature | 1.0 på alla tre vägarna | Modellens värde |
Utelämnar top_p | 1.0 på chat och completions; /v1/responses lämnade fältet osatt | Modellens värde |
Utelämnar straffen på /v1/completions | Alltid 0 för frequency_penalty och presence_penalty | Modellens värde |
| Skickar ett värde | Värdet, utom top_p 0 på completions, som blev 1.0 | Värdet, också 0 |
Två detaljer står bara i koden. Raden om /v1/responses visar att release-noten är något bredare än ändringen, eftersom just den vägen inte tvingade top_p till 1.0. Testerna i samma ändring behandlar dessutom null som utelämnat, och svaret från /v1/responses har null i temperature och top_p när begäran lämnade dem åt modellen. Läs alltså inte svaret som ett kvitto på vilket värde som användes.
Sidan om OpenAI-kompatibilitet listar båda fälten som stödda men anger, vid kontrollen 5 november 2026, inga förval för utelämnade värden. Release-noten och koden är därför det som beskriver beteendet.
Vad det betyder för dig
Det här är vår härledning, inte källornas ord. Mätte du en lokal modell via /v1/chat/completions utan att sätta fälten, gjorde du det med 1.0 och 1.0. Efter uppgraderingen kan samma kod och samma modell köra med andra värden, och ett gammalt mätresultat är då inte längre en baslinje. Ingen källa säger att svaren blir bättre, och vi har inte mätt det.
Modeller utan paketerade värden bör i stället få förvalen i Modelfile-referensen, temperature 0.8 och top_p 0.9, inte 1.0. En egen modell med PARAMETER temperature bör nu slå igenom också via /v1. Båda punkterna kontrollerar du med provet nedan. Hur förval hamnar i ett modellpaket är en annan fråga, som tas upp i nyheten om GGUF-förval och artikeln om Modelfile.
Inventera klienten: spara den verkliga requesten
Att en app saknar ett temperaturreglage bevisar inget, för ett bibliotek eller program kan lägga till egna värden i requesten. Börja med versionen och modellens egna värden. ollama show har flaggan --parameters, och en tom lista betyder att du inte ser några paketerade värden för den modellen:
curl.exe -s http://localhost:11434/api/version
ollama show DIN-MODELL --parameters
Spela sedan in vad klienten skickar. Skriptet nedan tar emot anropet på en egen port, sparar sökväg och kropp i request.log och svarar 503. Inget når Ollama, och nyckelhuvuden sparas inte, men prompten gör det, så använd en testprompt.
from http.server import BaseHTTPRequestHandler, HTTPServer
from datetime import datetime
class Inspelning(BaseHTTPRequestHandler):
def do_POST(self):
langd = int(self.headers.get("Content-Length", 0))
kropp = self.rfile.read(langd)
with open("request.log", "ab") as logg:
logg.write(f"{datetime.now():%H:%M:%S} {self.command} {self.path}\n".encode() + kropp + b"\n\n")
self.send_error(503, "Bara inspelning")
do_GET = do_POST
HTTPServer(("127.0.0.1", 11435), Inspelning).serve_forever()
Spara det som spela-in.py och starta det med python spela-in.py. Peka klientens bas-URL på http://localhost:11435/v1 och skicka ett meddelande. Klienten visar ett fel, och det är väntat. Ollama ignorerar API-nyckeln lokalt enligt dokumentationen, så klientens nyckelfält behöver du inte ändra. Är kroppen tom i loggen skickar klienten troligen i ett format som skriptet inte läser, och då gäller inte slutsatsen för den klienten.
Leta sedan efter temperature, top_p, frequency_penalty och presence_penalty i loggen. Fält som finns påverkas inte av ändringen. Fält som saknas, eller står som null, följer nu modellen. Anteckna Ollama-version, modellnamn och digest bredvid loggen, eftersom utelämnade värden följer just den modell du kör.
Jämför de två lägena
Provet körs på v0.40.14 eller senare och kräver ingen nedgradering. Fil A utelämnar fälten. Fil B skickar 1.0 och 1.0, vilket enligt vår härledning ger samma två värden som den gamla utelämningen på chatvägen. Skillnaden mellan filerna är bara de två fälten, och prompten beställer det som räknas: exakt tre rader.
// a.json
{"model":"DIN-MODELL","max_tokens":200,"messages":[{"role":"user","content":"Skriv tre saker att kontrollera före en uppgradering av Ollama. Svara med exakt tre rader och inget annat."}]}
// b.json
{"model":"DIN-MODELL","max_tokens":200,"temperature":1.0,"top_p":1.0,"messages":[{"role":"user","content":"Skriv tre saker att kontrollera före en uppgradering av Ollama. Svara med exakt tre rader och inget annat."}]}
Ta bort kommentarsraderna när du sparar filerna. Spara också rakna.py från rutan nedan. Kör sedan tio anrop per fil i PowerShell och räkna resultatet:
foreach ($g in "a","b") { 1..10 | ForEach-Object {
curl.exe -s http://localhost:11434/v1/chat/completions -H "Content-Type: application/json" -d "@$g.json" -o "$g-$_.json"
} }
python rakna.py
# rakna.py
import glob, json
for grupp in "ab":
svar = []
for fil in glob.glob(f"{grupp}-*.json"):
with open(fil, encoding="utf-8") as f:
svar.append(json.load(f)["choices"][0]["message"]["content"].strip())
tre = sum(len([r for r in s.splitlines() if r.strip()]) == 3 for s in svar)
print(grupp, len(svar), "svar,", len(set(svar)), "unika,", tre, "med exakt tre rader")
| Läge | Unika svar | Exakt tre rader |
|---|---|---|
| A: fälten utelämnade | ___ av 10 | ___ av 10 |
| B: 1.0 och 1.0 | ___ av 10 | ___ av 10 |
Tabellen är en blankett, inga uppmätta värden. Tio anrop visar en riktning för just din modell och prompt, inget mer. Skiljer lägena sig lite har uppgraderingen troligen liten betydelse här, men byt till din egen prompt och ditt eget krav innan du drar slutsatsen. Vill du låsa mer finns seed. Modelfile-referensen säger att ett bestämt värde ger samma text för samma prompt, men räkna inte det som ett löfte i din uppsättning. Artikeln om temperatur och seed visar hur du prövar det, och hur du väljer värden. Upprepningar inom ett svar är en annan parameter.
Avvägningen är enkel. Utelämnar du fälten följer du modellens rekommenderade värden, men de kan flytta sig när modell eller version byts. Skriver du ut dem blir körningen lättare att jämföra över tid, men modellens egna värden gäller då inte. För skript och kvalitetsprov är vår rekommendation att skriva ut dem, och för vanlig chatt kan du låta modellen avgöra.
FAQ
Vad ändrades i Ollama 0.40.14 för temperature och top_p?
Klienter som inte skickar fälten till de OpenAI-kompatibla vägarna får modellens egna värden i stället för 1.0, enligt release-noten för v0.40.14.
Påverkas jag om klienten själv sätter temperature?
Inte för det fältet. Ett värde som klienten skickar gäller, också 0. Fält som saknas följer modellen.
Hur ser jag vad min klient skickar?
Peka klientens bas-URL på en inspelningsserver och läs den sparade requesten. Att appen saknar ett reglage bevisar inget, eftersom ett bibliotek eller program kan lägga till egna värden.
Blir svaren bättre efter uppgraderingen?
Ingen källa säger det och vi har inte mätt det. Jämför din egen prompt med fälten utelämnade och med 1.0 och 1.0.
Källor och metod
- Ollama v0.40.14, 3 nov 2026 – release-noten om utelämnade samplingsvärden.
- Pull request 19432 – de tre vägarna, skickade värden och exemplen lfm3 och deepseek-r1.
- Commit c1db5f9ef – kodens beteende före och efter,
nulloch svaret från/v1/responses. - Ollama Docs: OpenAI compatibility – lokal bas-URL, API-nyckeln och fältlistorna.
- Ollama Docs: Modelfile – förvalen för temperature och top_p samt beskrivningen av seed.
- cmd/cmd.go vid v0.40.14 – flaggan
--parametersförollama show.
Källorna kontrollerades 5 nov 2026. Förhandsversionen v0.40.15-rc1 är inte underlag. Vi har kört spela-in.py mot curl och rakna.py mot låtsasfiler för att se att de fungerar, men inte mot Ollama eller en riktig klient. Vi har inga jämförelseresultat, så provet är ditt.