Spaces:
Runtime error
Runtime error
| import os | |
| import gradio as gr | |
| from dotenv import load_dotenv | |
| import openai | |
| from utils import compress | |
| from google_manager.fassade import Fassade | |
| from google.oauth2.credentials import Credentials | |
| from description import DESCRIPTION | |
| import gradio as gr | |
| from utils import credentials_to_dict | |
| import asyncio | |
| import logging | |
| logging.basicConfig(level=logging.INFO) | |
| load_dotenv() | |
| # configuring openai package | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
| openai.api_key = OPENAI_API_KEY | |
| def load_prompt(path): | |
| with open(path) as f: | |
| lines = f.readlines() | |
| return "".join(lines) | |
| def chat(passage, max_tokens=256, temprature=0, debug=False): | |
| if debug: | |
| passage = """ | |
| A car or automobile is a motor vehicle with wheels. Most definitions of cars say that they run primarily on roads, seat one to eight people, have four wheels, and mainly transport people (rather than goods). | |
| """ | |
| prompt = load_prompt("summary_prompt.txt").replace("<<SUMMARY>>", passage) | |
| summary = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages=[{"role": "user", "content": prompt}], | |
| ) | |
| return summary["choices"][0]["message"]["content"].strip() | |
| def transcribe(audio_file): | |
| audio_file = open(audio_file, "rb") | |
| transcription = openai.Audio.transcribe("whisper-1", audio_file, language="en") | |
| transcription = transcription["text"] | |
| return transcription | |
| # def predict(input, request: gr.Request, history=[]): | |
| # compress(input) | |
| # print("whisper starts") | |
| # transcription = transcribe(input) | |
| # print("whisper ends") | |
| # print("gpt starts") | |
| # answer = chat(transcription) | |
| # print("gpt ends") | |
| # # upload the input/answer to google drive | |
| # session_dict = vars(request.session) | |
| # if "credentials" in session_dict: | |
| # creds = Credentials(**vars(session_dict["credentials"])) | |
| # doc_content = "user:\n" f"{transcription}\n" "\n" "summary:\n" f"{answer}\n" | |
| # Fassade.upload_to_drive(creds, doc_content) | |
| # # request.session["credentials"] = credentials_to_dict(creds) | |
| # setattr(request.session, "credentials", credentials_to_dict(creds)) | |
| async def predict(input, request: gr.Request, history=[]): | |
| compress(input) | |
| logging.info("Starting HTTP request to Whisper API") | |
| transcription = await asyncio.to_thread(transcribe, input) | |
| logging.info("Starting HTTP request to GPT-3.5 API") | |
| answer = await asyncio.to_thread(chat, transcription) | |
| loop = asyncio.get_event_loop() | |
| # upload the input/answer to google drive | |
| session_dict = vars(request.session) | |
| if "credentials" in session_dict: | |
| creds = Credentials(**vars(session_dict["credentials"])) | |
| doc_content = "user:\n" f"{transcription}\n" "\n" "summary:\n" f"{answer}\n" | |
| # await asyncio.to_thread(Fassade.upload_to_drive, creds, doc_content) | |
| loop.run_in_executor(None, Fassade.upload_to_drive, creds, doc_content) | |
| setattr(request.session, "credentials", credentials_to_dict(creds)) | |
| # session_data = request.session.get("credentials", None) | |
| # if session_data: | |
| # creds = Credentials(**vars(session_data["credentials"])) | |
| # doc_content = "user:\n" f"{transcription}\n" "\n" "summary:\n" f"{answer}\n" | |
| # Fassade.upload_to_drive(creds, doc_content) | |
| # session_data.update(credentials_to_dict(creds)) | |
| # request.session["credentials"] = session_data | |
| history.append((transcription, answer)) | |
| response = history | |
| return response, history | |
| with gr.Blocks() as Ui: | |
| gr.Markdown(DESCRIPTION) | |
| chatbot = gr.Chatbot() | |
| state = gr.State([]) | |
| with gr.Row(): | |
| audio_file = gr.Audio(label="Audio", source="microphone", type="filepath") | |
| audio_file.change(predict, [audio_file, state], [chatbot, state]) | |