|
"""Deploying AI Voice Chatbot Gradio App.""" |
|
from gradio import Audio, Interface, Textbox, Checkbox |
|
from typing import Tuple |
|
from dotenv import load_dotenv |
|
import os |
|
from utils import (TextGenerationPipeline, from_en_translation, |
|
html_audio_autoplay, stt, to_en_translation, tts, |
|
tts_polly, tts_to_bytesio, tts_polly_to_bytesio) |
|
|
|
load_dotenv() |
|
|
|
max_answer_length = int(os.getenv('MAX_ANSWER_LENGTH', 100)) |
|
desired_language = os.getenv('DESIRED_LANGUAGE', 'pt') |
|
polly_language = os.getenv('POLLY_LANGUAGE_LANGUAGE', 'pt-BR') |
|
use_polly = os.getenv('USE_POLLY', False) |
|
|
|
response_generator_pipe = TextGenerationPipeline(max_length=max_answer_length) |
|
|
|
|
|
def main(audio: object, use_polly: bool = use_polly) -> Tuple[str, str, object]: |
|
if audio is None: |
|
return "", "", "" |
|
|
|
"""Calls functions for deploying gradio app. |
|
|
|
It responds both verbally and in text |
|
by taking voice input from user. |
|
|
|
Args: |
|
audio (object): recorded speech of user |
|
use_polly (bool): use aws polly |
|
Returns: |
|
tuple containing |
|
|
|
- user_speech_text (str) : recognized speech |
|
- bot_response_pt (str) : translated answer of bot |
|
- bot_response_en (str) : bot's original answer |
|
- html (object) : autoplayer for bot's speech |
|
""" |
|
user_speech_text = stt(audio, desired_language) |
|
translated_text = to_en_translation(user_speech_text, desired_language) |
|
bot_response_en = response_generator_pipe(translated_text) |
|
bot_response_pt = from_en_translation(bot_response_en, desired_language) |
|
|
|
if use_polly: |
|
bot_voice = tts_polly(bot_response_pt, polly_language) |
|
bot_voice_bytes = tts_polly_to_bytesio(bot_voice) |
|
else: |
|
bot_voice = tts(bot_response_pt, desired_language) |
|
bot_voice_bytes = tts_to_bytesio(bot_voice) |
|
|
|
html = html_audio_autoplay(bot_voice_bytes) |
|
return user_speech_text, bot_response_pt, html |
|
|
|
|
|
demo = Interface( |
|
fn=main, |
|
inputs=[ |
|
Audio(source="microphone", type="filepath"), |
|
Checkbox(value=use_polly, label="Usar Polly?") |
|
], |
|
outputs=[ |
|
Textbox(label="Você disse: "), |
|
Textbox(label="AI disse: "), |
|
"html", |
|
], |
|
live=True, |
|
allow_flagging="never") |
|
|
|
demo.launch(debug=False) |
|
|