coursera-qa-bot / app.py
rohan13's picture
Fixing file path for output
47c71f9
raw
history blame
2.11 kB
import gradio as gr
from main import index, run
from gtts import gTTS
import os
from transformers import pipeline
p = pipeline("automatic-speech-recognition")
"""Use text to call chat method from main.py"""
def add_text(history, text):
print("Question asked: " + text)
response = run_model(text)
history = history + [(text, response)]
print(history)
return history, ""
def run_model(text):
response = run(question=text)
# If response contains string `SOURCES:`, then add a \n before `SOURCES`
if "SOURCES:" in response:
response = response.replace("SOURCES:", "\nSOURCES:")
print(response)
return response
def fill_input_textbox(history, audio):
txt = p(audio)["text"]
response = run_model(txt)
# Remove all text from SOURCES: to the end of the string
trimmed_response = response.split("SOURCES:")[0]
myobj = gTTS(text=trimmed_response, lang='en', slow=False)
myobj.save("response.wav")
audio = audio + ".wav"
history = history + [((audio, ), ('response.wav', ))]
print(history)
return history
def bot(history):
return history
with gr.Blocks() as demo:
index()
chatbot = gr.Chatbot([(None,'Learn about <a href="https://www.coursera.org/learn/3d-printing-revolution/home">3D printing Revolution</a> course with referred sources. Try out the new voice to voice Q&A on the course! ')], elem_id="chatbot").style(height=750)
with gr.Row():
with gr.Column(scale=0.85):
txt = gr.Textbox(
label="Coursera Voice Q&A Bot",
placeholder="Enter text and press enter, or upload an image", lines=1
).style(container=False)
with gr.Column(scale=0.15):
audio = gr.Audio(source="microphone", type="filepath").style(container=False)
txt.submit(add_text, [chatbot, txt], [chatbot, txt], postprocess=False).then(
bot, chatbot, chatbot
)
audio.change(fn=fill_input_textbox,inputs=[chatbot, audio], outputs=[chatbot]).then(
bot, chatbot, chatbot
)
if __name__ == "__main__":
demo.launch()