NyhetLokal AI

Ollama 0.40.14: förvalen ändras i OpenAI-kompatibla API:t när fält utelämnas

Skickar din klient ingen temperature eller top_p till Ollamas OpenAI-kompatibla väg gällde länge 1.0. Från v0.40.14, släppt 3 november 2026, gäller modellens egna värden. Här är vad som ändrades och hur du kontrollerar din egen klient.

Publicerad · Senast granskad

Mörk metallåda med en grönt upplyst kammare och en stapel gröna skikt i mitten. Från vänster går två svarta kablar via varsin kopplingsdosa in i lådan. Den övre dosan har en tom ram och den undre en grön platta med ett randigt hörn.
Lämnar klienten fältet tomt gäller modellens värde. Fyller den i det gäller klientens.

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.

Utelämnat är inte samma sak som 1.0

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.

KlientenTill och med v0.40.13Från v0.40.14
Utelämnar temperature1.0 på alla tre vägarnaModellens värde
Utelämnar top_p1.0 på chat och completions; /v1/responses lämnade fältet osattModellens värde
Utelämnar straffen på /v1/completionsAlltid 0 för frequency_penalty och presence_penaltyModellens värde
Skickar ett värdeVärdet, utom top_p 0 på completions, som blev 1.0Vä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ägeUnika svarExakt 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

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.