mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-07 00:20:53 -05:00
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
|
|
from open_webui.utils.session_pool import get_session
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
async def search_openserp(
|
|
base_url: str,
|
|
query: str,
|
|
count: int,
|
|
filter_list: list[str | None] | None = None,
|
|
) -> list[SearchResult]:
|
|
"""Query an OpenSERP instance and return normalised results.
|
|
|
|
OpenSERP aggregates results from 6 engines (google, bing, yandex,
|
|
baidu, duckduckgo, ecosia) at once via ``/mega/search``.
|
|
|
|
No API key is required -- only a reachable OpenSERP base URL.
|
|
"""
|
|
url = f'{base_url.rstrip("/")}/mega/search'
|
|
params = {'text': query, 'limit': count}
|
|
|
|
log.debug('searching OpenSERP at %s', url)
|
|
|
|
session = await get_session()
|
|
async with session.get(url, params=params) as response:
|
|
response.raise_for_status()
|
|
payload = await response.json()
|
|
|
|
results = payload.get('results', [])
|
|
if filter_list:
|
|
results = get_filtered_results(results, filter_list)
|
|
|
|
return [
|
|
SearchResult(
|
|
link=item.get('url', ''),
|
|
title=item.get('title'),
|
|
snippet=item.get('snippet'),
|
|
)
|
|
for item in results[:count]
|
|
]
|