import streamlit as st from rag_youtube_bot import get_transcript, build_rag_chain, ask_question st.set_page_config( page_title="🎥 YouTube RAG Chatbot", page_icon="🤖", layout="wide" ) st.markdown(""" """, unsafe_allow_html=True) st.title("🎥 YouTube RAG Chatbot") st.markdown("##### 🤖 Ask anything about a YouTube video — powered by LangChain + DeepSeek") if "rag_chain" not in st.session_state: st.session_state.rag_chain = None if "transcript" not in st.session_state: st.session_state.transcript = None if "chat_history" not in st.session_state: st.session_state.chat_history = [] # stores (question, answer) pairs st.sidebar.header("🧠 About This App") st.sidebar.write(""" This app uses: - **LangChain + DeepSeek (HuggingFace)** - **RAG (Retrieval-Augmented Generation)** - **YouTube transcripts as knowledge base** """) if st.sidebar.button("🔁 Clear Session"): st.session_state.clear() st.rerun() yt_link = st.text_input("🎬 Enter a YouTube video link:") col1, col2 = st.columns([1, 3]) with col1: fetch_btn = st.button("📜 Fetch Transcript") with col2: st.markdown("") if fetch_btn and yt_link: with st.spinner("Fetching transcript..."): transcript = get_transcript(yt_link) if transcript: st.session_state.transcript = transcript st.success("✅ Transcript fetched successfully!") with st.spinner("Building RAG model..."): st.session_state.rag_chain = build_rag_chain(transcript) st.success("RAG model ready! Ask your questions below 👇") else: st.error("❌ Transcript not available for this video.") if st.session_state.rag_chain: st.subheader("💬 Chat with the Video") for q, a in st.session_state.chat_history: with st.chat_message("user"): st.markdown(f"**You:** {q}") with st.chat_message("assistant"): st.markdown(f"**Bot:** {a}") user_input = st.chat_input("Ask your question here...") if user_input: with st.chat_message("user"): st.markdown(f"**You:** {user_input}") with st.spinner("Thinking... 🤔"): answer = ask_question(st.session_state.rag_chain, user_input) with st.chat_message("assistant"): st.markdown(f"**Bot:** {answer}") st.session_state.chat_history.append((user_input, answer))