Files
Classic298 4b088a4a9b fix: Perplexity Search ignores the domain filter list (#32182)
With Perplexity Search as the web search engine, the Domain Filter List had no effect: blocked domains still showed up in the results the model got, and an allowlist let every result through. The filter now applies to Perplexity Search results as it does for the other search engines.

Fixes #32005
2026-10-10 19:54:25 +04:00

69 lines
2.1 KiB
Python

import logging
from typing import Literal, Optional
import requests
from open_webui.env import VERSION
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_perplexity_search(
api_key: str,
query: str,
count: int,
filter_list: Optional[list[str]] = None,
api_url: str = 'https://api.perplexity.ai/search',
user=None,
) -> list[SearchResult]:
"""Search using Perplexity API and return the results as a list of SearchResult objects.
Args:
api_key (str): A Perplexity API key
query (str): The query to search for
count (int): Maximum number of results to return
filter_list (Optional[list[str]]): List of domains to filter results
api_url (str): Custom API URL (defaults to https://api.perplexity.ai/search)
user: Optional user object for forwarding user info headers
"""
api_key = str(api_key)
api_url = str(api_url)
try:
url = api_url
# Create payload for the API call
payload = {
'query': query,
'max_results': count,
}
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
'X-Pplx-Integration': f'open-webui/{VERSION}',
}
# Forward user info headers if user is provided
if user is not None:
headers = include_user_info_headers(headers, user)
# Make the API request
response = requests.request('POST', url, json=payload, headers=headers)
# Parse the JSON response
json_response = response.json()
# Extract citations from the response
results = get_filtered_results(json_response.get('results', []), filter_list)
return [
SearchResult(link=result['url'], title=result['title'], snippet=result['snippet']) for result in results
]
except Exception as e:
log.error(f'Error searching with Perplexity Search API: {e}')
return []