simrahkeshwani's picture
Upload app.py
4b73a30 verified
# Importing Libraries
from langchain_community.document_loaders import YoutubeLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import streamlit as st
st.title ("Video Summarizer")
# Loading Video
input_video = st.chat_input("Enter the video url: ")
if input_video:
with st.chat_message("user"):
st.write(input_video)
loader = YoutubeLoader.from_youtube_url(
input_video, add_video_info=True
)
docs = loader.load()
# Splitting Video
r_splitter = RecursiveCharacterTextSplitter(
chunk_size=400,
chunk_overlap= 20
)
splits = r_splitter.split_documents(docs)
# Embedding Video
embedding = HuggingFaceEmbeddings()
# Vector Storing Video
vectordb = Chroma.from_documents(
documents=splits,
embedding=embedding,
)
# Composing Chain
llm = ChatGoogleGenerativeAI(model = "gemini-pro", temperature= 0, google_api_key="AIzaSyAxmFrjhr4NRY2eZWwFl3xNVt_TM1aBDrA")
template_string = """
You are an assistant for summarizing the content in the video.
Use the pieces of retrieved context to summarize the video.
Summarize the text in the form of notes under headings.
Context: {context}
Question: {question}
"""
prompt_template = ChatPromptTemplate.from_template(template_string)
# Chain for Video
retriever = vectordb.as_retriever()
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt_template
| llm
| StrOutputParser()
)
# Input for Video
result = rag_chain.invoke("Summarize the video in the form of notes.")
with st.chat_message("assistant"):
st.write(result)