Spaces:
Runtime error
Runtime error
import requests | |
import json | |
from chains.azure_openai import CustomAzureOpenAI | |
from chains.decision_maker import DecisionMaker | |
from chains.simple_chain import SimpleChain | |
from bs4 import BeautifulSoup | |
from chains.summary import WebSummary | |
from langchain.utilities.google_search import GoogleSearchAPIWrapper | |
from config import OPENAI_API_TYPE, OPENAI_API_VERSION, OPENAI_API_KEY, OPENAI_API_BASE, DEPLOYMENT_ID, GOOGLE_API_KEY, GOOGLE_CSE_ID | |
class QAIBotChain: | |
def __init__(self): | |
self.llm = CustomAzureOpenAI(deployment_name=DEPLOYMENT_ID, | |
openai_api_type=OPENAI_API_TYPE, | |
openai_api_base=OPENAI_API_BASE, | |
openai_api_version=OPENAI_API_VERSION, | |
openai_api_key=OPENAI_API_KEY, | |
temperature=0.0) | |
self.decision = DecisionMaker() | |
self.simple_chain = SimpleChain() | |
self.summary = WebSummary() | |
def run(self, question, custom_web_search=False, num_results=4): | |
if custom_web_search: | |
params = { | |
"q": question, | |
"v": "\{539C9DC1-663A-418D-82A4-662D34EE34BC\}", | |
"p": 10, | |
"l": "en", | |
"s": "{EACE8DB5-668F-4357-9782-405070D28D11}", | |
"itemid": "\{91F4101E-B1F3-4905-A832-96F703D3FBB1\}", | |
} | |
req = requests.get( | |
"https://fptsoftware.com//sxa/search/results/?", | |
params=params | |
) | |
res = json.loads(req.text) | |
results = [] | |
for r in res["Results"][:num_results]: | |
link = "https://fptsoftware.com" + r["Url"] | |
results.append({"link": link}) | |
else: | |
decision = self.decision.predict(question=question) | |
if "LLM Model" in decision: | |
ai_response = self.simple_chain.predict(question=question) | |
return ai_response, False | |
else: | |
search = GoogleSearchAPIWrapper(google_api_key=GOOGLE_API_KEY, google_cse_id=GOOGLE_CSE_ID) | |
results = search.results(question, num_results=num_results) | |
reference_results = [] | |
display_append = [] | |
for idx, result in enumerate(results): | |
try: | |
head = requests.head(result['link']) | |
if "text/html" in head.headers['Content-Type']: | |
html_response = requests.get(result['link']) | |
soup = BeautifulSoup(html_response.content, "html.parser") | |
if custom_web_search: | |
title = result["title"] | |
else: | |
title = soup.find_all('title')[0].get_text() | |
try: | |
text = soup.get_text() | |
lines = (line.strip() for line in text.splitlines()) | |
# break multi-headlines into a line each | |
chunks = (phrase.strip() for line in lines for phrase in line.split(" ")) | |
# drop blank lines | |
text = '\n'.join(chunk for chunk in chunks if chunk) | |
summary = self.web_summary.predict(question=question, doc=text) | |
print("Can access", result['link']) | |
except: | |
print("Cannot access ", result['link']) | |
reference_results.append([summary, result['link']]) | |
display_append.append( | |
f'<a href=\"{result["link"]}\" target=\"_blank\">{idx + 1}. {title}</a>' | |
) | |
except: | |
continue | |
return reference_results, display_append |