Files
Classic298 8d7b71f6cc fix: search queries no longer show up in the default server log (#33701)
The external reranker, Exa and Ollama web search wrote the full user query to the server log at info level, and reusing generated search queries logged them as well. Those lines no longer include the query. A failing external reranker also logged the provider URL in its error message along with a stack trace; it now logs only the error type.

Co-authored-by: manooll <16244686+manooll@users.noreply.github.com>
2026-11-04 06:00:28 +09:00

57 lines
1.7 KiB
Python

import logging
import requests
from open_webui.retrieval.web.main import SearchResult
log = logging.getLogger(__name__)
EXA_API_BASE = 'https://api.exa.ai'
def search_exa(
api_key: str,
query: str,
count: int,
filter_list: list[str] | None = None,
max_content_length: int | None = None,
) -> list[SearchResult]:
"""Search using Exa Search API and return the results as a list of SearchResult objects.
Args:
api_key (str): A Exa Search API key
query (str): The query to search for
count (int): Number of results to return
filter_list (list[str] | None): List of domains to filter results by
max_content_length (int | None): Maximum characters per result; None leaves text unlimited.
"""
log.info('Searching with Exa')
headers = {'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'}
payload = {
'query': query,
'numResults': count or 5,
'includeDomains': filter_list,
'contents': {'text': {'maxCharacters': max_content_length} if max_content_length is not None else True},
'type': 'auto', # Use the auto search type (keyword or neural)
}
try:
response = requests.post(f'{EXA_API_BASE}/search', headers=headers, json=payload)
response.raise_for_status()
data = response.json()
results = data['results']
log.info('Found %s results', len(results))
return [
SearchResult(
link=result['url'],
title=result['title'],
snippet=(result.get('text') or '')[:max_content_length],
)
for result in results
]
except Exception as e:
log.error(f'Error searching Exa: {e}')
return []