pgupta212-llm's picture
Update app.py
2c5387f verified
import streamlit as st
import os
import requests
from bs4 import BeautifulSoup
from dotenv import load_dotenv
import openai
API_KEY = os.getenv('OPENAI_API_KEY')
# Initialize OpenAI API
if not API_KEY:
st.error("API key not found. Please add it to the env.")
else:
openai.api_key = API_KEY
# Function to fetch the web content
# Define function to fetch webpage content
def fetch_web_content(url):
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
# Step 1: Find all paragraph tags
paragraph_elements = soup.find_all('p')
# Step 2: Extract text content from each paragraph tag
paragraphs = [p.get_text() for p in paragraph_elements]
return '\n'.join(paragraphs)
except requests.RequestException as e:
st.error(f"Error fetching URL: {e}")
return ""
# Function to generate the messages for the OpenAI API request
def messages_for(web_content):
system_prompt = "You are an assistant that analyzes the contents of a website \
and provides a short summary, ignoring text that might be navigation related. \
Respond in markdown."
user_prompt = "The contents of this website are as follows; please provide a short summary of this website in markdown. \
If it includes news or announcements, then summarize these too.\n\n"
user_prompt += web_content
return [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
# summarize the text
def summarize_text(text):
if not text:
return "no content to summarize"
try:
response = openai.chat.completions.create(
model = "gpt-4o-mini",
messages = messages_for(text)
)
summary = response.choices[0].message.content.strip()
return summary
except Exception as e:
st.error(f"Error with OpenAI API: {e}")
return "Error generating summary."
# Streamlit App UI
st.title("Web Content Summarizer")
st.write("Enter a URL to get a concise summary of the content.")
# User input for URL
url = st.text_input("Enter the URL:")
# Submit button
if st.button("Summarize"):
if url:
st.info("Fetching content...")
web_content = fetch_web_content(url)
if web_content:
st.success("Content fetched successfully!")
st.info("Generating summary...")
summary = summarize_text(web_content)
st.subheader("Summary:")
st.write(summary)
else:
st.warning("Please enter a valid URL.")
# Run this app with: streamlit run app.py