From 992069f7f1e050f60902808a9eebb741bd21f806 Mon Sep 17 00:00:00 2001 From: Mmadan128 Date: Wed, 22 Oct 2025 02:34:38 +0530 Subject: [PATCH] yt_chatbot --- .../Yt_chatbot_extension/.gitignore | 1 + .../Yt_chatbot_extension/README.md | 0 .../__pycache__/main.cpython-312.pyc | Bin 0 -> 3860 bytes .../Yt_chatbot_extension/extension/icon.png | Bin 0 -> 13026 bytes .../extension/manifest.json | 12 + .../Yt_chatbot_extension/extension/popup.html | 21 ++ .../Yt_chatbot_extension/extension/popup.js | 33 ++ .../Yt_chatbot_extension/extension/styles.css | 81 +++++ .../Yt_chatbot_extension/langchain.ipynb | 324 ++++++++++++++++++ .../MiniProjects/Yt_chatbot_extension/main.py | 62 ++++ 10 files changed, 534 insertions(+) create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/.gitignore create mode 100644 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/README.md create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/__pycache__/main.cpython-312.pyc create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/icon.png create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/manifest.json create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.html create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.js create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/styles.css create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/langchain.ipynb create mode 100755 Domains/AI-ML/MiniProjects/Yt_chatbot_extension/main.py diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/.gitignore b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/.gitignore new file mode 100755 index 00000000..0c2ad090 --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/.gitignore @@ -0,0 +1 @@ +.env diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/README.md b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/README.md new file mode 100644 index 00000000..e69de29b diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/__pycache__/main.cpython-312.pyc b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/__pycache__/main.cpython-312.pyc new file mode 100755 index 0000000000000000000000000000000000000000..e637e6cb5ea25d63abd4bfdda07b2ec5e8ec7cdb GIT binary patch literal 3860 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 literal 0 HcmV?d00001 diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/icon.png b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..fc523fb8a40f4ffc9356fe76a5a591622a77fdde GIT binary patch literal 13026 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 literal 0 HcmV?d00001 diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/manifest.json b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/manifest.json new file mode 100755 index 00000000..0e7bf8aa --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/manifest.json @@ -0,0 +1,12 @@ +{ + "manifest_version": 3, + "name": "YouTube AI Q&A", + "version": "1.0", + "description": "Ask questions about YouTube videos using AI", + "permissions": ["tabs"], + "action": { + "default_popup": "popup.html", + "default_icon": "icon.png" + }, + "host_permissions": [""] +} diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.html b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.html new file mode 100755 index 00000000..33f2945e --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.html @@ -0,0 +1,21 @@ + + + + + + YouTube AI Q&A + + + +
+

🎥 YouTube AI Q&A

+ + +
+ Loading... +
+
+
+ + + diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.js b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.js new file mode 100755 index 00000000..9776bd0a --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/popup.js @@ -0,0 +1,33 @@ +document.getElementById("askBtn").addEventListener("click", async () => { + const question = document.getElementById("question").value.trim(); + const answerBox = document.getElementById("answer"); + const loadingEl = document.getElementById("loading"); + + answerBox.textContent = ""; + loadingEl.style.display = "block"; + + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + const urlParams = new URLSearchParams(new URL(tab.url).search); + const videoId = urlParams.get("v"); + + if (!videoId) { + loadingEl.style.display = "none"; + answerBox.textContent = "Not a valid YouTube video."; + return; + } + + try { + const response = await fetch("http://localhost:8000/ask", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ video_id: videoId, question }) + }); + + const data = await response.json(); + answerBox.textContent = response.ok ? data.answer : "Error: " + data.detail; + } catch (err) { + answerBox.textContent = "Failed to connect to backend."; + } + + loadingEl.style.display = "none"; +}); diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/styles.css b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/styles.css new file mode 100755 index 00000000..4d6c0d65 --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/extension/styles.css @@ -0,0 +1,81 @@ +:root { + --bg: #f9f9f9; + --text: #1f1f1f; + --card: #ffffff; + --border: #ddd; + --primary: #007bff; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #121212; + --text: #f0f0f0; + --card: #1e1e1e; + --border: #444; + --primary: #4e9eff; + } +} + +body { + margin: 0; + background-color: var(--bg); + color: var(--text); + font-family: 'Segoe UI', sans-serif; + width: 320px; +} + +.container { + padding: 16px; +} + +.title { + font-size: 18px; + margin-bottom: 10px; +} + +input { + width: 100%; + padding: 10px; + margin-bottom: 8px; + border-radius: 5px; + border: 1px solid var(--border); + background-color: var(--card); + color: var(--text); +} + +button { + width: 100%; + padding: 10px; + background-color: var(--primary); + color: white; + font-weight: bold; + border: none; + border-radius: 5px; + cursor: pointer; +} + +button:hover { + background-color: #0056b3; +} + +#loading { + text-align: center; + display: none; + margin-top: 10px; +} + +#loading img { + width: 24px; + height: 24px; +} + +#answer { + margin-top: 12px; + background-color: var(--card); + border: 1px solid var(--border); + border-radius: 6px; + padding: 10px; + font-size: 14px; + white-space: pre-wrap; + min-height: 40px; +} diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/langchain.ipynb b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/langchain.ipynb new file mode 100755 index 00000000..ac22f599 --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/langchain.ipynb @@ -0,0 +1,324 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "eab60294", + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "from dotenv import load_dotenv\n", + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f8442cf", + "metadata": {}, + "outputs": [], + "source": [ + "from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings\n", + "from langchain_community.vectorstores import FAISS\n", + "from langchain_core.prompts import PromptTemplate\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "9afa72eb", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22d3fe68", + "metadata": {}, + "outputs": [], + "source": [ + "video_id=\"XBuv4HHTRjI\"\n", + "try:\n", + " transcriptlist=YouTubeTranscriptApi.get_transcript(video_id,languages=[\"en\"])\n", + " transcript=\" \".join(chunk[\"text\"] for chunk in transcriptlist)\n", + " print(transcript)\n", + "except TranscriptsDisabled:\n", + " print(\"No Captions\") " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "396db28d", + "metadata": {}, + "outputs": [], + "source": [ + "transcriptlist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "98de0884", + "metadata": {}, + "outputs": [], + "source": [ + "splitter= RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200)\n", + "chunks=splitter.create_documents([transcript])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f296457d", + "metadata": {}, + "outputs": [], + "source": [ + "len(chunks)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b0be8ea", + "metadata": {}, + "outputs": [], + "source": [ + "embeddings = GoogleGenerativeAIEmbeddings(model=\"models/embedding-001\")\n", + "vector_store=FAISS.from_documents(chunks,embeddings)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "09ee957d", + "metadata": {}, + "outputs": [], + "source": [ + "vector_store.index_to_docstore_id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a09d5be7", + "metadata": {}, + "outputs": [], + "source": [ + "retriever=vector_store.as_retriever(search_type=\"similarity\",search_kwargs={\"k\":4})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b3b37e4", + "metadata": {}, + "outputs": [], + "source": [ + "retriever" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7191bb00", + "metadata": {}, + "outputs": [], + "source": [ + "retriever.invoke(\"Tell me about DeepMind\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82f0d192", + "metadata": {}, + "outputs": [], + "source": [ + "llm=ChatGoogleGenerativeAI(model=\"gemini-2.0-flash\",temperature=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89fae467", + "metadata": {}, + "outputs": [], + "source": [ + "prompt=PromptTemplate(\n", + " template=\"\"\"You are a helpful assistant.\n", + " Answer only from the provided transcript context\n", + " if the context is insufficient ,jusy say you dont know\n", + " \n", + " {context}\n", + " Question:{question}\n", + " \"\"\",\n", + " input_variables=['context','question']\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "84cf2a04", + "metadata": {}, + "outputs": [], + "source": [ + "question = \"is the topic of nuclear fusion discussed in this video? if yes then what was discussed\"\n", + "retrieved_docs = retriever.invoke(question)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49bd1e9c", + "metadata": {}, + "outputs": [], + "source": [ + "retrieved_docs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab3ae2fe", + "metadata": {}, + "outputs": [], + "source": [ + "context_text = \"\\n\\n\".join(doc.page_content for doc in retrieved_docs)\n", + "context_text" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96def819", + "metadata": {}, + "outputs": [], + "source": [ + "final_prompt = prompt.invoke({\"context\": context_text, \"question\": question})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3dfe33aa", + "metadata": {}, + "outputs": [], + "source": [ + "final_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1cfde7a0", + "metadata": {}, + "outputs": [], + "source": [ + "answer=llm.invoke(final_prompt)\n", + "print(answer.content)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5630a2ea", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.runnables import RunnableParallel,RunnablePassthrough,RunnableLambda\n", + "from langchain_core.output_parsers import StrOutputParser\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7a901005", + "metadata": {}, + "outputs": [], + "source": [ + "def format_docs(retrieved_docs):\n", + " context_text=\"\\n\\n\".join(doc.page_content for doc in retrieved_docs)\n", + " return context_text" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ecfad850", + "metadata": {}, + "outputs": [], + "source": [ + "parallel_chain=RunnableParallel({\n", + " 'context': retriever|RunnableLambda(format_docs),\n", + " 'question':RunnablePassthrough()\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a1707940", + "metadata": {}, + "outputs": [], + "source": [ + "parallel_chain.invoke('Who is Demis')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41a42539", + "metadata": {}, + "outputs": [], + "source": [ + "parser=StrOutputParser()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "190c5379", + "metadata": {}, + "outputs": [], + "source": [ + "main_chain =parallel_chain|prompt|llm|parser" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc3efabf", + "metadata": {}, + "outputs": [], + "source": [ + "main_chain.invoke('summarize this video')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/main.py b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/main.py new file mode 100755 index 00000000..38fa76a8 --- /dev/null +++ b/Domains/AI-ML/MiniProjects/Yt_chatbot_extension/main.py @@ -0,0 +1,62 @@ +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel +from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled +from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings +from langchain_community.vectorstores import FAISS +from langchain_core.prompts import PromptTemplate +from langchain_core.runnables import RunnableParallel, RunnablePassthrough, RunnableLambda +from langchain_core.output_parsers import StrOutputParser +import os +from dotenv import load_dotenv + +load_dotenv() +app = FastAPI() + +# LangChain setup +llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0.2) +prompt = PromptTemplate( + template="""You are a helpful assistant. Answer only from the provided transcript context. + If the context is insufficient, just say you don't know. + + {context} + Question: {question} + """, + input_variables=["context", "question"] +) + +class Query(BaseModel): + video_id: str + question: str + +@app.post("/ask") +def ask_question(query: Query): + try: + transcriptlist = YouTubeTranscriptApi.get_transcript(query.video_id, languages=["en","hi"]) + transcript = " ".join(chunk["text"] for chunk in transcriptlist) + except TranscriptsDisabled: + raise HTTPException(status_code=404, detail="No captions available.") + + splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) + chunks = splitter.create_documents([transcript]) + + embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") + vector_store = FAISS.from_documents(chunks, embeddings) + retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 4}) + + def format_docs(retrieved_docs): + return "\n\n".join(doc.page_content for doc in retrieved_docs) + + parallel_chain = RunnableParallel({ + 'context': retriever | RunnableLambda(format_docs), + 'question': RunnablePassthrough() + }) + + main_chain = parallel_chain | prompt | llm | StrOutputParser() + + try: + result = main_chain.invoke(query.question) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + return {"answer": result}