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'.