Spaces:
Runtime error
Runtime error
import os | |
import openai | |
import gradio as gr | |
import requests | |
from bs4 import BeautifulSoup | |
import urllib.parse | |
try: | |
from dotenv import load_dotenv | |
load_dotenv() | |
except ImportError: | |
pass # In production, python-dotenv may not be installed | |
openai.api_key = os.getenv("OPEN_API_KEY") | |
class Conversation: | |
def __init__(self): | |
self.messages = [] | |
# def is_valid_url(self, url): | |
# try: | |
# result = urlparse(url) | |
# return True if all([result.scheme, result.netloc]) else False | |
# except ValueError: | |
# return False | |
def to_valid_url(self, input_string): | |
url = input_string.strip() | |
parsed_url = urllib.parse.urlparse(url) | |
if not parsed_url.scheme: | |
url = "http://" + url | |
parsed_url = urllib.parse.urlparse(url) | |
if not parsed_url.netloc: | |
raise ValueError("Invalid input, cannot convert to valid URL") | |
return parsed_url.geturl() | |
def get_data(self, old_url): | |
# ... your existing get_data implementation ... | |
# Replace `messages` with `self.messages` | |
url = self.to_valid_url(old_url) | |
self.messages | |
html = requests.get(url).text | |
doc = BeautifulSoup(html, 'html.parser') | |
headings_1 = [e.text for e in doc.find_all('h1')] | |
headings_2 = [e.text for e in doc.find_all('h2')] | |
# headings_3 = [e.text for e in doc.find_all('h3')] | |
paragraphs = [e.text for e in doc.find_all('p')] | |
# spans = [e.text for e in doc.find_all('span')] | |
joined_paragraphs = (' '.join(paragraphs)) | |
if len(joined_paragraphs) > 7500: | |
paragraphs = joined_paragraphs[:5000] | |
self.messages = [] | |
self.messages.append({'role': 'system', 'content': "You are a helpful assistant that must answer questions about a website."}) | |
self.messages.append({'role': 'system', 'content': f"here are the h1s - {headings_1}"}) | |
self.messages.append({'role': 'system', 'content': f"here are the h2s - {headings_2}"}) | |
# messages.append({'role': 'system', 'content': f"here are the h3s - {headings_3}"}) | |
self.messages.append({'role': 'system', 'content': f"here are the paragraphs - {paragraphs}"}) | |
# messages.append({'role': 'system', 'content': f"here are the spans - {spans}"}) | |
return self.messages | |
def ask_chatbot(self, input): | |
# ... your existing ask_chatbot implementation ... | |
# Replace `messages` with `self.messages` | |
if input: | |
self.messages.append({"role": "user", "content": input}) | |
chat = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo", messages=self.messages | |
) | |
reply = chat.choices[0].message.content | |
self.messages.append({"role": "assistant", "content": reply}) | |
return reply | |
def user(self, user_message, history): | |
# ... your existing user implementation ... | |
# Replace `messages` with `self.messages` | |
return "", history + [[user_message, None]] | |
def bot(self, history): | |
# ... your existing bot implementation ... | |
# Replace `messages` with `self.messages` | |
user_message = history[-1][0] | |
try: | |
bot_message = self.ask_chatbot(user_message) | |
except NameError: | |
bot_message = "Please try again" | |
history[-1][1] = bot_message | |
return history |