mirror of
https://github.com/open-webui/open-webui.git
synced 2026-05-05 18:38:17 -05:00
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
import logging
|
|
from typing import Optional, Literal
|
|
import requests
|
|
|
|
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
|
|
|
|
"""
|
|
|
|
# Handle PersistentConfig object
|
|
if hasattr(api_key, '__str__'):
|
|
api_key = str(api_key)
|
|
|
|
if hasattr(api_url, '__str__'):
|
|
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',
|
|
}
|
|
|
|
# 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 = json_response.get('results', [])
|
|
|
|
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 []
|