WebBot / app.py
Koomemartin's picture
Update app.py
4294728 verified
raw
history blame
3.03 kB
import streamlit as st
from bs4 import BeautifulSoup
import requests
from groq import Groq
import os
from dotenv import load_dotenv
class Website:
def __init__(self, url):
"""
Create this Website object from the given url using the BeautifulSoup library
"""
self.url = url
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
self.title = soup.title.string if soup.title else "No title found"
for irrelevant in soup.body(["script", "style", "img", "input"]):
irrelevant.decompose()
self.text = soup.body.get_text(separator="\n", strip=True)
# Initialize Groq client
# load_dotenv()
api_key = os.getenv('GROQ_API_KEY')
client = Groq(api_key=api_key)
# Streamlit UI
st.title("Welcome to WebBot🌍")
st.write("Enter a website URL and ask questions about its content!")
# Input fields
url = st.text_input("Website URL:", " " )
user_query = st.text_area("What would you like to know about this website")
if user_query:
# Scrape website content
with st.spinner("Scraping website..."):
website = Website(url)
if "Error" in website.title:
st.error("Failed to load the website. Please check the URL.")
else:
st.success("Website loaded successfully!")
st.write(f"**Website Title:** {website.title}")
# Call Groq API for processing
st.write("Querying the website...")
with st.spinner("Processing your query..."):
try:
chat_streaming = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant specializing in extracting and analyzing website content. Answer questions based on the provided website's content. Ensure responses are clear, concise, and formatted in Markdown for better readability. use your knowledge to add relevant inforation to thr users query"},
{"role": "user", "content": f"{user_query} \n Here's the content:\n{website.text}"}
],
model="llama3-groq-70b-8192-tool-use-preview",
temperature=0.9,
max_tokens=2042,
top_p=1,
stream=True,
)
# st.write('Passed model')
except Exception as e:
st.error(f"Failed to process query: {e}")
response = ""
try:
for chunk in chat_streaming:
content = chunk.choices[0].delta.content
if content: # Ensure content is not None
response += content
st.write("🤖:")
st.write(response)
except Exception as e:
st.error(f"Failed to process query: {e}")
st.markdown("-----")
st.write("© 2024 Application")
st.warning("Disclaimer: This application currently does not support Javascript websites!!")