voice / app.py
lsdrs's picture
fix: convert env variable to int
fdb81f3
raw
history blame contribute delete
No virus
2.29 kB
"""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)