Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 40 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The Ollama Python library provides the easiest way to integrate Python 3.8+ proj
## Prerequisites

- [Ollama](https://ollama.com/download) should be installed and running
- Pull a model to use with the library: `ollama pull <model>` e.g. `ollama pull gemma3`
- Pull a model to use with the library: `ollama pull <model>` e.g. `ollama pull gemma4`
- See [Ollama.com](https://ollama.com/search) for more information on the models available.

## Install
Expand All @@ -20,12 +20,15 @@ pip install ollama
from ollama import chat
from ollama import ChatResponse

response: ChatResponse = chat(model='gemma3', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
])
response: ChatResponse = chat(
model='gemma4',
messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
],
)
print(response['message']['content'])
# or access fields directly from the response object
print(response.message.content)
Expand All @@ -41,9 +44,9 @@ Response streaming can be enabled by setting `stream=True`.
from ollama import chat

stream = chat(
model='gemma3',
messages=[{'role': 'user', 'content': 'Why is the sky blue?'}],
stream=True,
model='gemma4',
messages=[{'role': 'user', 'content': 'Why is the sky blue?'}],
stream=True,
)

for chunk in stream:
Expand Down Expand Up @@ -110,10 +113,7 @@ curl https://ollama.com/api/tags
import os
from ollama import Client

client = Client(
host='https://ollama.com',
headers={'Authorization': 'Bearer ' + os.environ.get('OLLAMA_API_KEY')}
)
client = Client(host='https://ollama.com', headers={'Authorization': 'Bearer ' + os.environ.get('OLLAMA_API_KEY')})

messages = [
{
Expand All @@ -133,16 +133,17 @@ All extra keyword arguments are passed into the [`httpx.Client`](https://www.pyt

```python
from ollama import Client
client = Client(
host='http://localhost:11434',
headers={'x-some-header': 'some-value'}

client = Client(host='http://localhost:11434', headers={'x-some-header': 'some-value'})
response = client.chat(
model='gemma4',
messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
],
)
response = client.chat(model='gemma3', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
])
```

## Async client
Expand All @@ -153,9 +154,11 @@ The `AsyncClient` class is used to make asynchronous requests. It can be configu
import asyncio
from ollama import AsyncClient


async def chat():
message = {'role': 'user', 'content': 'Why is the sky blue?'}
response = await AsyncClient().chat(model='gemma3', messages=[message])
response = await AsyncClient().chat(model='gemma4', messages=[message])


asyncio.run(chat())
```
Expand All @@ -166,11 +169,13 @@ Setting `stream=True` modifies functions to return a Python asynchronous generat
import asyncio
from ollama import AsyncClient


async def chat():
message = {'role': 'user', 'content': 'Why is the sky blue?'}
async for part in await AsyncClient().chat(model='gemma3', messages=[message], stream=True):
async for part in await AsyncClient().chat(model='gemma4', messages=[message], stream=True):
print(part['message']['content'], end='', flush=True)


asyncio.run(chat())
```

Expand All @@ -181,13 +186,13 @@ The Ollama Python library's API is designed around the [Ollama REST API](https:/
### Chat

```python
ollama.chat(model='gemma3', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
ollama.chat(model='gemma4', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
```

### Generate

```python
ollama.generate(model='gemma3', prompt='Why is the sky blue?')
ollama.generate(model='gemma4', prompt='Why is the sky blue?')
```

### List
Expand All @@ -199,49 +204,49 @@ ollama.list()
### Show

```python
ollama.show('gemma3')
ollama.show('gemma4')
```

### Create

```python
ollama.create(model='example', from_='gemma3', system="You are Mario from Super Mario Bros.")
ollama.create(model='example', from_='gemma4', system='You are Mario from Super Mario Bros.')
```

### Copy

```python
ollama.copy('gemma3', 'user/gemma3')
ollama.copy('gemma4', 'user/gemma4')
```

### Delete

```python
ollama.delete('gemma3')
ollama.delete('gemma4')
```

### Pull

```python
ollama.pull('gemma3')
ollama.pull('gemma4')
```

### Push

```python
ollama.push('user/gemma3')
ollama.push('user/gemma4')
```

### Embed

```python
ollama.embed(model='gemma3', input='The sky is blue because of rayleigh scattering')
ollama.embed(model='gemma4', input='The sky is blue because of rayleigh scattering')
```

### Embed (batch)

```python
ollama.embed(model='gemma3', input=['The sky is blue because of rayleigh scattering', 'Grass is green because of chlorophyll'])
ollama.embed(model='gemma4', input=['The sky is blue because of rayleigh scattering', 'Grass is green because of chlorophyll'])
```

### Ps
Expand Down
2 changes: 1 addition & 1 deletion examples/async-chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async def main():
]

client = AsyncClient()
response = await client.chat('gemma3', messages=messages)
response = await client.chat('gemma4', messages=messages)
print(response['message']['content'])


Expand Down
2 changes: 1 addition & 1 deletion examples/async-generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

async def main():
client = ollama.AsyncClient()
response = await client.generate('gemma3', 'Why is the sky blue?')
response = await client.generate('gemma4', 'Why is the sky blue?')
print(response['response'])


Expand Down
2 changes: 1 addition & 1 deletion examples/chat-logprobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def print_logprobs(logprobs: Iterable[dict], label: str) -> None:
]

response = ollama.chat(
model='gemma3',
model='gemma4',
messages=messages,
logprobs=True,
top_logprobs=3,
Expand Down
2 changes: 1 addition & 1 deletion examples/chat-stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
},
]

for part in chat('gemma3', messages=messages, stream=True):
for part in chat('gemma4', messages=messages, stream=True):
print(part['message']['content'], end='', flush=True)
2 changes: 1 addition & 1 deletion examples/chat-with-history.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
while True:
user_input = input('Chat with history: ')
response = chat(
'gemma3',
'gemma4',
messages=[*messages, {'role': 'user', 'content': user_input}],
)

Expand Down
2 changes: 1 addition & 1 deletion examples/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
},
]

response = chat('gemma3', messages=messages)
response = chat('gemma4', messages=messages)
print(response['message']['content'])
2 changes: 1 addition & 1 deletion examples/create.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
client = Client()
response = client.create(
model='my-assistant',
from_='gemma3',
from_='gemma4',
system='You are mario from Super Mario Bros.',
stream=False,
)
Expand Down
2 changes: 1 addition & 1 deletion examples/generate-logprobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def print_logprobs(logprobs: Iterable[dict], label: str) -> None:


response = ollama.generate(
model='gemma3',
model='gemma4',
prompt='hi! be concise.',
logprobs=True,
top_logprobs=3,
Expand Down
2 changes: 1 addition & 1 deletion examples/generate-stream.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from ollama import generate

for part in generate('gemma3', 'Why is the sky blue?', stream=True):
for part in generate('gemma4', 'Why is the sky blue?', stream=True):
print(part['response'], end='', flush=True)
2 changes: 1 addition & 1 deletion examples/generate.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from ollama import generate

response = generate('gemma3', 'Why is the sky blue?')
response = generate('gemma4', 'Why is the sky blue?')
print(response['response'])
2 changes: 1 addition & 1 deletion examples/multimodal-chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# img = Path(path).read_bytes()

response = chat(
model='gemma3',
model='gemma4',
messages=[
{
'role': 'user',
Expand Down
4 changes: 2 additions & 2 deletions examples/ps.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from ollama import ProcessResponse, chat, ps, pull

# Ensure at least one model is loaded
response = pull('gemma3', stream=True)
response = pull('gemma4', stream=True)
progress_states = set()
for progress in response:
if progress.get('status') in progress_states:
Expand All @@ -12,7 +12,7 @@
print('\n')

print('Waiting for model to load... \n')
chat(model='gemma3', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
chat(model='gemma4', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])


response: ProcessResponse = ps()
Expand Down
2 changes: 1 addition & 1 deletion examples/pull.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from ollama import pull

current_digest, bars = '', {}
for progress in pull('gemma3', stream=True):
for progress in pull('gemma4', stream=True):
digest = progress.get('digest', '')
if digest != current_digest and current_digest in bars:
bars[current_digest].close()
Expand Down
2 changes: 1 addition & 1 deletion examples/show.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from ollama import ShowResponse, show

response: ShowResponse = show('gemma3')
response: ShowResponse = show('gemma4')
print('Model Information:')
print(f'Modified at: {response.modified_at}')
print(f'Template: {response.template}')
Expand Down
2 changes: 1 addition & 1 deletion examples/structured-outputs-image.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class ImageDescription(BaseModel):

# Set up chat as usual
response = chat(
model='gemma3',
model='gemma4',
format=ImageDescription.model_json_schema(), # Pass in the schema for the response
messages=[
{
Expand Down
Loading