diff options
| author | Zhijie He <hezhijie0327@hotmail.com> | 2025-03-29 10:38:44 +0800 |
|---|---|---|
| committer | Markus Heiser <markus.heiser@darmarIT.de> | 2025-03-30 14:25:58 +0200 |
| commit | 7b4612e86250389dc9d5ee67e4cc2cd64d06602a (patch) | |
| tree | d736bae3c780a4576f0b5e53d7c3e4f016a43498 /searx | |
| parent | 9ffa9fb73061f41f91a490bcb2772d2eb56e0d78 (diff) | |
[feat] engines: add Ollama engine
Diffstat (limited to 'searx')
| -rw-r--r-- | searx/engines/ollama.py | 60 | ||||
| -rw-r--r-- | searx/settings.yml | 5 |
2 files changed, 65 insertions, 0 deletions
diff --git a/searx/engines/ollama.py b/searx/engines/ollama.py new file mode 100644 index 000000000..532e107dc --- /dev/null +++ b/searx/engines/ollama.py @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Ollama model search engine for searxng""" + +from urllib.parse import urlencode +from datetime import datetime +from lxml import html + +from searx.utils import eval_xpath_list, eval_xpath_getindex, eval_xpath, extract_text +from searx.result_types import EngineResults + +about = { + "website": "https://ollama.com", + "wikidata_id": "Q124636097", + "use_official_api": False, + "require_api_key": False, + "results": "HTML", +} + +categories = ["it", "repos"] + +base_url = "https://ollama.com" + +results_xpath = '//li[@x-test-model]' +title_xpath = './/span[@x-test-search-response-title]/text()' +content_xpath = './/p[@class="max-w-lg break-words text-neutral-800 text-md"]/text()' +url_xpath = './a/@href' +publish_date_xpath = './/span[contains(@class, "flex items-center")]/@title' + + +def request(query, params): + query_params = {"q": query} + + params['url'] = f"{base_url}/search?{urlencode(query_params)}" + return params + + +def response(resp) -> EngineResults: + res = EngineResults() + + dom = html.fromstring(resp.text) + + for item in eval_xpath_list(dom, results_xpath): + published_date = None + try: + published_date = datetime.strptime( + extract_text(eval_xpath(item, publish_date_xpath)), "%b %d, %Y %I:%M %p %Z" + ) + except ValueError: + pass + + res.add( + res.types.MainResult( + title=extract_text(eval_xpath(item, title_xpath)), + content=extract_text(eval_xpath(item, content_xpath)), + url=f"{base_url}{eval_xpath_getindex(item, url_xpath, 0)}", + publishedDate=published_date, + ) + ) + + return res diff --git a/searx/settings.yml b/searx/settings.yml index d8d5f4170..96a0c07cb 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -1405,6 +1405,11 @@ engines: shortcut: od disabled: true + - name: ollama + engine: ollama + shortcut: ollama + disabled: true + - name: openairedatasets engine: json_engine paging: true |