Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import re | |
| import streamlit_authenticator as stauth | |
| import yaml | |
| from yaml.loader import SafeLoader | |
| from streamlit_player import st_player | |
| from utils import create_transcript_from_youtube_api, create_open_ai_query | |
| from prompts import DETECT_INTENT_OF_CONVERSATION, TOPIC_BASED_QUESTION, FOLLOW_UP_QUESTION, GENERAL_QUESTION, GENERAL_GREETING, \ | |
| VAGUE_QUERY_PROMPT | |
| st.set_page_config(page_title="Youtube AI") | |
| with open('config.yaml') as file: | |
| config = yaml.load(file, Loader=SafeLoader) | |
| authenticator = stauth.Authenticate( | |
| config['credentials'], | |
| config['cookie']['name'], | |
| config['cookie']['key'], | |
| config['cookie']['expiry_days'], | |
| config['preauthorized'] | |
| ) | |
| name, authentication_status, username = authenticator.login() | |
| if st.session_state["authentication_status"]: | |
| authenticator.logout('Logout', 'main') | |
| st.write(f'Welcome to Mentor Mode') | |
| elif st.session_state["authentication_status"] is False: | |
| st.error('Wrong password or username') | |
| elif st.session_state["authentication_status"] is None: | |
| st.warning('Please enter your username and password') | |
| st.session_state["chat_history"] = [] | |
| if st.session_state["authentication_status"]: | |
| if "chat_history" not in st.session_state: | |
| st.session_state["chat_history"] = [] | |
| if "messages" not in st.session_state: | |
| st.session_state.messages = [] | |
| for message in st.session_state.messages: | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| with st.sidebar: | |
| st.title("Your Video") | |
| youtube_video_link = st.text_area("Please enter your video link") | |
| st.button("Play Video", type="primary") | |
| if youtube_video_link: | |
| st_player(youtube_video_link) | |
| else: | |
| st.write("Please enter a valid link") | |
| if prompt := st.chat_input("Hey AI!"): | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| st.session_state.chat_history.append({"role": "user", "content": prompt}) | |
| with st.chat_message("user"): | |
| st.markdown(prompt) | |
| if youtube_video_link and prompt: | |
| with st.spinner("Processing..."): | |
| video_id = re.search(r'(?<=v=)[\w-]+', youtube_video_link).group(0) | |
| yt_transcript = create_transcript_from_youtube_api(video_id) | |
| if yt_transcript["success"]: | |
| ADDITIONAL_PROMPT = f"""QUERY : ```{prompt}```, TRANSCRIPT:```{yt_transcript}```, | |
| CHAT_HISTORY:```{st.session_state["chat_history"]}````""" | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + DETECT_INTENT_OF_CONVERSATION | |
| intent = create_open_ai_query(FINAL_PROMPT) | |
| print(intent["data"]) | |
| if intent["success"]: | |
| if intent["data"] == "VAGUE_QUERY": | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + VAGUE_QUERY_PROMPT | |
| response = create_open_ai_query(FINAL_PROMPT) | |
| elif intent["data"] == "GENERAL_QUESTION": | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + GENERAL_QUESTION | |
| response = create_open_ai_query(FINAL_PROMPT) | |
| elif intent["data"] == "TOPIC_BASED_QUESTION": | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + TOPIC_BASED_QUESTION | |
| response = create_open_ai_query(FINAL_PROMPT) | |
| elif intent["data"] == "FOLLOW_UP_QUESTION": | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + FOLLOW_UP_QUESTION | |
| response = create_open_ai_query(FINAL_PROMPT) | |
| elif intent["data"] == "GENERAL_GREETING": | |
| FINAL_PROMPT = ADDITIONAL_PROMPT + GENERAL_GREETING | |
| response = create_open_ai_query(FINAL_PROMPT) | |
| with st.chat_message("assistant"): | |
| if response["success"]: | |
| st.write(response["data"]) | |
| else: | |
| st.write(response["error"]) | |
| st.session_state.messages.append({"role": "assistant", "content": response["data"]}) | |
| st.session_state.chat_history.append({"role": "assistant", "content": response["data"]}) | |
| if st.button("Download Chat History"): | |
| # Combine role and content for each message | |
| chat_history = "\n".join( | |
| [f"{message['role']} : {message['content']}" for message in | |
| st.session_state.messages if message["content"] is not None] | |
| ) | |
| st.download_button( | |
| label="Download", | |
| data=chat_history, | |
| file_name="chat_history.txt", | |
| mime="text/plain" | |
| ) | |