Spaces:
Sleeping
Sleeping
| import os | |
| import streamlit as st | |
| from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate | |
| from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace | |
| from youtube_transcript_api import YouTubeTranscriptApi | |
| from langchain_community.document_loaders import YoutubeLoader | |
| from langchain_google_genai import GoogleGenerativeAI,ChatGoogleGenerativeAI | |
| from youtube_transcript_api._errors import TranscriptsDisabled | |
| gemini_token = os.environ.get("gemini") | |
| os.environ["GOOGLE_API_KEY"] = gemini_token | |
| st.set_page_config(page_title="π¬ Tube2Insight", page_icon="π₯", layout="wide") | |
| st.markdown(""" | |
| <style> | |
| .stApp { background-color: #f7f9fc; } | |
| .video-card { | |
| background-color: #ffffff; | |
| border: 2px solid #e0e0e0; | |
| padding: 20px; | |
| border-radius: 15px; | |
| text-align: center; | |
| box-shadow: 2px 2px 10px #ddd; | |
| } | |
| .video-card:hover { | |
| border-color: #FF4B4B; | |
| box-shadow: 3px 3px 12px #bbb; | |
| } | |
| </style> | |
| """, unsafe_allow_html=True) | |
| st.markdown("<h1 style='text-align: center; color: #FF4B4B;'>π¬ Tube2Insight</h1>", unsafe_allow_html=True) | |
| st.markdown("### Paste a YouTube link below to get an instant summary π") | |
| video_url = st.text_input("πΊ YouTube Video URL") | |
| if st.button("π Summarize"): | |
| if not video_url: | |
| st.warning("Please provide a video link.") | |
| else: | |
| with st.spinner("π Fetching transcript..."): | |
| try: | |
| docs = YoutubeLoader.from_youtube_url(video_url).load() | |
| transcript = docs[0].page_content | |
| st.success("β Transcript loaded!") | |
| except Exception as e: | |
| st.error(f"Error loading video: {e}") | |
| st.stop() | |
| with st.expander("π View Transcript"): | |
| st.write(transcript) | |
| llm = ChatGoogleGenerativeAI( | |
| model="gemini-2.0-flash", | |
| temperature=0.5, | |
| max_output_tokens=512 | |
| ) | |
| prompt = ChatPromptTemplate.from_messages([ | |
| SystemMessagePromptTemplate.from_template("You are a helpful assistant summarizing YouTube transcripts."), | |
| HumanMessagePromptTemplate.from_template("{transcript}") | |
| ]) | |
| messages = prompt.format_messages(transcript=transcript) | |
| with st.spinner("π§ Summarizing with Gemini 2.0 Flash..."): | |
| response = llm.invoke(messages) | |
| st.markdown("### π Summary") | |
| st.success(response.content) | |
| st.markdown("---") | |
| st.markdown( | |
| "<p style='text-align: center; color: gray;'>π Built with LangChain + Gemini + Streamlit </p>", | |
| unsafe_allow_html=True | |
| ) | |