import whisper from pytube import YouTube from langchain.chat_models import ChatOpenai import os key = st.text_input("Provide Openai API Key to Chat") @st.cache_resource def get_whisper(): model = whisper.load_model("base") return model def get_audio(url): yt = YouTube(url) video = yt.streams.filter(only_audio=True).first() out_file=video.download(output_path=".") base, ext = os.path.splitext(out_file) new_file = base+'.mp3' os.rename(out_file, new_file) a = new_file return a def get_text(url): model = get_whisper() result = model.transcribe(get_audio(url)) return result['text'] def get_youtube_title(y_url): yt = Youtube(y_url) embed_url = f"https://wwww.youtube.com/embed/{yt.video_id}" emded_html = f'' return yt.title, emded_html y_url = st.sidebar.text_input("Enter youtube url") if st.sidebar.button('Get Youtube Content'): if st.spinner('Loading...'): video_title, embed_html = get_video_title(y_url) st.markdown(f'## {video_title}') st.markdown(embed_html, unsafe_allow_html=True) content = get_text(y_url) st.session_state.content = content template = """You are Adance AI that respond on given instruction based on available content content: {content} instruction: {prompt} """ if 'content' in st.session_state: template = template.format(content = st.session_state.content, prompt = '{prompt}') else: template = template.format(content = '', prompt = '{prompt}') if prompt := st.chat_input(): if not key: st.markdown('Provide key to chat') st.stop() st.session_state.messages.append({'role': 'user', 'content': prompt}) st.chat_message('user').write(prompt) llm = ChatOpenAI(model_name = 'gpt-3.5-turbo', openai_api_key = key) msg = llm.predict(template.format(prompt = prompt)) st.session_state.messages.append({'role': 'assistant', 'content': msg}) st.chat_message('assistant').write(msg)