mirror of
https://github.com/ollama/ollama-python.git
synced 2026-05-03 12:52:35 +00:00
feat: add version API and expose package version
Adds: - ollama.__version__ for the installed package version - .version() method on Client and AsyncClient to fetch /api/version Includes tests. Closes #646
This commit is contained in:
+4
-1
@@ -1,4 +1,4 @@
|
|||||||
from ollama._client import AsyncClient, Client
|
from ollama._client import AsyncClient, Client, __version__
|
||||||
from ollama._types import (
|
from ollama._types import (
|
||||||
ChatResponse,
|
ChatResponse,
|
||||||
EmbeddingsResponse,
|
EmbeddingsResponse,
|
||||||
@@ -23,6 +23,8 @@ __all__ = [
|
|||||||
'AsyncClient',
|
'AsyncClient',
|
||||||
'ChatResponse',
|
'ChatResponse',
|
||||||
'Client',
|
'Client',
|
||||||
|
'__version__',
|
||||||
|
'version',
|
||||||
'EmbedResponse',
|
'EmbedResponse',
|
||||||
'EmbeddingsResponse',
|
'EmbeddingsResponse',
|
||||||
'GenerateResponse',
|
'GenerateResponse',
|
||||||
@@ -55,5 +57,6 @@ list = _client.list
|
|||||||
copy = _client.copy
|
copy = _client.copy
|
||||||
show = _client.show
|
show = _client.show
|
||||||
ps = _client.ps
|
ps = _client.ps
|
||||||
|
version = _client.version
|
||||||
web_search = _client.web_search
|
web_search = _client.web_search
|
||||||
web_fetch = _client.web_fetch
|
web_fetch = _client.web_fetch
|
||||||
|
|||||||
@@ -629,6 +629,16 @@ class Client(BaseClient):
|
|||||||
'/api/tags',
|
'/api/tags',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def version(self) -> str:
|
||||||
|
r = self._request_raw(
|
||||||
|
'GET',
|
||||||
|
'/api/version'
|
||||||
|
)
|
||||||
|
if r.status_code != 200:
|
||||||
|
raise Exception(f"Request failed: {r.status_code}")
|
||||||
|
|
||||||
|
return r.json().get('version', '')
|
||||||
|
|
||||||
def delete(self, model: str) -> StatusResponse:
|
def delete(self, model: str) -> StatusResponse:
|
||||||
r = self._request_raw(
|
r = self._request_raw(
|
||||||
'DELETE',
|
'DELETE',
|
||||||
@@ -1270,6 +1280,18 @@ class AsyncClient(BaseClient):
|
|||||||
'/api/tags',
|
'/api/tags',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def version(self) -> str:
|
||||||
|
r = await self._request_raw(
|
||||||
|
'GET',
|
||||||
|
'/api/version',
|
||||||
|
)
|
||||||
|
|
||||||
|
if r.status_code != 200:
|
||||||
|
raise Exception(f"Request failed: {r.status_code}")
|
||||||
|
|
||||||
|
return r.json().get('version', '')
|
||||||
|
|
||||||
|
|
||||||
async def delete(self, model: str) -> StatusResponse:
|
async def delete(self, model: str) -> StatusResponse:
|
||||||
r = await self._request_raw(
|
r = await self._request_raw(
|
||||||
'DELETE',
|
'DELETE',
|
||||||
|
|||||||
+45
-1
@@ -5,7 +5,7 @@ import re
|
|||||||
import tempfile
|
import tempfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
import ollama
|
||||||
import pytest
|
import pytest
|
||||||
from httpx import Response as httpxResponse
|
from httpx import Response as httpxResponse
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@@ -99,6 +99,50 @@ def test_client_chat_with_logprobs(httpserver: HTTPServer):
|
|||||||
assert response['logprobs'][0]['top_logprobs'][1]['token'] == 'Hi'
|
assert response['logprobs'][0]['top_logprobs'][1]['token'] == 'Hi'
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_version():
|
||||||
|
assert hasattr(ollama, '__version__')
|
||||||
|
assert isinstance(ollama.__version__, str)
|
||||||
|
assert ollama.__version__ != ''
|
||||||
|
assert callable(ollama.version)
|
||||||
|
assert hasattr(ollama, 'version')
|
||||||
|
|
||||||
|
|
||||||
|
def test_client_version_missing_field(httpserver: HTTPServer):
|
||||||
|
httpserver.expect_ordered_request(
|
||||||
|
'/api/version',
|
||||||
|
method='GET',
|
||||||
|
).respond_with_json({})
|
||||||
|
|
||||||
|
client = Client(httpserver.url_for('/'))
|
||||||
|
response = client.version()
|
||||||
|
assert response == ''
|
||||||
|
|
||||||
|
|
||||||
|
async def test_async_client_version(httpserver: HTTPServer):
|
||||||
|
httpserver.expect_ordered_request(
|
||||||
|
'/api/version',
|
||||||
|
method='GET',
|
||||||
|
).respond_with_json(
|
||||||
|
{
|
||||||
|
'version': '0.1.0',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
client = AsyncClient(httpserver.url_for('/'))
|
||||||
|
response = await client.version()
|
||||||
|
assert response == '0.1.0'
|
||||||
|
assert isinstance(response, str)
|
||||||
|
|
||||||
|
async def test_async_client_version_missing_field(httpserver: HTTPServer):
|
||||||
|
httpserver.expect_ordered_request(
|
||||||
|
'/api/version',
|
||||||
|
method='GET',
|
||||||
|
).respond_with_json({})
|
||||||
|
|
||||||
|
client = AsyncClient(httpserver.url_for('/'))
|
||||||
|
response = await client.version()
|
||||||
|
assert response == ''
|
||||||
|
|
||||||
def test_client_chat_stream(httpserver: HTTPServer):
|
def test_client_chat_stream(httpserver: HTTPServer):
|
||||||
def stream_handler(_: Request):
|
def stream_handler(_: Request):
|
||||||
def generate():
|
def generate():
|
||||||
|
|||||||
Reference in New Issue
Block a user