invalid think value: "no" (must be "high", "medium", "low", "max", true, or false)
is Ollama's HTTP 400 answer when the request's think field holds a word it
does not accept. Send the JSON booleans true or false, without
quotes, or one of the level strings the message lists.
To turn thinking off, write "think": false, not "think": "no". On
qwen3:0.6b, false, true, "low" and
"high" were all answered with HTTP 200.
The error
{"model":"qwen3:0.6b","messages":[{"role":"user","content":"Say hi"}],"stream":false,"think":"no"}
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/chat -d "@think-chat.json"
{"error":"invalid think value: \"no\" (must be \"high\", \"medium\", \"low\", \"max\", true, or false)"}
HTTP 400
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/generate -d "@think-gen.json"
{"error":"invalid think value: \"no\" (must be \"high\", \"medium\", \"low\", \"max\", true, or false)"}
HTTP 400
Why it happens
think takes two kinds of value: a boolean that switches thinking on or off, or
a string that names a level. The message lists both kinds, and "no" is
neither, so /api/chat and /api/generate refused it with the same
words. The quotes in the message are the clue: true and false
appear without them, the levels with them. A string "false" is a string, not
a boolean.
The same body sent to qwen2.5:0.5b, a model with no thinking in its capability list, got exactly the same 400 and the same words, so this message is about the value, not about the model. Fix the value first; if the model then turns out not to support thinking at all, the server says so in a different message, covered in the post linked at the end.
The fix
{"model":"qwen3:0.6b","prompt":"Say hi in three words","stream":false,"think":false}
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/generate -d "@think-false.json"
{"model":"qwen3:0.6b",...,"response":"Hi!","done":true,"done_reason":"stop",...
HTTP 200
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/generate -d "@think-true.json"
{"model":"qwen3:0.6b",...,"response":"Hi!","thinking":"Okay, the user wants me to say \"hi\" in three words. ...
HTTP 200
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/generate -d "@think-low.json"
...
HTTP 200
PS> curl.exe -s -w "\nHTTP %{http_code}\n" http://127.0.0.1:15190/api/generate -d "@think-high.json"
...
HTTP 200
With false the reply had a response key and no
thinking key (its keys were listed with ConvertFrom-Json); with
true, "low" and "high" it also carried a
thinking field. The levels were accepted by qwen3:0.6b, but this test did not
measure whether they changed how long it thought, so treat the boolean as the dependable
switch for this model.
How it was reproduced
On Windows 11 in Windows PowerShell 5.1 with curl 8.22.0 and Ollama 0.40.16, against a
separate test server on 127.0.0.1:15190 with its own models folder and
qwen3:0.6b. Each body was written to an ASCII file and sent with
curl.exe -d "@file": "think":"no" to /api/chat and
/api/generate, then false, true,
"low" and "high" to /api/generate.
Frequently asked
- How do I turn off thinking in the Ollama API?
- Send "think": false as a JSON boolean, without quotes. On qwen3:0.6b the reply then had no thinking field. A string such as "no" is refused with HTTP 400.
- What values does the Ollama think parameter accept?
- The error message lists them: the booleans true and false, and the strings high, medium, low and max. In the test false, true, low and high were all accepted by qwen3:0.6b.
- Why does Ollama say invalid think value?
- The think field held a value that is neither a boolean nor one of the listed level strings, for example "no". The same 400 came from /api/chat and /api/generate.
More decoded errors in the Fixes category. If the value is right and the model itself cannot think, see Ollama: 'does not support thinking'.