|
|
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 |
|
|
|
|
|
|
|
|
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") |
|
|
if hf_token: |
|
|
os.environ["HUGGINGFACEHUB_API_KEY"] = hf_token |
|
|
|
|
|
url = st.text_input("Enter YouTube Video URL:") |
|
|
|
|
|
|
|
|
@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 |
|
|
) |
|
|
return ChatHuggingFace(llm=deep_seek_model) |
|
|
|
|
|
deepseek = load_deepseek_model() |
|
|
|
|
|
if st.button("Extract and Summarize"): |
|
|
if url: |
|
|
try: |
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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.") |
|
|
|