Coverage for open_webui/retrieval/web/external.py: 30%
26 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
1import logging
2from typing import List, Optional
4import requests
5from fastapi import Request
6from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
7from open_webui.retrieval.web.main import SearchResult, get_filtered_results
8from open_webui.utils.headers import include_user_info_headers
10log = logging.getLogger(__name__)
13def search_external(
14 request: Request,
15 external_url: str,
16 external_api_key: str,
17 query: str,
18 count: int,
19 filter_list: Optional[List[str]] = None,
20 user=None,
21) -> List[SearchResult]:
22 try:
23 headers = {
24 # LICENSE covers this Open WebUI user-agent identifier.
25 # Do not alter, remove, obscure, or replace it except as LICENSE permits:
26 # https://docs.openwebui.com/license.
27 'User-Agent': 'Open WebUI (https://github.com/open-webui/open-webui) RAG Bot',
28 'Authorization': f'Bearer {external_api_key}',
29 }
30 headers = include_user_info_headers(headers, user)
32 chat_id = getattr(request.state, 'chat_id', None)
33 if chat_id:
34 headers[FORWARD_SESSION_INFO_HEADER_CHAT_ID] = str(chat_id)
36 response = requests.post(
37 external_url,
38 headers=headers,
39 json={
40 'query': query,
41 'count': count,
42 },
43 )
44 response.raise_for_status()
45 results = response.json()
46 if filter_list:
47 results = get_filtered_results(results, filter_list)
48 results = [
49 SearchResult(
50 link=result.get('link'),
51 title=result.get('title'),
52 snippet=result.get('snippet'),
53 )
54 for result in results[:count]
55 ]
56 log.info('External search results: %s', results)
57 return results
58 except Exception as e:
59 log.error(f'Error in External search: {e}')
60 return []