ILyaz03's picture
Update app.py
7517d83
raw
history blame contribute delete
No virus
4.35 kB
import os
import gradio as gr
import openai
from gtts import gTTS
# load the api key
openai.api_key = os.environ["OPEN_AI_KEY"]
# takes an audio file from the microphone
def transcribe(audio):
audio_file = open(audio, "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
return transcript["text"]
# Create a Gradio App using Blocks
with gr.Blocks() as demo:
gr.Markdown(
"""
# Welcome to ILyaz Ai Bot
"""
)
with gr.Accordion("Click for Instructions:"):
gr.Markdown(
"""
* Record your query.
* Submit your query, and follow the chat or listen to the advice.
* When you are ready to respond, clear your last recording and resubmit.
note: Transcribe Audio does not work on iOS
""")
# First message as instructions to OpenAI
messages = gr.State(value=[{"role": "system", "content": "This education app offers a personalized learning experience to students of different age groups and subjects through four menus. These menus are Learning Lessons, which include age-appropriate lessons with multimedia content and chat-based interactions for each curriculum topic. Interactive Tests, which offer assessments and quizzes to evaluate students' understanding of the material, one question at a time. Practical Exercises, which provide engaging hands-on activities and simulations to allow students to apply their knowledge. Progress Tracking & Rewards, which features a personalized dashboard to track progress, collect badges, and unlock achievements. Community & Support, which includes chat-based forums, leaderboards, and team-based challenges to foster collaboration and friendly competition. To input their age and preferred subject, students can type AGE and SUBJECT, respectively. The chat interface will offer five options, including learning lessons and tests, relevant to the student's age and subject. To minimize unnecessary responses, the app always asks one question at a time. When using the MENU type, the user will be returned to the main menu. The app's curriculum is based on the UK National Curriculum for secondary education, and it uses UK grammar instead of Americanized words." }])
# Takes the users transcribed audio as a string
def botResponse(user_input, messages):
messages.append({"role": "user", "content": user_input})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0301",
messages=messages
)
# Parse the response from OpenAI and store
system_message = response["choices"][0]["message"]["content"]
messages.append({"role": "assistant", "content": system_message})
# Process the messages list to get the chat log into a string
chat_transcript = ""
for message in messages:
if (message["role"] != "system"):
chat_transcript += message["role"] + ": " + message["content"] + "\n\n"
return chat_transcript
# Gets the last message in the chat log and uses GTTS to convert the last response into an audio file.
def giveVoice(messages):
bot_message=messages[-1]
myobj = gTTS(text=bot_message["content"])
myobj.save("temp.mp3")
dir = os.getcwd()
new_path = os.path.join(dir, "temp.mp3")
return new_path
# Creates the Gradio interface objects
with gr.Row():
with gr.Column(scale=1):
user_audio = gr.Audio(source="microphone", type="filepath", label="Input Phrase")
submit_btn = gr.Button(value="Transcribe Audio")
submit_btn2 = gr.Button(value="Submit Text")
gpt_voice = gr.Audio(label="Listen to Advice")
with gr.Column(scale=2):
user_transcript = gr.Text(label="Audio Translation", interactive=False)
user_text = gr.Text(label="Text Input")
gpt_transcript = gr.Text(label="Chat Transcript")
submit_btn.click(transcribe, user_audio, user_transcript)
submit_btn2.click(botResponse, [user_text, messages], gpt_transcript)
user_transcript.change(botResponse, [user_transcript, messages], gpt_transcript)
gpt_transcript.change(giveVoice, messages, gpt_voice)
# creates a local web server
demo.launch(auth=("ILyaz", "hello"))