Ashkchamp commited on
Commit
464ecb2
Β·
verified Β·
1 Parent(s): 53602c7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -14
app.py CHANGED
@@ -1,4 +1,6 @@
 
1
  import os, re, validators, streamlit as st
 
2
  from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, VideoUnavailable
3
  from langchain.prompts import PromptTemplate
4
  from langchain.chains.summarize import load_summarize_chain
@@ -7,22 +9,19 @@ from langchain.schema import Document
7
  from langchain_community.document_loaders import UnstructuredURLLoader
8
  from langchain.document_loaders import PyPDFLoader
9
 
10
- # ───────────────────────── STREAMLIT CONFIG ──────────────────────────
 
 
 
 
11
  st.set_page_config(page_title="LangChain Summarizer", page_icon="🦜")
12
  st.title("🦜 LangChain: Summarize YT / Webpage / PDF")
13
 
14
- # ──────────────────────────── API KEY INPUT ──────────────────────────
15
- with st.sidebar:
16
- st.header("API keys")
17
- groq_api_key = st.text_input("Groq API Key", type="password")
18
- if groq_api_key:
19
- os.environ["GROQ_API_KEY"] = groq_api_key # for libraries
20
-
21
- # ───────────────────── PLACEHOLDERS / FILE & URL INPUT ───────────────
22
  generic_url = st.text_input("Paste a YouTube / web URL here:")
23
  uploaded_file = st.file_uploader("…or upload a PDF", type=["pdf"])
24
 
25
- # ────────────────────────── UTILITY FUNCTIONS ────────────────────────
26
  def get_video_id(url: str) -> str | None:
27
  m = re.search(r"(?:v=|\/)([0-9A-Za-z_-]{11})", url)
28
  return m.group(1) if m else None
@@ -35,9 +34,14 @@ SUMMARY_PROMPT = PromptTemplate(
35
  def build_llm() -> ChatGroq:
36
  """Instantiate ChatGroq once and cache it in session_state."""
37
  if "llm" not in st.session_state:
 
 
 
 
 
38
  st.session_state.llm = ChatGroq(
39
  model="llama3-70b-8192",
40
- groq_api_key=os.environ["GROQ_API_KEY"],
41
  )
42
  return st.session_state.llm
43
 
@@ -46,10 +50,10 @@ def summarize(docs):
46
  chain = load_summarize_chain(llm, chain_type="stuff", prompt=SUMMARY_PROMPT)
47
  return chain({"input_documents": docs})["output_text"]
48
 
49
- # ───────────────────────────── MAIN ACTION ───────────────────────────
50
  if st.button("Summarize"):
51
- if not groq_api_key:
52
- st.error("Please enter your Groq API key in the sidebar.")
53
  elif not generic_url and not uploaded_file:
54
  st.error("Provide a URL or upload a PDF, then press Summarize.")
55
  else:
 
1
+ # app.py – Streamlit Summarizer (dotenv version)
2
  import os, re, validators, streamlit as st
3
+ from dotenv import load_dotenv # ← NEW
4
  from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, VideoUnavailable
5
  from langchain.prompts import PromptTemplate
6
  from langchain.chains.summarize import load_summarize_chain
 
9
  from langchain_community.document_loaders import UnstructuredURLLoader
10
  from langchain.document_loaders import PyPDFLoader
11
 
12
+ # ─────────────── load variables from .env (runs before anything else)
13
+ load_dotenv() # looks for .env in project root
14
+ GROQ_KEY = os.getenv("GROQ_API_KEY") # expect GROQ_API_KEY=xxx in .env
15
+
16
+ # ────────────────────────── STREAMLIT CONFIG ────────────────────────
17
  st.set_page_config(page_title="LangChain Summarizer", page_icon="🦜")
18
  st.title("🦜 LangChain: Summarize YT / Webpage / PDF")
19
 
20
+ # ───────────────────── PLACEHOLDERS / FILE & URL INPUT ──────────────
 
 
 
 
 
 
 
21
  generic_url = st.text_input("Paste a YouTube / web URL here:")
22
  uploaded_file = st.file_uploader("…or upload a PDF", type=["pdf"])
23
 
24
+ # ────────────────────────── UTILITY FUNCTIONS ───────────────────────
25
  def get_video_id(url: str) -> str | None:
26
  m = re.search(r"(?:v=|\/)([0-9A-Za-z_-]{11})", url)
27
  return m.group(1) if m else None
 
34
  def build_llm() -> ChatGroq:
35
  """Instantiate ChatGroq once and cache it in session_state."""
36
  if "llm" not in st.session_state:
37
+ if not GROQ_KEY:
38
+ raise RuntimeError(
39
+ "❌ Groq API key not found. "
40
+ "Add GROQ_API_KEY to a `.env` file or the environment."
41
+ )
42
  st.session_state.llm = ChatGroq(
43
  model="llama3-70b-8192",
44
+ groq_api_key=GROQ_KEY,
45
  )
46
  return st.session_state.llm
47
 
 
50
  chain = load_summarize_chain(llm, chain_type="stuff", prompt=SUMMARY_PROMPT)
51
  return chain({"input_documents": docs})["output_text"]
52
 
53
+ # ───────────────────────────── MAIN ACTION ──────────────────────────
54
  if st.button("Summarize"):
55
+ if not GROQ_KEY:
56
+ st.error("Groq key missing. Set **GROQ_API_KEY** in your `.env`.")
57
  elif not generic_url and not uploaded_file:
58
  st.error("Provide a URL or upload a PDF, then press Summarize.")
59
  else: