mirror of
https://github.com/ollama/ollama-python.git
synced 2026-06-18 22:23:24 +00:00
Compare commits
2 Commits
parth/test
..
v0.5.4
| Author | SHA1 | Date | |
|---|---|---|---|
| a1d04f04f2 | |||
| 8af6cac86b |
@@ -14,7 +14,7 @@ jobs:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
- uses: actions/setup-python@v6
|
||||
- uses: astral-sh/setup-uv@v5
|
||||
with:
|
||||
enable-cache: true
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
- uses: actions/setup-python@v6
|
||||
- uses: astral-sh/setup-uv@v5
|
||||
with:
|
||||
enable-cache: true
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
from ollama._client import AsyncClient, Client
|
||||
|
||||
from ollama._browser import (
|
||||
Browser
|
||||
)
|
||||
from ollama._types import (
|
||||
ChatResponse,
|
||||
EmbeddingsResponse,
|
||||
@@ -19,8 +15,6 @@ from ollama._types import (
|
||||
ShowResponse,
|
||||
StatusResponse,
|
||||
Tool,
|
||||
WebSearchResponse,
|
||||
WebCrawlResponse,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
@@ -41,9 +35,6 @@ __all__ = [
|
||||
'ShowResponse',
|
||||
'StatusResponse',
|
||||
'Tool',
|
||||
'WebSearchResponse',
|
||||
'WebCrawlResponse',
|
||||
'Browser',
|
||||
]
|
||||
|
||||
_client = Client()
|
||||
@@ -60,5 +51,3 @@ list = _client.list
|
||||
copy = _client.copy
|
||||
show = _client.show
|
||||
ps = _client.ps
|
||||
websearch = _client.websearch
|
||||
webcrawl = _client.webcrawl
|
||||
+4
-45
@@ -66,10 +66,6 @@ from ollama._types import (
|
||||
ShowResponse,
|
||||
StatusResponse,
|
||||
Tool,
|
||||
WebCrawlRequest,
|
||||
WebCrawlResponse,
|
||||
WebSearchRequest,
|
||||
WebSearchResponse,
|
||||
)
|
||||
|
||||
T = TypeVar('T')
|
||||
@@ -106,8 +102,6 @@ class BaseClient:
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': f'ollama-python/{__version__} ({platform.machine()} {platform.system().lower()}) Python/{platform.python_version()}',
|
||||
# TODO: this is to make the client feel good
|
||||
'Authorization': f'Bearer {(headers or {}).get("Authorization") or os.getenv("OLLAMA_API_KEY")}' if (headers or {}).get("Authorization") or os.getenv("OLLAMA_API_KEY") else None,
|
||||
}.items()
|
||||
},
|
||||
**kwargs,
|
||||
@@ -369,6 +363,7 @@ class Client(BaseClient):
|
||||
truncate: Optional[bool] = None,
|
||||
options: Optional[Union[Mapping[str, Any], Options]] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
dimensions: Optional[int] = None,
|
||||
) -> EmbedResponse:
|
||||
return self._request(
|
||||
EmbedResponse,
|
||||
@@ -380,6 +375,7 @@ class Client(BaseClient):
|
||||
truncate=truncate,
|
||||
options=options,
|
||||
keep_alive=keep_alive,
|
||||
dimensions=dimensions,
|
||||
).model_dump(exclude_none=True),
|
||||
)
|
||||
|
||||
@@ -628,45 +624,6 @@ class Client(BaseClient):
|
||||
'/api/ps',
|
||||
)
|
||||
|
||||
def websearch(self, query: str, max_results: int = 3) -> WebSearchResponse:
|
||||
"""
|
||||
Perform a web search using ollama.com.
|
||||
|
||||
Args:
|
||||
query: The query to search for max_results: The maximum number of results to return.
|
||||
|
||||
Returns:
|
||||
WebSearchResponse with the search results
|
||||
"""
|
||||
return self._request(
|
||||
WebSearchResponse,
|
||||
'POST',
|
||||
'https://ollama.com/api/web_search',
|
||||
json=WebSearchRequest(
|
||||
queries=[query],
|
||||
max_results=max_results,
|
||||
).model_dump(exclude_none=True),
|
||||
)
|
||||
|
||||
def webcrawl(self, urls: Sequence[str]) -> WebCrawlResponse:
|
||||
"""
|
||||
Gets the content of web pages for the provided URLs.
|
||||
|
||||
Args:
|
||||
urls: The URLs to crawl
|
||||
|
||||
Returns:
|
||||
WebCrawlResponse with the crawl results
|
||||
"""
|
||||
return self._request(
|
||||
WebCrawlResponse,
|
||||
'POST',
|
||||
'https://ollama.com/api/web_crawl',
|
||||
json=WebCrawlRequest(
|
||||
urls=urls,
|
||||
).model_dump(exclude_none=True),
|
||||
)
|
||||
|
||||
|
||||
class AsyncClient(BaseClient):
|
||||
def __init__(self, host: Optional[str] = None, **kwargs) -> None:
|
||||
@@ -920,6 +877,7 @@ class AsyncClient(BaseClient):
|
||||
truncate: Optional[bool] = None,
|
||||
options: Optional[Union[Mapping[str, Any], Options]] = None,
|
||||
keep_alive: Optional[Union[float, str]] = None,
|
||||
dimensions: Optional[int] = None,
|
||||
) -> EmbedResponse:
|
||||
return await self._request(
|
||||
EmbedResponse,
|
||||
@@ -931,6 +889,7 @@ class AsyncClient(BaseClient):
|
||||
truncate=truncate,
|
||||
options=options,
|
||||
keep_alive=keep_alive,
|
||||
dimensions=dimensions,
|
||||
).model_dump(exclude_none=True),
|
||||
)
|
||||
|
||||
|
||||
+3
-97
@@ -382,6 +382,9 @@ class EmbedRequest(BaseRequest):
|
||||
|
||||
keep_alive: Optional[Union[float, str]] = None
|
||||
|
||||
dimensions: Optional[int] = None
|
||||
'Dimensions truncates the output embedding to the specified dimension.'
|
||||
|
||||
|
||||
class EmbedResponse(BaseGenerateResponse):
|
||||
"""
|
||||
@@ -538,103 +541,6 @@ class ProcessResponse(SubscriptableBaseModel):
|
||||
models: Sequence[Model]
|
||||
|
||||
|
||||
class WebSearchRequest(SubscriptableBaseModel):
|
||||
queries: Sequence[str]
|
||||
max_results: Optional[int] = None
|
||||
|
||||
class SearchResult(SubscriptableBaseModel):
|
||||
title: str
|
||||
url: str
|
||||
content: str
|
||||
metadata: Optional['SearchResultMetadata'] = None
|
||||
|
||||
|
||||
class CrawlResult(SubscriptableBaseModel):
|
||||
title: str
|
||||
url: str
|
||||
content: str
|
||||
links: Optional[Sequence[str]] = None
|
||||
metadata: Optional['CrawlResultMetadata'] = None
|
||||
|
||||
|
||||
class SearchResultContent(SubscriptableBaseModel):
|
||||
snippet: str
|
||||
full_text: str
|
||||
|
||||
|
||||
class SearchResultMetadata(SubscriptableBaseModel):
|
||||
published_date: Optional[str] = None
|
||||
author: Optional[str] = None
|
||||
|
||||
|
||||
class WebSearchResponse(SubscriptableBaseModel):
|
||||
results: Mapping[str, Sequence[SearchResult]]
|
||||
success: bool
|
||||
errors: Optional[Sequence[str]] = None
|
||||
|
||||
def __str__(self) -> str:
|
||||
if not self.success:
|
||||
error_msg = ', '.join(self.errors) if self.errors else 'Unknown error'
|
||||
return f'Web search failed: {error_msg}'
|
||||
|
||||
output = []
|
||||
for query, search_results in self.results.items():
|
||||
output.append(f'Search results for "{query}":')
|
||||
for i, result in enumerate(search_results, 1):
|
||||
output.append(f'{i}. {result.title}')
|
||||
output.append(f' URL: {result.url}')
|
||||
output.append(f' Content: {result.content}')
|
||||
if result.metadata and result.metadata.published_date:
|
||||
output.append(f' Published: {result.metadata.published_date}')
|
||||
if result.metadata and result.metadata.author:
|
||||
output.append(f' Author: {result.metadata.author}')
|
||||
output.append('')
|
||||
|
||||
return '\n'.join(output).rstrip()
|
||||
|
||||
class WebCrawlRequest(SubscriptableBaseModel):
|
||||
urls: Sequence[str]
|
||||
|
||||
|
||||
class CrawlResultContent(SubscriptableBaseModel):
|
||||
# provides the first 200 characters of the full text
|
||||
snippet: str
|
||||
full_text: str
|
||||
|
||||
|
||||
class CrawlResultMetadata(SubscriptableBaseModel):
|
||||
published_date: Optional[str] = None
|
||||
author: Optional[str] = None
|
||||
|
||||
|
||||
class WebCrawlResponse(SubscriptableBaseModel):
|
||||
results: Mapping[str, Sequence[CrawlResult]]
|
||||
success: bool
|
||||
errors: Optional[Sequence[str]] = None
|
||||
|
||||
def __str__(self) -> str:
|
||||
if not self.success:
|
||||
error_msg = ', '.join(self.errors) if self.errors else 'Unknown error'
|
||||
return f'Web crawl failed: {error_msg}'
|
||||
|
||||
output = []
|
||||
for url, crawl_results in self.results.items():
|
||||
output.append(f'Crawl results for "{url}":')
|
||||
for i, result in enumerate(crawl_results, 1):
|
||||
output.append(f'{i}. {result.title}')
|
||||
output.append(f' URL: {result.url}')
|
||||
output.append(f' Content: {result.content}')
|
||||
if result.links:
|
||||
output.append(f' Links: {", ".join(result.links)}')
|
||||
if result.metadata and result.metadata.published_date:
|
||||
output.append(f' Published: {result.metadata.published_date}')
|
||||
if result.metadata and result.metadata.author:
|
||||
output.append(f' Author: {result.metadata.author}')
|
||||
output.append('')
|
||||
|
||||
return '\n'.join(output).rstrip()
|
||||
|
||||
|
||||
class RequestError(Exception):
|
||||
"""
|
||||
Common class for request errors.
|
||||
|
||||
Reference in New Issue
Block a user