mirror of
https://github.com/ollama/ollama-python.git
synced 2026-06-16 13:14:54 +00:00
Compare commits
4 Commits
v0.2.1
..
jyan/tools
| Author | SHA1 | Date | |
|---|---|---|---|
| 98b3a44b14 | |||
| 1a15742705 | |||
| ce56f279e8 | |||
| 982d65fea0 |
@@ -2,24 +2,6 @@
|
||||
|
||||
The Ollama Python library provides the easiest way to integrate Python 3.8+ projects with [Ollama](https://github.com/ollama/ollama).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You need to have a local ollama server running to be able to continue. To do this:
|
||||
|
||||
- Download: https://ollama.com/
|
||||
- Run an LLM: https://ollama.com/library
|
||||
- Example: `ollama run llama2`
|
||||
- Example: `ollama run llama2:70b`
|
||||
|
||||
Then:
|
||||
|
||||
```sh
|
||||
curl https://ollama.ai/install.sh | sh
|
||||
ollama serve
|
||||
```
|
||||
|
||||
Next you can go ahead with `ollama-python`.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
from ollama import ps, pull, chat
|
||||
|
||||
response = pull('mistral', stream=True)
|
||||
progress_states = set()
|
||||
for progress in response:
|
||||
if progress.get('status') in progress_states:
|
||||
continue
|
||||
progress_states.add(progress.get('status'))
|
||||
print(progress.get('status'))
|
||||
|
||||
print('\n')
|
||||
|
||||
response = chat('mistral', messages=[{'role': 'user', 'content': 'Hello!'}])
|
||||
print(response['message']['content'])
|
||||
|
||||
print('\n')
|
||||
|
||||
response = ps()
|
||||
|
||||
name = response['models'][0]['name']
|
||||
size = response['models'][0]['size']
|
||||
size_vram = response['models'][0]['size_vram']
|
||||
|
||||
if size == size_vram:
|
||||
print(f'{name}: 100% GPU')
|
||||
elif not size_vram:
|
||||
print(f'{name}: 100% CPU')
|
||||
else:
|
||||
size_cpu = size - size_vram
|
||||
cpu_percent = round(size_cpu / size * 100)
|
||||
print(f'{name}: {cpu_percent}% CPU/{100 - cpu_percent}% GPU')
|
||||
+217
-1
@@ -11,7 +11,7 @@ from copy import deepcopy
|
||||
from hashlib import sha256
|
||||
from base64 import b64encode, b64decode
|
||||
|
||||
from typing import Any, AnyStr, Union, Optional, Sequence, Mapping, Literal
|
||||
from typing import Any, AnyStr, Union, Optional, Sequence, Mapping, Literal, overload
|
||||
|
||||
import sys
|
||||
|
||||
@@ -97,6 +97,40 @@ class Client(BaseClient):
|
||||
) -> Union[Mapping[str, Any], Iterator[Mapping[str, Any]]]:
|
||||
return self._stream(*args, **kwargs) if stream else self._request(*args, **kwargs).json()
|
||||
|
||||
@overload
|
||||
def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
prompt: str = '',
|
||||
system: str = '',
|
||||
template: str = '',
|
||||
context: Optional[Sequence[int]] = None,
|
||||
stream: Literal[False] = False,
|
||||
raw: bool = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
images: Optional[Sequence[AnyStr]] = None,
|
||||
tools: Optional[Sequence[Any]] = None,
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
prompt: str = '',
|
||||
system: str = '',
|
||||
template: str = '',
|
||||
context: Optional[Sequence[int]] = None,
|
||||
stream: Literal[True] = True,
|
||||
raw: bool = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
images: Optional[Sequence[AnyStr]] = None,
|
||||
tools: Optional[Sequence[Any]] = None,
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Iterator[Mapping[str, Any]]: ...
|
||||
|
||||
def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
@@ -108,6 +142,7 @@ class Client(BaseClient):
|
||||
raw: bool = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
images: Optional[Sequence[AnyStr]] = None,
|
||||
tools: Optional[Sequence[Any]] = None,
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Union[Mapping[str, Any], Iterator[Mapping[str, Any]]]:
|
||||
@@ -136,6 +171,7 @@ class Client(BaseClient):
|
||||
'stream': stream,
|
||||
'raw': raw,
|
||||
'images': [_encode_image(image) for image in images or []],
|
||||
'tools': tools or [],
|
||||
'format': format,
|
||||
'options': options or {},
|
||||
'keep_alive': keep_alive,
|
||||
@@ -143,6 +179,28 @@ class Client(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
messages: Optional[Sequence[Message]] = None,
|
||||
stream: Literal[False] = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
messages: Optional[Sequence[Message]] = None,
|
||||
stream: Literal[True] = True,
|
||||
format: Literal['', 'json'] = '',
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Iterator[Mapping[str, Any]]: ...
|
||||
|
||||
def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
@@ -209,6 +267,22 @@ class Client(BaseClient):
|
||||
},
|
||||
).json()
|
||||
|
||||
@overload
|
||||
def pull(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
def pull(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[True] = True,
|
||||
) -> Iterator[Mapping[str, Any]]: ...
|
||||
|
||||
def pull(
|
||||
self,
|
||||
model: str,
|
||||
@@ -231,6 +305,22 @@ class Client(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
def push(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
def push(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[True] = True,
|
||||
) -> Iterator[Mapping[str, Any]]: ...
|
||||
|
||||
def push(
|
||||
self,
|
||||
model: str,
|
||||
@@ -253,6 +343,26 @@ class Client(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
def create(
|
||||
self,
|
||||
model: str,
|
||||
path: Optional[Union[str, PathLike]] = None,
|
||||
modelfile: Optional[str] = None,
|
||||
quantize: Optional[str] = None,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
def create(
|
||||
self,
|
||||
model: str,
|
||||
path: Optional[Union[str, PathLike]] = None,
|
||||
modelfile: Optional[str] = None,
|
||||
quantize: Optional[str] = None,
|
||||
stream: Literal[True] = True,
|
||||
) -> Iterator[Mapping[str, Any]]: ...
|
||||
|
||||
def create(
|
||||
self,
|
||||
model: str,
|
||||
@@ -386,6 +496,38 @@ class AsyncClient(BaseClient):
|
||||
response = await self._request(*args, **kwargs)
|
||||
return response.json()
|
||||
|
||||
@overload
|
||||
async def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
prompt: str = '',
|
||||
system: str = '',
|
||||
template: str = '',
|
||||
context: Optional[Sequence[int]] = None,
|
||||
stream: Literal[False] = False,
|
||||
raw: bool = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
images: Optional[Sequence[AnyStr]] = None,
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
async def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
prompt: str = '',
|
||||
system: str = '',
|
||||
template: str = '',
|
||||
context: Optional[Sequence[int]] = None,
|
||||
stream: Literal[True] = True,
|
||||
raw: bool = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
images: Optional[Sequence[AnyStr]] = None,
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> AsyncIterator[Mapping[str, Any]]: ...
|
||||
|
||||
async def generate(
|
||||
self,
|
||||
model: str = '',
|
||||
@@ -431,6 +573,28 @@ class AsyncClient(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
async def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
messages: Optional[Sequence[Message]] = None,
|
||||
stream: Literal[False] = False,
|
||||
format: Literal['', 'json'] = '',
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
async def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
messages: Optional[Sequence[Message]] = None,
|
||||
stream: Literal[True] = True,
|
||||
format: Literal['', 'json'] = '',
|
||||
options: Optional[Options] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
) -> AsyncIterator[Mapping[str, Any]]: ...
|
||||
|
||||
async def chat(
|
||||
self,
|
||||
model: str = '',
|
||||
@@ -498,6 +662,22 @@ class AsyncClient(BaseClient):
|
||||
|
||||
return response.json()
|
||||
|
||||
@overload
|
||||
async def pull(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
async def pull(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[True] = True,
|
||||
) -> AsyncIterator[Mapping[str, Any]]: ...
|
||||
|
||||
async def pull(
|
||||
self,
|
||||
model: str,
|
||||
@@ -520,6 +700,22 @@ class AsyncClient(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
async def push(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
async def push(
|
||||
self,
|
||||
model: str,
|
||||
insecure: bool = False,
|
||||
stream: Literal[True] = True,
|
||||
) -> AsyncIterator[Mapping[str, Any]]: ...
|
||||
|
||||
async def push(
|
||||
self,
|
||||
model: str,
|
||||
@@ -542,6 +738,26 @@ class AsyncClient(BaseClient):
|
||||
stream=stream,
|
||||
)
|
||||
|
||||
@overload
|
||||
async def create(
|
||||
self,
|
||||
model: str,
|
||||
path: Optional[Union[str, PathLike]] = None,
|
||||
modelfile: Optional[str] = None,
|
||||
quantize: Optional[str] = None,
|
||||
stream: Literal[False] = False,
|
||||
) -> Mapping[str, Any]: ...
|
||||
|
||||
@overload
|
||||
async def create(
|
||||
self,
|
||||
model: str,
|
||||
path: Optional[Union[str, PathLike]] = None,
|
||||
modelfile: Optional[str] = None,
|
||||
quantize: Optional[str] = None,
|
||||
stream: Literal[True] = True,
|
||||
) -> AsyncIterator[Mapping[str, Any]]: ...
|
||||
|
||||
async def create(
|
||||
self,
|
||||
model: str,
|
||||
|
||||
@@ -52,6 +52,8 @@ class GenerateResponse(BaseGenerateResponse):
|
||||
context: Sequence[int]
|
||||
'Tokenized history up to the point of the response.'
|
||||
|
||||
tool_calls: Sequence[Any]
|
||||
'List of tool calls made by the model.'
|
||||
|
||||
class Message(TypedDict):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user