File size: 4,870 Bytes
b8b8495 0fb5725 b8b8495 0fb5725 b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 0fb5725 b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 6dd7a3f b8b8495 6dd7a3f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
import gradio as gr
from main import index, run, ingest_files
from gtts import gTTS
import os, time
from transformers import pipeline
p = pipeline("automatic-speech-recognition", model="openai/whisper-base")
"""Use text to call chat method from main.py"""
models = ["GPT-3.5", "Flan UL2", "Flan T5", "GPT-4"]
name = os.environ.get("name", "Rohan")
def add_text(history, text, model):
print("Question asked: " + text)
response = run_model(text, model)
history = history + [(text, response)]
print(history)
return history, ""
def run_model(text, model):
start_time = time.time()
print("start time:" + str(start_time))
response = run(text, model)
end_time = time.time()
# If response contains string `SOURCES:`, then add a \n before `SOURCES`
if "SOURCES:" in response:
response = response.replace("SOURCES:", "\nSOURCES:")
# response = response + "\n\n" + "Time taken: " + str(end_time - start_time)
print(response)
print("Time taken: " + str(end_time - start_time))
return response
def get_output(history, audio, model):
txt = p(audio)["text"]
# history.append(( (audio, ) , txt))
audio_path = 'response.wav'
response = run_model(txt, model)
# 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(audio_path)
# split audio by / and keep the last element
# audio = audio.split("/")[-1]
# audio = audio + ".wav"
history.append(( (audio, ) , (audio_path, )))
print(history)
return history
def set_model(history, model, first_time=False):
print("Model selected: " + model)
history = get_first_message(history)
index(model, first_time)
return history
def get_first_message(history):
history = [(None,
"Hi! I am " + name + "'s Personal Assistant. Want " + name + " to answer your questions? Just Roar it!")]
return history
def clear_audio(audio):
return None
def bot(history):
return history
def upload_file(files, history, model):
file_paths = [file.name for file in files]
print("Ingesting files: " + str(file_paths))
text = 'Uploaded a file'
if ingest_files(file_paths, model):
response = 'Files are ingested. Roar now!'
else:
response = 'Files are not ingested. Please try again.'
history = history + [(text, response)]
return history
theme = gr.Theme.from_hub("snehilsanyal/scikit-learn")
theme.block_background_fill = gr.themes.colors.neutral.c100
theme.block_border_width = '2px'
theme.block_border_radius = '10px'
with gr.Blocks(theme=theme, title='Roar!') as demo:
# Add image of Roar Logo from local directory
gr.HTML('<img src="file/assets/logo.png" style="width: 100px; height: 100px; margin: 0 auto;border:5px solid orange;border-radius: 50%; display: block">')
# Title on top in middle of the page
gr.HTML("<h1 style='text-align: center;'>Roar - A Personal Assistant</h1>")
chatbot = gr.Chatbot(get_first_message([]), elem_id="chatbot").style(height=500)
with gr.Row():
# Create radio button to select model
radio = gr.Radio(models, label="Choose a model", value="GPT-4", type="value")
with gr.Row():
with gr.Column(scale=0.6):
txt = gr.Textbox(
label="Let's hear the roar!",
placeholder="Enter text and press enter, or upload a file", lines=1
).style(container=False)
with gr.Column(scale=0.2):
upload = gr.UploadButton(label="Roar on a file", type="file", file_count='multiple', file_types=['docx', 'txt', 'pdf', 'html']).style(container=False)
with gr.Column(scale=0.2):
audio = gr.Audio(source="microphone", type="filepath", label="Let me hear your roar!").style(container=False)
with gr.Row():
gr.Examples(examples=['Roar it! What are you an expert of?', ' Roar it! What are you currently doing?',
'Roar it! What is your opinion on Large Language Models?'], inputs=[txt], label="Examples")
txt.submit(add_text, [chatbot, txt, radio], [chatbot, txt], postprocess=False).then(
bot, chatbot, chatbot
)
radio.change(fn=set_model, inputs=[chatbot, radio], outputs=[chatbot]).then(bot, chatbot, chatbot)
audio.change(fn=get_output, inputs=[chatbot, audio, radio], outputs=[chatbot, audio], show_progress=True).then(
bot, chatbot, chatbot, clear_audio
)
upload.upload(upload_file, inputs=[upload, chatbot, radio], outputs=[chatbot]).then(bot, chatbot, chatbot)
set_model(chatbot, radio.value, first_time=True)
if __name__ == "__main__":
demo.queue()
demo.queue(concurrency_count=5)
demo.launch(debug=True, favicon_path="file/assets/logo.png")
|