Compare commits

...

33 Commits

Author SHA1 Message Date
Michael Yang d25c4aa1cf Merge pull request #129 from davep/mark-as-typed
Add py.typed to mark the library as typed
2024-06-05 11:59:39 -07:00
Dave Pearson fa7bf7cbd1 Revert explicit inclusion of py.typed 2024-06-05 19:43:37 +01:00
dependabot[bot] 04d102b406 Merge pull request #178 from ollama/dependabot/pip/pytest-8.2.2 2024-06-05 18:36:42 +00:00
Michael Yang 57c597b60e Merge pull request #158 from tillfalko/main
Avoid side effects if chat message contains images
2024-06-05 11:28:41 -07:00
dependabot[bot] 74db547ca4 Merge pull request #162 from ollama/dependabot/pip/pytest-asyncio-0.23.7 2024-06-05 18:13:54 +00:00
royjhan d5316d023a Python API PS (#177)
* Python API PS

* PS Rename

* Readme
2024-06-05 11:12:32 -07:00
dependabot[bot] 14d7f8c1b7 Merge pull request #172 from ollama/dependabot/pip/ruff-0.4.7 2024-06-05 18:10:23 +00:00
dependabot[bot] b45848a9cf Bump pytest from 8.2.0 to 8.2.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.0 to 8.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.0...8.2.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-04 22:21:10 +00:00
dependabot[bot] 4fb909db7b Bump ruff from 0.4.3 to 0.4.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.3 to 0.4.7.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.4.3...v0.4.7)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-31 22:22:27 +00:00
dependabot[bot] 0824044330 ---
updated-dependencies:
- dependency-name: pytest-asyncio
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-20 22:48:40 +00:00
tillfalko 0f8c20a596 Avoid side effects if chat message contains images 2024-05-18 16:48:53 +02:00
Michael Yang cb81f522b0 Merge pull request #154 from ollama/done-reason
add done reason to generate type responses
2024-05-10 14:22:03 -07:00
Michael Yang 5dc857ea66 Merge pull request #150 from ollama/mxyng/quantization
add quantization to create requests
2024-05-10 14:11:38 -07:00
Michael Yang 309007da80 add quantization to create requests 2024-05-10 14:10:37 -07:00
Michael Yang 3b69774f22 Merge pull request #152 from ollama/mxyng/rm-options
remove old options
2024-05-10 14:09:46 -07:00
Bruce MacDonald eaab4778c7 add done reason to generate type responses 2024-05-09 16:47:56 -07:00
Michael Yang 96214c0ffe remove old options 2024-05-09 09:19:35 -07:00
Michael Yang 00eafed0fa Merge pull request #135 from veinkr/main
Update README.md link still point legacy url
2024-05-08 13:13:15 -07:00
Michael Yang a8cb34e0ec Merge pull request #138 from TitanStar73/patch-1
Update README.md
2024-05-08 13:13:06 -07:00
dependabot[bot] 2b66adebef Merge pull request #140 from ollama/dependabot/pip/pytest-8.2.0 2024-05-08 20:10:43 +00:00
Michael Yang cc1fca067b Merge pull request #145 from jingfelix/fix/async-client-embed-annotation
fix: annotation in AsyncClient.embedding
2024-05-08 13:10:28 -07:00
dependabot[bot] 8b91188f66 Merge pull request #148 from ollama/dependabot/pip/ruff-0.4.3 2024-05-08 20:08:56 +00:00
Michael Yang 85f526353a Merge pull request #45 from adriens/patch-1
doc(README) : add prerequisites
2024-05-08 13:08:37 -07:00
dependabot[bot] 5cf83dcda8 Bump ruff from 0.4.1 to 0.4.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.1 to 0.4.3.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.4.1...v0.4.3)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-06 22:56:17 +00:00
jingfelix 2ac751fb79 fix: annotation in AsyncClient.embedding
Signed-off-by: jingfelix <jingfelix@outlook.com>
2024-05-03 16:29:03 +08:00
Dave Pearson c4931b202d Ensure that py.typed gets packaged and distributed 2024-04-30 18:19:08 +01:00
dependabot[bot] 30f762ae77 Bump pytest from 8.1.1 to 8.2.0
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.1.1 to 8.2.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.1.1...8.2.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 22:54:49 +00:00
TitanStar73 e5c4799650 Update README.md
Changing all demo code to use llama3 instead of llama2
2024-04-28 18:51:00 +05:30
Demon Finch fed2b2ee02 Update README.md link still point legacy url 2024-04-27 13:07:34 +08:00
Dave Pearson 30090c5508 Add py.typed to mark the library as typed
Removes an error like this:

    error: Skipping analyzing "ollama":
    module is installed, but missing library stubs or py.typed marker  [import-untyped]

when running mypy over code that uses the library.
2024-04-25 10:51:30 +01:00
SALES e28f43f892 Update README.md
cf https://github.com/ollama/ollama-python/pull/45#issuecomment-1942447161
2024-02-16 07:02:48 +11:00
SALES 70e376368f Update README.md
Co-authored-by: Michael Esteban <mickel13@gmail.com>
2024-02-02 07:56:27 +11:00
SALES 09ae36a0f9 doc(README) : add prerequisites 2024-01-31 21:13:54 +11:00
7 changed files with 103 additions and 49 deletions
+40 -16
View File
@@ -1,6 +1,24 @@
# Ollama Python Library
The Ollama Python library provides the easiest way to integrate Python 3.8+ projects with [Ollama](https://github.com/jmorganca/ollama).
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
@@ -12,7 +30,7 @@ pip install ollama
```python
import ollama
response = ollama.chat(model='llama2', messages=[
response = ollama.chat(model='llama3', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
@@ -29,7 +47,7 @@ Response streaming can be enabled by setting `stream=True`, modifying function c
import ollama
stream = ollama.chat(
model='llama2',
model='llama3',
messages=[{'role': 'user', 'content': 'Why is the sky blue?'}],
stream=True,
)
@@ -40,18 +58,18 @@ for chunk in stream:
## API
The Ollama Python library's API is designed around the [Ollama REST API](https://github.com/jmorganca/ollama/blob/main/docs/api.md)
The Ollama Python library's API is designed around the [Ollama REST API](https://github.com/ollama/ollama/blob/main/docs/api.md)
### Chat
```python
ollama.chat(model='llama2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
ollama.chat(model='llama3', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
```
### Generate
```python
ollama.generate(model='llama2', prompt='Why is the sky blue?')
ollama.generate(model='llama3', prompt='Why is the sky blue?')
```
### List
@@ -63,14 +81,14 @@ ollama.list()
### Show
```python
ollama.show('llama2')
ollama.show('llama3')
```
### Create
```python
modelfile='''
FROM llama2
FROM llama3
SYSTEM You are mario from super mario bros.
'''
@@ -80,31 +98,37 @@ ollama.create(model='example', modelfile=modelfile)
### Copy
```python
ollama.copy('llama2', 'user/llama2')
ollama.copy('llama3', 'user/llama3')
```
### Delete
```python
ollama.delete('llama2')
ollama.delete('llama3')
```
### Pull
```python
ollama.pull('llama2')
ollama.pull('llama3')
```
### Push
```python
ollama.push('user/llama2')
ollama.push('user/llama3')
```
### Embeddings
```python
ollama.embeddings(model='llama2', prompt='The sky is blue because of rayleigh scattering')
ollama.embeddings(model='llama3', prompt='The sky is blue because of rayleigh scattering')
```
### Ps
```python
ollama.ps()
```
## Custom client
@@ -117,7 +141,7 @@ A custom client can be created with the following fields:
```python
from ollama import Client
client = Client(host='http://localhost:11434')
response = client.chat(model='llama2', messages=[
response = client.chat(model='llama3', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
@@ -133,7 +157,7 @@ from ollama import AsyncClient
async def chat():
message = {'role': 'user', 'content': 'Why is the sky blue?'}
response = await AsyncClient().chat(model='llama2', messages=[message])
response = await AsyncClient().chat(model='llama3', messages=[message])
asyncio.run(chat())
```
@@ -146,7 +170,7 @@ from ollama import AsyncClient
async def chat():
message = {'role': 'user', 'content': 'Why is the sky blue?'}
async for part in await AsyncClient().chat(model='llama2', messages=[message], stream=True):
async for part in await AsyncClient().chat(model='llama3', messages=[message], stream=True):
print(part['message']['content'], end='', flush=True)
asyncio.run(chat())
+2
View File
@@ -29,6 +29,7 @@ __all__ = [
'list',
'copy',
'show',
'ps',
]
_client = Client()
@@ -43,3 +44,4 @@ delete = _client.delete
list = _client.list
copy = _client.copy
show = _client.show
ps = _client.ps
+17 -1
View File
@@ -7,6 +7,7 @@ import platform
import urllib.parse
from os import PathLike
from pathlib import Path
from copy import deepcopy
from hashlib import sha256
from base64 import b64encode, b64decode
@@ -164,6 +165,8 @@ class Client(BaseClient):
if not model:
raise RequestError('must provide a model')
messages = deepcopy(messages)
for message in messages or []:
if not isinstance(message, dict):
raise TypeError('messages must be a list of Message or dict-like objects')
@@ -255,6 +258,7 @@ class Client(BaseClient):
model: str,
path: Optional[Union[str, PathLike]] = None,
modelfile: Optional[str] = None,
quantize: Optional[str] = None,
stream: bool = False,
) -> Union[Mapping[str, Any], Iterator[Mapping[str, Any]]]:
"""
@@ -276,6 +280,7 @@ class Client(BaseClient):
'name': model,
'modelfile': modelfile,
'stream': stream,
'quantize': quantize,
},
stream=stream,
)
@@ -334,6 +339,9 @@ class Client(BaseClient):
def show(self, model: str) -> Mapping[str, Any]:
return self._request('POST', '/api/show', json={'name': model}).json()
def ps(self) -> Mapping[str, Any]:
return self._request('GET', '/api/ps').json()
class AsyncClient(BaseClient):
def __init__(self, host: Optional[str] = None, **kwargs) -> None:
@@ -444,6 +452,8 @@ class AsyncClient(BaseClient):
if not model:
raise RequestError('must provide a model')
messages = deepcopy(messages)
for message in messages or []:
if not isinstance(message, dict):
raise TypeError('messages must be a list of strings')
@@ -474,7 +484,7 @@ class AsyncClient(BaseClient):
prompt: str = '',
options: Optional[Options] = None,
keep_alive: Optional[Union[float, str]] = None,
) -> Sequence[float]:
) -> Mapping[str, Sequence[float]]:
response = await self._request(
'POST',
'/api/embeddings',
@@ -537,6 +547,7 @@ class AsyncClient(BaseClient):
model: str,
path: Optional[Union[str, PathLike]] = None,
modelfile: Optional[str] = None,
quantize: Optional[str] = None,
stream: bool = False,
) -> Union[Mapping[str, Any], AsyncIterator[Mapping[str, Any]]]:
"""
@@ -558,6 +569,7 @@ class AsyncClient(BaseClient):
'name': model,
'modelfile': modelfile,
'stream': stream,
'quantize': quantize,
},
stream=stream,
)
@@ -625,6 +637,10 @@ class AsyncClient(BaseClient):
response = await self._request('POST', '/api/show', json={'name': model})
return response.json()
async def ps(self) -> Mapping[str, Any]:
response = await self._request('GET', '/api/ps')
return response.json()
def _encode_image(image) -> str:
"""
+3 -3
View File
@@ -19,6 +19,9 @@ class BaseGenerateResponse(TypedDict):
done: bool
'True if response is complete, otherwise False. Useful for streaming to detect the final response.'
done_reason: str
'Reason for completion. Only present when done is True.'
total_duration: int
'Total duration in nanoseconds.'
@@ -95,7 +98,6 @@ class Options(TypedDict, total=False):
numa: bool
num_ctx: int
num_batch: int
num_gqa: int
num_gpu: int
main_gpu: int
low_vram: bool
@@ -105,8 +107,6 @@ class Options(TypedDict, total=False):
use_mmap: bool
use_mlock: bool
embedding_only: bool
rope_frequency_base: float
rope_frequency_scale: float
num_thread: int
# runtime options
View File
Generated
+29 -29
View File
@@ -371,13 +371,13 @@ xmp = ["defusedxml"]
[[package]]
name = "pluggy"
version = "1.4.0"
version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.8"
files = [
{file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
{file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
]
[package.extras]
@@ -386,13 +386,13 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pytest"
version = "8.1.1"
version = "8.2.2"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.8"
files = [
{file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"},
{file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"},
{file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"},
{file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"},
]
[package.dependencies]
@@ -400,21 +400,21 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=1.4,<2.0"
pluggy = ">=1.5,<2.0"
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras]
testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
[[package]]
name = "pytest-asyncio"
version = "0.23.6"
version = "0.23.7"
description = "Pytest support for asyncio"
optional = false
python-versions = ">=3.8"
files = [
{file = "pytest-asyncio-0.23.6.tar.gz", hash = "sha256:ffe523a89c1c222598c76856e76852b787504ddb72dd5d9b6617ffa8aa2cde5f"},
{file = "pytest_asyncio-0.23.6-py3-none-any.whl", hash = "sha256:68516fdd1018ac57b846c9846b954f0393b26f094764a28c955eabb0536a4e8a"},
{file = "pytest_asyncio-0.23.7-py3-none-any.whl", hash = "sha256:009b48127fbe44518a547bddd25611551b0e43ccdbf1e67d12479f569832c20b"},
{file = "pytest_asyncio-0.23.7.tar.gz", hash = "sha256:5f5c72948f4c49e7db4f29f2521d4031f1c27f86e57b046126654083d4770268"},
]
[package.dependencies]
@@ -458,28 +458,28 @@ Werkzeug = ">=2.0.0"
[[package]]
name = "ruff"
version = "0.4.1"
version = "0.4.7"
description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
files = [
{file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2d9ef6231e3fbdc0b8c72404a1a0c46fd0dcea84efca83beb4681c318ea6a953"},
{file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9485f54a7189e6f7433e0058cf8581bee45c31a25cd69009d2a040d1bd4bfaef"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2921ac03ce1383e360e8a95442ffb0d757a6a7ddd9a5be68561a671e0e5807e"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eec8d185fe193ad053eda3a6be23069e0c8ba8c5d20bc5ace6e3b9e37d246d3f"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa27d9d72a94574d250f42b7640b3bd2edc4c58ac8ac2778a8c82374bb27984"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f1ee41580bff1a651339eb3337c20c12f4037f6110a36ae4a2d864c52e5ef954"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0926cefb57fc5fced629603fbd1a23d458b25418681d96823992ba975f050c2b"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6e37f2e3cd74496a74af9a4fa67b547ab3ca137688c484749189bf3a686ceb"},
{file = "ruff-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd703a5975ac1998c2cc5e9494e13b28f31e66c616b0a76e206de2562e0843c"},
{file = "ruff-0.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b92f03b4aa9fa23e1799b40f15f8b95cdc418782a567d6c43def65e1bbb7f1cf"},
{file = "ruff-0.4.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c859f294f8633889e7d77de228b203eb0e9a03071b72b5989d89a0cf98ee262"},
{file = "ruff-0.4.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b34510141e393519a47f2d7b8216fec747ea1f2c81e85f076e9f2910588d4b64"},
{file = "ruff-0.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6e68d248ed688b9d69fd4d18737edcbb79c98b251bba5a2b031ce2470224bdf9"},
{file = "ruff-0.4.1-py3-none-win32.whl", hash = "sha256:b90506f3d6d1f41f43f9b7b5ff845aeefabed6d2494307bc7b178360a8805252"},
{file = "ruff-0.4.1-py3-none-win_amd64.whl", hash = "sha256:c7d391e5936af5c9e252743d767c564670dc3889aff460d35c518ee76e4b26d7"},
{file = "ruff-0.4.1-py3-none-win_arm64.whl", hash = "sha256:a1eaf03d87e6a7cd5e661d36d8c6e874693cb9bc3049d110bc9a97b350680c43"},
{file = "ruff-0.4.1.tar.gz", hash = "sha256:d592116cdbb65f8b1b7e2a2b48297eb865f6bdc20641879aa9d7b9c11d86db79"},
{file = "ruff-0.4.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e089371c67892a73b6bb1525608e89a2aca1b77b5440acf7a71dda5dac958f9e"},
{file = "ruff-0.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:10f973d521d910e5f9c72ab27e409e839089f955be8a4c8826601a6323a89753"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59c3d110970001dfa494bcd95478e62286c751126dfb15c3c46e7915fc49694f"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa9773c6c00f4958f73b317bc0fd125295110c3776089f6ef318f4b775f0abe4"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07fc80bbb61e42b3b23b10fda6a2a0f5a067f810180a3760c5ef1b456c21b9db"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:fa4dafe3fe66d90e2e2b63fa1591dd6e3f090ca2128daa0be33db894e6c18648"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7c0083febdec17571455903b184a10026603a1de078428ba155e7ce9358c5f6"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad1b20e66a44057c326168437d680a2166c177c939346b19c0d6b08a62a37589"},
{file = "ruff-0.4.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf5d818553add7511c38b05532d94a407f499d1a76ebb0cad0374e32bc67202"},
{file = "ruff-0.4.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:50e9651578b629baec3d1513b2534de0ac7ed7753e1382272b8d609997e27e83"},
{file = "ruff-0.4.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8874a9df7766cb956b218a0a239e0a5d23d9e843e4da1e113ae1d27ee420877a"},
{file = "ruff-0.4.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b9de9a6e49f7d529decd09381c0860c3f82fa0b0ea00ea78409b785d2308a567"},
{file = "ruff-0.4.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:13a1768b0691619822ae6d446132dbdfd568b700ecd3652b20d4e8bc1e498f78"},
{file = "ruff-0.4.7-py3-none-win32.whl", hash = "sha256:769e5a51df61e07e887b81e6f039e7ed3573316ab7dd9f635c5afaa310e4030e"},
{file = "ruff-0.4.7-py3-none-win_amd64.whl", hash = "sha256:9e3ab684ad403a9ed1226894c32c3ab9c2e0718440f6f50c7c5829932bc9e054"},
{file = "ruff-0.4.7-py3-none-win_arm64.whl", hash = "sha256:10f2204b9a613988e3484194c2c9e96a22079206b22b787605c255f130db5ed7"},
{file = "ruff-0.4.7.tar.gz", hash = "sha256:2331d2b051dc77a289a653fcc6a42cce357087c5975738157cd966590b18b5e1"},
]
[[package]]
+12
View File
@@ -334,6 +334,7 @@ def test_client_create_path(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -357,6 +358,7 @@ def test_client_create_path_relative(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -389,6 +391,7 @@ def test_client_create_path_user_home(httpserver: HTTPServer, userhomedir):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -412,6 +415,7 @@ def test_client_create_modelfile(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -442,6 +446,7 @@ PARAMETER stop [/INST]
PARAMETER stop <<SYS>>
PARAMETER stop <</SYS>>''',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -478,6 +483,7 @@ def test_client_create_from_library(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM llama2',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -798,6 +804,7 @@ async def test_async_client_create_path(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -822,6 +829,7 @@ async def test_async_client_create_path_relative(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -846,6 +854,7 @@ async def test_async_client_create_path_user_home(httpserver: HTTPServer, userho
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -870,6 +879,7 @@ async def test_async_client_create_modelfile(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM @sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -901,6 +911,7 @@ PARAMETER stop [/INST]
PARAMETER stop <<SYS>>
PARAMETER stop <</SYS>>''',
'stream': False,
'quantize': None,
},
).respond_with_json({})
@@ -938,6 +949,7 @@ async def test_async_client_create_from_library(httpserver: HTTPServer):
'name': 'dummy',
'modelfile': 'FROM llama2',
'stream': False,
'quantize': None,
},
).respond_with_json({})