import os import validators import streamlit as st st.set_page_config(page_title="LangChain: Summarize Text From YT or Website", page_icon="🦜") from langchain.prompts import PromptTemplate from langchain_groq import ChatGroq from langchain.chains.summarize import load_summarize_chain from langchain_community.document_loaders import YoutubeLoader, UnstructuredURLLoader st.title("Last-Minute??? No Worries! Summarize Text From YT or Website :)") st.subheader('Summarize URL') default_api_key = os.getenv("default_api_key", "") # Sidebar Inputs with st.sidebar: # Option to input default API key default_api_key_option = st.checkbox("Use Owner's API Key", value=False) if default_api_key_option: groq_api_key = default_api_key else: groq_api_key = st.text_input("Groq API Key", value="", type="password", help="Enter your API key") # Additional user input text st.sidebar.text("You can also input your own API key above.") generic_url = st.text_input("URL", label_visibility="collapsed") prompt_template = """ Provide a summary of the following content in 300 words: Content:{text} """ prompt = PromptTemplate(template=prompt_template, input_variables=["text"]) # Summarization if st.button("Summarize the Content from YT or Website"): if not groq_api_key.strip() or not generic_url.strip(): st.error("Please provide the information to get started") elif not validators.url(generic_url): st.error("Please enter a valid Url. It can be a YouTube video URL or website URL") else: try: llm = ChatGroq(model="Gemma-7b-It", groq_api_key=groq_api_key) with st.spinner("Fetching content..."): if "youtube.com" in generic_url: # Fetch video content loader = YoutubeLoader.from_youtube_url(generic_url, add_video_info=True) else: # Fetch content from a regular website loader = UnstructuredURLLoader(urls=[generic_url], ssl_verify=False, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"}) docs = loader.load() # Load content from the URL # Summarization chain setup chain = load_summarize_chain(llm, chain_type="stuff", prompt=prompt) output_summary = chain.run(docs) st.success(output_summary) # Display summarized output except Exception as e: st.exception(f"Exception: {e}")