Spaces:
Sleeping
Sleeping
import os | |
import openai | |
import gradio as gr | |
from youtube_transcript_api import YouTubeTranscriptApi | |
from langchain_openai import ChatOpenAI | |
from langchain.agents import AgentExecutor | |
from langchain.memory import ConversationBufferWindowMemory | |
from FC_tool_main import YouTubeAgent, set_temperature | |
import logging | |
logging.getLogger().setLevel(logging.ERROR) | |
import warnings | |
warnings.filterwarnings("ignore") | |
from dotenv import load_dotenv, find_dotenv | |
_ = load_dotenv(find_dotenv()) # read local .env file | |
openai.api_key = os.environ['OPENAI_API_KEY'] | |
class ChatBot: | |
def __init__(self): | |
self.youtube_agent = YouTubeAgent() | |
def chat(self, message, history, temperature): | |
try: | |
# Set the temperature using the function from FCnew18thJul.py | |
set_temperature(temperature) | |
# Reinitialize the agent to use the new temperature | |
self.youtube_agent = YouTubeAgent() | |
response = self.youtube_agent.invoke(message) | |
return response | |
except Exception as e: | |
return f"An error occurred: {str(e)}" | |
chatbot = ChatBot() # Create an instance of ChatBot | |
def user_message(message, history): | |
return "", history + [[message, None]] | |
def bot_message(history, temperature): | |
user_message = history[-1][0] | |
bot_response = chatbot.chat(user_message, history, temperature) | |
history[-1][1] = bot_response | |
return history | |
def use_example(example, text_input): | |
return example | |
# Example messages | |
example_messages = [ | |
"What tools are available for use?", | |
"What is the following video about? https://www.youtube.com/watch?v=dZxbVGhpEkI", | |
"Can you summarize this video? https://www.youtube.com/watch?v=hM8unyUM6KA", | |
"Extract the main points from this video: https://www.youtube.com/watch?v=UF8uR6Z6KLc", | |
"What are the main challenges discussed in the video? https://www.youtube.com/watch?v=-OSxeoIAs2w&t=4262s", | |
"What is the speakers name in this video? dZxbVGhpEkI" | |
] | |
with gr.Blocks() as demo: | |
gr.Markdown(""" | |
# Chat with YouTube Videos | |
This application provides a comprehensive set of tools for analyzing YouTube videos, | |
extracting information, and answering questions based on video content. It leverages | |
the LangChain library for natural language processing tasks and the YouTube Transcript | |
API for fetching video transcripts. | |
Key Features: | |
- Main points formatted as youtube comment with clickable timestamps | |
- Question answering based on video content | |
Simply enter your question or request along with a YouTube video link, and the AI will process and respond accordingly. | |
Adjust the temperature slider to control the creativity of the AI's responses. | |
""") | |
temperature_slider = gr.Slider(minimum=0, maximum=1, step=0.1, label="Temperature", value=0) | |
chatbot_interface = gr.Chatbot(show_copy_button=True) | |
msg = gr.Textbox(label="Message") | |
with gr.Row(): | |
submit_btn = gr.Button("Submit") | |
clear_btn = gr.Button("Clear") | |
gr.Markdown("## Example Messages") | |
example_btns = [gr.Button(i) for i in example_messages] | |
submit_btn.click(user_message, [msg, chatbot_interface], [msg, chatbot_interface], queue=False).then( | |
bot_message, [chatbot_interface, temperature_slider], chatbot_interface | |
) | |
msg.submit(user_message, [msg, chatbot_interface], [msg, chatbot_interface], queue=False).then( | |
bot_message, [chatbot_interface, temperature_slider], chatbot_interface | |
) | |
clear_btn.click(lambda: None, None, chatbot_interface, queue=False) | |
for btn, example in zip(example_btns, example_messages): | |
btn.click(use_example, inputs=[gr.Textbox(value=example, visible=False)], outputs=msg) | |
if __name__ == "__main__": | |
demo.launch() | |