refac
This commit is contained in:
@@ -5,13 +5,13 @@ import requests
|
||||
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
|
||||
|
||||
MODELS = Literal[
|
||||
"sonar",
|
||||
"sonar-pro",
|
||||
"sonar-reasoning",
|
||||
"sonar-reasoning-pro",
|
||||
"sonar-deep-research",
|
||||
'sonar',
|
||||
'sonar-pro',
|
||||
'sonar-reasoning',
|
||||
'sonar-reasoning-pro',
|
||||
'sonar-deep-research',
|
||||
]
|
||||
SEARCH_CONTEXT_USAGE_LEVELS = Literal["low", "medium", "high"]
|
||||
SEARCH_CONTEXT_USAGE_LEVELS = Literal['low', 'medium', 'high']
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -22,8 +22,8 @@ def search_perplexity(
|
||||
query: str,
|
||||
count: int,
|
||||
filter_list: Optional[list[str]] = None,
|
||||
model: MODELS = "sonar",
|
||||
search_context_usage: SEARCH_CONTEXT_USAGE_LEVELS = "medium",
|
||||
model: MODELS = 'sonar',
|
||||
search_context_usage: SEARCH_CONTEXT_USAGE_LEVELS = 'medium',
|
||||
) -> list[SearchResult]:
|
||||
"""Search using Perplexity API and return the results as a list of SearchResult objects.
|
||||
|
||||
@@ -38,66 +38,63 @@ def search_perplexity(
|
||||
"""
|
||||
|
||||
# Handle PersistentConfig object
|
||||
if hasattr(api_key, "__str__"):
|
||||
if hasattr(api_key, '__str__'):
|
||||
api_key = str(api_key)
|
||||
|
||||
try:
|
||||
url = "https://api.perplexity.ai/chat/completions"
|
||||
url = 'https://api.perplexity.ai/chat/completions'
|
||||
|
||||
# Create payload for the API call
|
||||
payload = {
|
||||
"model": model,
|
||||
"messages": [
|
||||
'model': model,
|
||||
'messages': [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "You are a search assistant. Provide factual information with citations.",
|
||||
'role': 'system',
|
||||
'content': 'You are a search assistant. Provide factual information with citations.',
|
||||
},
|
||||
{"role": "user", "content": query},
|
||||
{'role': 'user', 'content': query},
|
||||
],
|
||||
"temperature": 0.2, # Lower temperature for more factual responses
|
||||
"stream": False,
|
||||
"web_search_options": {
|
||||
"search_context_usage": search_context_usage,
|
||||
'temperature': 0.2, # Lower temperature for more factual responses
|
||||
'stream': False,
|
||||
'web_search_options': {
|
||||
'search_context_usage': search_context_usage,
|
||||
},
|
||||
}
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {api_key}",
|
||||
"Content-Type": "application/json",
|
||||
'Authorization': f'Bearer {api_key}',
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
|
||||
# Make the API request
|
||||
response = requests.request("POST", url, json=payload, headers=headers)
|
||||
response = requests.request('POST', url, json=payload, headers=headers)
|
||||
|
||||
# Parse the JSON response
|
||||
json_response = response.json()
|
||||
|
||||
# Extract citations from the response
|
||||
citations = json_response.get("citations", [])
|
||||
citations = json_response.get('citations', [])
|
||||
|
||||
# Create search results from citations
|
||||
results = []
|
||||
for i, citation in enumerate(citations[:count]):
|
||||
# Extract content from the response to use as snippet
|
||||
content = ""
|
||||
if "choices" in json_response and json_response["choices"]:
|
||||
content = ''
|
||||
if 'choices' in json_response and json_response['choices']:
|
||||
if i == 0:
|
||||
content = json_response["choices"][0]["message"]["content"]
|
||||
content = json_response['choices'][0]['message']['content']
|
||||
|
||||
result = {"link": citation, "title": f"Source {i+1}", "snippet": content}
|
||||
result = {'link': citation, 'title': f'Source {i + 1}', 'snippet': content}
|
||||
results.append(result)
|
||||
|
||||
if filter_list:
|
||||
|
||||
results = get_filtered_results(results, filter_list)
|
||||
|
||||
return [
|
||||
SearchResult(
|
||||
link=result["link"], title=result["title"], snippet=result["snippet"]
|
||||
)
|
||||
SearchResult(link=result['link'], title=result['title'], snippet=result['snippet'])
|
||||
for result in results[:count]
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
log.error(f"Error searching with Perplexity API: {e}")
|
||||
log.error(f'Error searching with Perplexity API: {e}')
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user