Spaces:
Runtime error
Runtime error
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
import time | |
from services import utils | |
from services import chatbot | |
import gradio as gr | |
with gr.Blocks() as app: | |
# ----------------------------------------------- FRONT ------------------------------------------------------- | |
with gr.Tab('General info'): | |
client = gr.Textbox( | |
label='Nombre del cliente', placeholder='Inserte el nombre del cliente, por ejemplo Visit Orlando' | |
) | |
languages = gr.Checkboxgroup( | |
choices=['español', 'ingles', 'portugués'], value='español', label='Idiomas', interactive=True, | |
info='Seleccione todos los idiomas que el chatbot va a hablar (al menos debe tener 1 idioma)' | |
) | |
name = gr.Dropdown( | |
choices=['Bella'], value='Bella', label='Nombre del chatbot', | |
info='Seleccione el nombre del chatbot, si no se encuentra en la lista, contacte al administrador' | |
) | |
max_num_questions = gr.Number( | |
value=5, minimum=2, maximum=10, label='Número preguntas', interactive=True, | |
info='Máximo numero de preguntas que puede hacer el usuario.' | |
) | |
with gr.Tab('Images'): | |
base_image = gr.Image(label='Imagen base para los videos', sources=['upload'], type='pil') | |
with gr.Tab('Greeting and goodbye'): | |
_ = gr.Markdown( | |
'Ingrese los saludos, despedidas y mensajes de error que deba usar el chatbot.' | |
) | |
with gr.Row(): | |
greet = gr.Textbox(label='Mensaje', info='Ingrese el mensaje a decir por el chatbot.') | |
type_greet = gr.Dropdown( | |
choices=['Saludo', 'Despedida', 'Error'], value='Saludo', interactive=True, | |
info='Seleccione si es saludo, despedida o mensaje de error.', label='Tipo mensaje' | |
) | |
language_greet = gr.Dropdown( | |
choices=['español'], value='español', interactive=True, | |
info='Seleccione el idioma en el que esta el texto.', label='Idioma' | |
) | |
send_greet_button = gr.Button(value='Añadir') | |
messages_table = gr.DataFrame( | |
headers=['Eliminar', 'Mensaje', 'Tipo mensaje', 'Idioma'], type='array', interactive=False | |
) | |
with gr.Tab('Random data'): | |
_ = gr.Markdown( | |
'Si quiere que Bella diga algunos datos random mientras busca la información, ingrese dichos párrafos aca.' | |
) | |
with gr.Row(): | |
random_data = gr.Text( | |
placeholder='Ingrese el dato random', info='Ingrese el mensaje a decir por el chatbot.', | |
label='Dato random' | |
) | |
language_random = gr.Dropdown( | |
choices=['español'], value='español', interactive=True, | |
info='Seleccione el idioma en el que esta el texto.', label='Idioma' | |
) | |
send_random_button = gr.Button(value='Añadir') | |
random_table = gr.DataFrame(headers=['Eliminar', 'Dato random', 'Idioma'], type='array', interactive=False) | |
with gr.Tab('Questions - Context'): | |
with gr.Row(): | |
question = gr.Text(placeholder='Ingrese su pregunta', label='Pregunta') | |
context = gr.Text(placeholder='Ingrese el párrafo u oración que contesta dicha pregunta', label='Contexto') | |
send_question_button = gr.Button(value='Añadir') | |
questions_table = gr.DataFrame( | |
headers=['Eliminar', 'Pregunta', 'Contexto'], type='array', interactive=False | |
) | |
with gr.Tab('Create chatbot'): | |
_ = gr.Markdown( | |
"Asegúrese que toda la información este correcta antes de enviarla." | |
) | |
create_chatbot_button = gr.Button(value='Crear chatbot') | |
with gr.Tab('Prompts'): | |
general_prompt = gr.Text( | |
placeholder='Ingrese el prompt general del bot', label='General prompt' | |
) | |
context_prompt = gr.Text( | |
placeholder='Ingrese el prompt usado para encontrar el contexto', label='Standalone prompt' | |
) | |
_ = gr.Markdown( | |
"```\n" | |
"Recuerde dejar estos formatos en los prompts: \n" | |
"----------------------- General --------------------------\n" | |
"=========\n" | |
"Contexto:\n" | |
"CONTEXTO\n" | |
"=========\n" | |
"\n" | |
"----------------------- Standalone -----------------------\n" | |
"You are a standalone question-maker. Given the following chat history and follow-up message, rephrase " | |
"the follow-up phrase to be a standalone question (sometimes the follow-up is not a question, so create " | |
"a standalone phrase), in spanish. In the standalone message you must include all the information at the " | |
"moment that is known about the customer, all the important nouns and what they are looking for. In cases " | |
"where you think is usefully, include what is the best recommendation for the customer. To give you " | |
"context, the conversation is about (INGRESE INFORMACIÓN DE LA MARCA, EL NOMBRE Y DE MANERA MUY GENERAL " | |
"QUE ES LO QUE VENDE).\n" | |
"There might be moments when there isn't a question in those cases return a standalone phrase: for example " | |
"if the user says 'hola' (or something similar) then the output would be 'el usuario está saludando', or " | |
"if the user says 'gracias' or 'es muy util' (or something similar) then the output would be a phrase " | |
"showing that the user is grateful and what they are grateful for, or if the user say 'si' then it would " | |
"be a phrase encapsulating the relationship to its previous question or phrase.\n" | |
"Your response cannot be more than 50 words.\n" | |
"Chat History:\n" | |
"\n" | |
"HISTORY\n" | |
"Follow-up message: QUESTION\n" | |
"Standalone message:\n", line_breaks=True | |
) | |
with gr.Tab('Test'): | |
start_test_button = gr.Button(value='Iniciar test') | |
with gr.Column(visible=False) as chat_row: | |
chat = gr.Chatbot(label='Chat') | |
output_audio = gr.Audio(interactive=False, label='Audio', autoplay=True, visible=False) | |
user_input = gr.Text(label='Escribe tus preguntas') | |
with gr.Tab('Prompts by languages'): | |
with gr.Row(): | |
prompt_data = gr.Text(placeholder='Ingrese el prompt', info='Ingrese el prompt.', label='Prompt') | |
language_prompt = gr.Dropdown( | |
choices=['español'], value='español', interactive=True, | |
info='Seleccione el idioma en el que esta el texto.', label='Idioma' | |
) | |
send_prompt_button = gr.Button(value='Añadir') | |
prompts_table = gr.DataFrame(headers=['Eliminar', 'Prompts', 'Idioma'], type='array', interactive=False) | |
with gr.Tab('Submit'): | |
_ = gr.Markdown( | |
"Asegúrese que hizo las suficientes pruebas para aprobar el chatbot." | |
) | |
submit_button = gr.Button(value='ENVIAR!') | |
output_file = gr.File(interactive=False, label='Output file') | |
# ----------------------------------------------- ACTIONS ----------------------------------------------------- | |
# Update the dataframes based on the languages selected in the first tab | |
languages.change( | |
utils.add_language, languages, [language_greet, language_random, language_prompt] | |
) | |
# Add info to the tables | |
send_greet_button.click( | |
utils.add_data_table, | |
[messages_table, greet, type_greet, language_greet], | |
[messages_table, greet, type_greet, language_greet] | |
) | |
send_random_button.click( | |
utils.add_data_table, | |
[random_table, random_data, language_random], | |
[random_table, random_data, language_random] | |
) | |
send_question_button.click( | |
utils.add_data_table, | |
[questions_table, question, context], | |
[questions_table, question, context] | |
) | |
send_prompt_button.click( | |
utils.add_data_table, | |
[prompts_table, prompt_data, language_prompt], | |
[prompts_table, prompt_data, language_prompt] | |
) | |
# Remove info from the tables | |
messages_table.select( | |
utils.remove_data_table, messages_table, messages_table | |
) | |
random_table.select( | |
utils.remove_data_table, random_table, random_table | |
) | |
questions_table.select( | |
utils.remove_data_table, questions_table, questions_table | |
) | |
# Create the chatbot: create media (csv files, audio and video) and vectorstore | |
create_chatbot_button.click( | |
lambda: gr.update(value='Creating chatbot...', interactive=False), None, create_chatbot_button | |
).then( | |
utils.create_chatbot, | |
[client, name, messages_table, random_table, questions_table, base_image], | |
create_chatbot_button | |
) | |
# Initialize chat | |
start_test_button.click( | |
lambda: gr.update(value='Iniciando chat...'), None, start_test_button | |
).then( | |
lambda: time.sleep(1.5), None, None | |
).then( | |
chatbot.start_chat, client, [chat, output_audio, chat_row] | |
).then( | |
lambda: gr.update(value='Reiniciar chat'), None, start_test_button | |
) | |
# Chat with the chatbot | |
user_input.submit( | |
chatbot.get_random_data, client, output_audio | |
).then( | |
chatbot.get_answer, | |
[chat, user_input, client, general_prompt, context_prompt], | |
[chat, user_input, output_audio], show_progress='hidden' | |
) | |
# Submit chatbot: save prompts | |
submit_button.click( | |
lambda: gr.update(value='Subiendo la información', interactive=False), None, submit_button | |
).then( | |
utils.save_prompts, [client, context_prompt, prompts_table] | |
).then( | |
utils.generate_json, [client, languages, max_num_questions, name], output_file | |
).then( | |
lambda: gr.update(value='Información subida!!', interactive=False), None, submit_button | |
) | |
app.launch(debug=True, auth=(os.environ.get('SPACE_USERNAME'), os.environ.get('SPACE_PASSWORD'))) | |