File size: 1,919 Bytes
5f0e3aa
3c91b66
40839f9
 
 
2eb56fd
9ff5a7a
40839f9
 
5f0e3aa
9ff5a7a
605deea
 
 
40839f9
5f0e3aa
9ff5a7a
40839f9
5f0e3aa
40839f9
 
 
 
5f0e3aa
27df70e
605deea
 
5f0e3aa
40839f9
 
 
5f0e3aa
 
9ff5a7a
 
40839f9
9ff5a7a
 
5f0e3aa
 
 
 
 
40839f9
 
5f0e3aa
 
40839f9
 
5f0e3aa
 
 
 
9ff5a7a
40839f9
5f0e3aa
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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.")