import streamlit as st from langchain_community.document_loaders import YoutubeLoader from langchain.chat_models import ChatHuggingFace from langchain.llms import HuggingFaceEndpoint from langchain.schema import HumanMessage import os # Set page layout st.set_page_config(page_title="YouTube Summarizer with DeepSeek", layout="centered") st.title("📺 YouTube Video Summarizer with DeepSeek") hf_token = os.getenv("HF_TOKEN") # For local dev if hf_token: os.environ["HUGGINGFACEHUB_API_KEY"] = hf_token # Input url = st.text_input("Enter YouTube Video URL:") # Connect to DeepSeek-R1 via Nebius @st.cache_resource def load_deepseek_model(): deep_seek_model = HuggingFaceEndpoint( repo_id="deepseek-ai/DeepSeek-R1", provider="nebius", temperature=0.7, max_new_tokens=30, task="conversational", huggingfacehub_api_token=hf_token # ✅ Use your HF token here ) return ChatHuggingFace(llm=deep_seek_model) deepseek = load_deepseek_model() if st.button("Extract and Summarize"): if url: try: # Step 1: Load transcript loader = YoutubeLoader.from_youtube_url(url) data = loader.load() transcript = data[0].page_content if data else "No transcript found." st.subheader("📖 Extracted Transcript") st.text_area("Transcript:", transcript, height=300) # Step 2: Prepare prompt prompt = f"Summarize the following video transcript:\n\n{transcript}" with st.spinner("Summarizing using DeepSeek..."): response = deepseek([HumanMessage(content=prompt)]) summary = response.content.strip() st.subheader("🧠 Summary") st.success(summary) except Exception as e: st.error(f"❌ Error: {str(e)}") else: st.warning("Please enter a valid YouTube URL.")