mirror of
https://github.com/open-webui/open-webui.git
synced 2026-11-15 18:55:07 +03:00
29b4af6b98
Knowledge searches wrote the names and sources of the files they found to the server log at info level, and the SerpApi, Serply, Firecrawl, Yandex, Kagi, Mojeek and external web search engines wrote their whole results there, snippets included. Anyone who can read the logs could see what users looked up and what the model was given. These lines now log at debug, the same as the search queries, so they only show with GLOBAL_LOG_LEVEL=DEBUG. Fixes #34129
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import logging
|
|
from typing import List, Optional
|
|
|
|
import requests
|
|
from fastapi import Request
|
|
from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
|
|
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
|
|
from open_webui.utils.headers import include_user_info_headers
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def search_external(
|
|
request: Request,
|
|
external_url: str,
|
|
external_api_key: str,
|
|
query: str,
|
|
count: int,
|
|
filter_list: Optional[List[str]] = None,
|
|
user=None,
|
|
) -> List[SearchResult]:
|
|
try:
|
|
headers = {
|
|
# LICENSE covers this Open WebUI user-agent identifier.
|
|
# Do not alter, remove, obscure, or replace it except as LICENSE permits:
|
|
# https://docs.openwebui.com/license.
|
|
'User-Agent': 'Open WebUI (https://github.com/open-webui/open-webui) RAG Bot',
|
|
'Authorization': f'Bearer {external_api_key}',
|
|
}
|
|
headers = include_user_info_headers(headers, user)
|
|
|
|
chat_id = getattr(request.state, 'chat_id', None)
|
|
if chat_id:
|
|
headers[FORWARD_SESSION_INFO_HEADER_CHAT_ID] = str(chat_id)
|
|
|
|
response = requests.post(
|
|
external_url,
|
|
headers=headers,
|
|
json={
|
|
'query': query,
|
|
'count': count,
|
|
},
|
|
)
|
|
response.raise_for_status()
|
|
results = response.json()
|
|
if filter_list:
|
|
results = get_filtered_results(results, filter_list)
|
|
results = [
|
|
SearchResult(
|
|
link=result.get('link'),
|
|
title=result.get('title'),
|
|
snippet=result.get('snippet'),
|
|
)
|
|
for result in results[:count]
|
|
]
|
|
log.debug('External search results: %s', results)
|
|
return results
|
|
except Exception as e:
|
|
log.error(f'Error in External search: {e}')
|
|
return []
|