Merge pull request #553 from ollama/drifkin/thinking-levels
Some checks failed
test / test (push) Has been cancelled
test / lint (push) Has been cancelled

add support for 'high'/'medium'/'low' think values
This commit is contained in:
Devon Rifkin 2025-08-07 14:42:12 -07:00 committed by GitHub
commit 53ff3cd025
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 11 deletions

View File

@ -73,3 +73,6 @@ Requirement: `pip install tqdm`
### Thinking (generate) - Enable thinking mode for a model ### Thinking (generate) - Enable thinking mode for a model
- [thinking-generate.py](thinking-generate.py) - [thinking-generate.py](thinking-generate.py)
### Thinking (levels) - Choose the thinking level
- [thinking-levels.py](thinking-generate.py)

View File

@ -0,0 +1,26 @@
from ollama import chat
def heading(text):
print(text)
print('=' * len(text))
messages = [
{'role': 'user', 'content': 'What is 10 + 23?'},
]
# gpt-oss supports 'low', 'medium', 'high'
levels = ['low', 'medium', 'high']
for i, level in enumerate(levels):
response = chat('gpt-oss:20b', messages=messages, think=level)
heading(f'Thinking ({level})')
print(response.message.thinking)
print('\n')
heading('Response')
print(response.message.content)
print('\n')
if i < len(levels) - 1:
print('-' * 20)
print('\n')

View File

@ -274,7 +274,7 @@ class Client(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: Literal[False] = False, stream: Literal[False] = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,
@ -288,7 +288,7 @@ class Client(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: Literal[True] = True, stream: Literal[True] = True,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,
@ -301,7 +301,7 @@ class Client(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: bool = False, stream: bool = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,
@ -702,7 +702,7 @@ class AsyncClient(BaseClient):
template: str = '', template: str = '',
context: Optional[Sequence[int]] = None, context: Optional[Sequence[int]] = None,
stream: Literal[False] = False, stream: Literal[False] = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
raw: bool = False, raw: bool = False,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
images: Optional[Sequence[Union[str, bytes, Image]]] = None, images: Optional[Sequence[Union[str, bytes, Image]]] = None,
@ -721,7 +721,7 @@ class AsyncClient(BaseClient):
template: str = '', template: str = '',
context: Optional[Sequence[int]] = None, context: Optional[Sequence[int]] = None,
stream: Literal[True] = True, stream: Literal[True] = True,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
raw: bool = False, raw: bool = False,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
images: Optional[Sequence[Union[str, bytes, Image]]] = None, images: Optional[Sequence[Union[str, bytes, Image]]] = None,
@ -739,7 +739,7 @@ class AsyncClient(BaseClient):
template: Optional[str] = None, template: Optional[str] = None,
context: Optional[Sequence[int]] = None, context: Optional[Sequence[int]] = None,
stream: bool = False, stream: bool = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
raw: Optional[bool] = None, raw: Optional[bool] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
images: Optional[Sequence[Union[str, bytes, Image]]] = None, images: Optional[Sequence[Union[str, bytes, Image]]] = None,
@ -785,7 +785,7 @@ class AsyncClient(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: Literal[False] = False, stream: Literal[False] = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,
@ -799,7 +799,7 @@ class AsyncClient(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: Literal[True] = True, stream: Literal[True] = True,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,
@ -812,7 +812,7 @@ class AsyncClient(BaseClient):
*, *,
tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None, tools: Optional[Sequence[Union[Mapping[str, Any], Tool, Callable]]] = None,
stream: bool = False, stream: bool = False,
think: Optional[bool] = None, think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None,
format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None, format: Optional[Union[Literal['', 'json'], JsonSchemaValue]] = None,
options: Optional[Union[Mapping[str, Any], Options]] = None, options: Optional[Union[Mapping[str, Any], Options]] = None,
keep_alive: Optional[Union[float, str]] = None, keep_alive: Optional[Union[float, str]] = None,

View File

@ -207,7 +207,7 @@ class GenerateRequest(BaseGenerateRequest):
images: Optional[Sequence[Image]] = None images: Optional[Sequence[Image]] = None
'Image data for multimodal models.' 'Image data for multimodal models.'
think: Optional[bool] = None think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None
'Enable thinking mode (for thinking models).' 'Enable thinking mode (for thinking models).'
@ -357,7 +357,7 @@ class ChatRequest(BaseGenerateRequest):
tools: Optional[Sequence[Tool]] = None tools: Optional[Sequence[Tool]] = None
'Tools to use for the chat.' 'Tools to use for the chat.'
think: Optional[bool] = None think: Optional[Union[bool, Literal['low', 'medium', 'high']]] = None
'Enable thinking mode (for thinking models).' 'Enable thinking mode (for thinking models).'