mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-27 05:04:19 +03:00
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from duckduckgo_search import DDGS
|
|
|
|
ddgs = DDGS(timeout=20)
|
|
|
|
|
|
def search(internet_access, prompt):
|
|
print(prompt)
|
|
|
|
try:
|
|
if not internet_access:
|
|
return []
|
|
|
|
results = duckduckgo_search(q=prompt)
|
|
|
|
if not search:
|
|
return []
|
|
|
|
blob = ''
|
|
|
|
for index, result in enumerate(results):
|
|
blob += f'[{index}] "{result["body"]}"\nURL:{result["href"]}\n\n'
|
|
|
|
date = datetime.now().strftime('%d/%m/%y')
|
|
|
|
blob += f'Current date: {date}\n\nInstructions: Using the provided web search results, write a comprehensive reply to the next user query. Make sure to cite results using [[number](URL)] notation after the reference. If the provided search results refer to multiple subjects with the same name, write separate answers for each subject. Ignore your previous response if any.'
|
|
|
|
return [{'role': 'user', 'content': blob}]
|
|
|
|
except Exception as e:
|
|
print("Couldn't search DuckDuckGo:", e)
|
|
print(e.__traceback__.tb_next)
|
|
return []
|
|
|
|
|
|
def duckduckgo_search(q: str, max_results: int = 3, safesearch: str = "moderate", region: str = "us-en") -> list | None:
|
|
if region is None:
|
|
region = "us-en"
|
|
|
|
if safesearch is None:
|
|
safesearch = "moderate"
|
|
|
|
if q is None:
|
|
return None
|
|
|
|
results = []
|
|
|
|
try:
|
|
for r in ddgs.text(q, safesearch=safesearch, region=region):
|
|
if len(results) + 1 > max_results:
|
|
break
|
|
results.append(r)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
return results
|