make internet searching better

pull/1033/head
Commenter123321 8 months ago
parent 3de672d023
commit d719860e2a

@ -0,0 +1,6 @@
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent.parent))
from g4f.gui import run_gui
run_gui()

@ -1,28 +1,56 @@
from requests import get
from datetime import datetime
from duckduckgo_search import DDGS
ddgs = DDGS(timeout=20)
def search(internet_access, prompt):
print(prompt)
try:
if internet_access == False:
if not internet_access:
return []
search = get('https://ddg-api.herokuapp.com/search', params={
'query': prompt['content'],
'limit': 3
})
results = duckduckgo_search(q=prompt)
if not search:
return []
blob = ''
for index, result in enumerate(search.json()):
blob += f'[{index}] "{result["snippet"]}"\nURL:{result["link"]}\n\n'
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.'
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:
return []
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

@ -1,6 +1,8 @@
import g4f
from g4f import BaseProvider
def get_provider(provider: str) -> g4f.Provider.BaseProvider:
def get_provider(provider: str) -> BaseProvider | None:
if isinstance(provider, str):
print(provider)

@ -10,5 +10,4 @@ flask
flask-cors
typing-extensions
PyExecJS
flask
flask-cors
duckduckgo-search
Loading…
Cancel
Save