Spaces:
Sleeping
Sleeping
#!/usr/bin/env python | |
# coding: utf-8 | |
# In[1]: | |
# pip install langdetect | |
# pip install sentencepiece | |
# pip install boto3 | |
# pip install awscli | |
# pip install sacremoses | |
import gradio as gr | |
from transformers import pipeline, AutoTokenizer, TFAutoModelForSeq2SeqLM | |
from dotenv import load_dotenv | |
import os | |
import subprocess | |
import torch | |
import tempfile | |
from langdetect import detect | |
from transformers import MarianMTModel, MarianTokenizer | |
import re | |
import boto3 | |
# import functions from functions file | |
from functions import handle_query, transcribe_audio_original, submit_question, polly_text_to_speech, translate, translate_and_speech, clear_inputs, voice_map, language_map, default_language, languages | |
# build app theme | |
theme = gr.themes.Soft( | |
secondary_hue="teal", | |
neutral_hue="slate", | |
font=[gr.themes.GoogleFont('Source Sans Pro'), 'ui-sans-serif', 'system-ui', 'sans-serif'], | |
).set( | |
background_fill_primary='white', | |
#change background color here | |
body_background_fill='*primary_100', | |
shadow_drop='rgba(0,0,0,0.05) 0px 1px 2px 0px', | |
shadow_drop_lg='0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)', | |
shadow_spread='3px', | |
block_background_fill='*background_fill_primary', | |
block_border_width='1px', | |
block_border_width_dark='1px', | |
block_label_background_fill='*background_fill_primary', | |
block_label_background_fill_dark='*background_fill_secondary', | |
block_label_text_color='*neutral_500', | |
block_label_text_color_dark='*neutral_200', | |
block_label_margin='0', | |
block_label_padding='*spacing_sm *spacing_lg', | |
block_label_radius='calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px) 0', | |
block_label_text_size='*text_sm', | |
block_label_text_weight='400', | |
block_title_background_fill='none', | |
block_title_background_fill_dark='none', | |
block_title_text_color='*neutral_500', | |
block_title_text_color_dark='*neutral_200', | |
block_title_padding='0', | |
block_title_radius='none', | |
block_title_text_weight='400', | |
#panel border width change here | |
panel_border_width='1px', | |
#try panel border here | |
panel_border_color='*neutral_900', | |
panel_border_width_dark='0', | |
checkbox_background_color_selected='*secondary_600', | |
checkbox_background_color_selected_dark='*secondary_600', | |
checkbox_border_color='*neutral_300', | |
checkbox_border_color_dark='*neutral_700', | |
checkbox_border_color_focus='*secondary_500', | |
checkbox_border_color_focus_dark='*secondary_500', | |
checkbox_border_color_selected='*secondary_600', | |
checkbox_border_color_selected_dark='*secondary_600', | |
checkbox_border_width='*input_border_width', | |
checkbox_shadow='*input_shadow', | |
checkbox_label_background_fill_selected='*checkbox_label_background_fill', | |
checkbox_label_background_fill_selected_dark='*checkbox_label_background_fill', | |
checkbox_label_shadow='none', | |
checkbox_label_text_color_selected='*checkbox_label_text_color', | |
input_background_fill='*neutral_100', | |
input_border_color='*border_color_primary', | |
input_shadow='none', | |
input_shadow_dark='none', | |
input_shadow_focus='*input_shadow', | |
input_shadow_focus_dark='*input_shadow', | |
slider_color='#2563eb', | |
slider_color_dark='#2563eb', | |
button_shadow='none', | |
button_shadow_active='none', | |
button_shadow_hover='none', | |
#change button color here | |
button_primary_background_fill='linear-gradient(45deg, *primary_500, *secondary_200)', | |
# *primary_300', | |
button_primary_background_fill_hover='*button_primary_background_fill', | |
button_primary_background_fill_hover_dark='*button_primary_background_fill', | |
#change button text color here | |
button_primary_text_color='*neutral_900', | |
#change button color here | |
button_secondary_background_fill='*secondary_500', | |
button_secondary_background_fill_hover='*button_secondary_background_fill', | |
button_secondary_background_fill_hover_dark='*button_secondary_background_fill', | |
button_secondary_text_color='*neutral_700', | |
button_cancel_background_fill_hover='*button_cancel_background_fill', | |
button_cancel_background_fill_hover_dark='*button_cancel_background_fill' | |
) | |
# Build Gradio App interface | |
instructions=""" | |
# Diabetes Assistant! | |
## Have questions about Diabetes? Submit questions here through audio recording/text. Receive a response. Translate to selected language.""" | |
with gr.Blocks(theme=theme) as app2: | |
with gr.Row(): | |
gr.Markdown(instructions) | |
with gr.Row(): | |
with gr.Column(variant="panel", scale=1): | |
# gr.Markdown("## Step 1: Enter question by recording audio") | |
input_audio = gr.Audio( | |
label="Click the microphone to record audio", | |
type="filepath", | |
waveform_options=gr.WaveformOptions( | |
waveform_color="#01C6FF", | |
waveform_progress_color="#0066B4", | |
skip_length=2, | |
show_controls=False,) | |
) | |
# gr.Markdown("## Step 2: Transcribe audio into text") | |
transcribe_button = gr.Button("Transcribe audio", variant="primary") | |
# gr.Markdown("## Step 3: Transcribed audio appears here. Or, type your question here.") | |
query_text = gr.Textbox(placeholder="Transcribed audio appears here. Or, type a question here.", label="Your query") | |
# gr.Markdown("## Submit your question") | |
submit_button = gr.Button("Submit your question", variant="primary") | |
with gr.Column(variant="panel", scale=2): | |
response_text = gr.Textbox(label="Assistant response") | |
response_speech = gr.Audio(label="Assistant response speech", | |
waveform_options=gr.WaveformOptions( | |
waveform_color="#01C6FF", | |
waveform_progress_color="#0066B4", | |
skip_length=2, | |
show_controls=False,)) | |
with gr.Column(variant="panel", scale=2): | |
language_dropdown = gr.Dropdown(label="Click the middle of the dropdown bar to select translation language", | |
choices=list(language_map.keys()), value=default_language, type='value') | |
translate_button = gr.Button("Translate the response", variant="primary") | |
output_translated = gr.Textbox(label="Translated text") | |
output_translated_speech = gr.Audio(label="Translated speech", | |
waveform_options=gr.WaveformOptions( | |
waveform_color="#01C6FF", | |
waveform_progress_color="#0066B4", | |
skip_length=2, | |
show_controls=False,)) | |
with gr.Row(): | |
clear_button = gr.Button("Clear All", variant="primary") | |
# Audio transcription | |
transcribe_button.click( | |
fn=transcribe_audio_original, | |
inputs=[input_audio], | |
outputs=[query_text] | |
) | |
submit_button.click( | |
fn=submit_question, | |
inputs=[input_audio, query_text, language_dropdown], | |
outputs=[response_text, response_speech] | |
) | |
# Translation | |
translate_button.click( | |
fn=translate_and_speech, | |
inputs=[response_text, language_dropdown], | |
outputs=[output_translated, output_translated_speech] | |
) | |
#Clearing all inputs and outputs | |
clear_button.click( | |
fn=clear_inputs, | |
inputs=[], | |
outputs=[input_audio, query_text, response_text, response_speech, output_translated, output_translated_speech] | |
) | |
app2.launch(show_error=True) | |