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:
ravivarmanr26 2026-04-13 23:06:39 +05:30
parent dbccf192ac
commit dbf9e4405d
3 changed files with 71 additions and 2 deletions

View File

@ -1,4 +1,4 @@
from ollama._client import AsyncClient, Client
from ollama._client import AsyncClient, Client, __version__
from ollama._types import (
ChatResponse,
EmbeddingsResponse,
@ -23,6 +23,8 @@ __all__ = [
'AsyncClient',
'ChatResponse',
'Client',
'__version__',
'version',
'EmbedResponse',
'EmbeddingsResponse',
'GenerateResponse',
@ -55,5 +57,6 @@ list = _client.list
copy = _client.copy
show = _client.show
ps = _client.ps
version = _client.version
web_search = _client.web_search
web_fetch = _client.web_fetch

View File

@ -628,6 +628,16 @@ class Client(BaseClient):
'GET',
'/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:
r = self._request_raw(
@ -1270,6 +1280,18 @@ class AsyncClient(BaseClient):
'/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:
r = await self._request_raw(
'DELETE',

View File

@ -5,7 +5,7 @@ import re
import tempfile
from pathlib import Path
from typing import Any
import ollama
import pytest
from httpx import Response as httpxResponse
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'
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 stream_handler(_: Request):
def generate():