from dotenv import load_dotenv load_dotenv() import utils 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']) 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' ) with gr.Tab('Test'): start_test_button = gr.Button(value='Iniciar test') with gr.Row(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='Write your question') 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 ----------------------------------------------------- # 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] ) # 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], create_chatbot_button ) # Update the dataframes based on the languages selected in the first tab languages.change( utils.add_language, languages, [language_greet, language_random] ) # Initialize chat start_test_button.click( lambda: gr.update(value='Iniciando chat...'), None, start_test_button ).then( chatbot.start_chat, [chat, general_prompt], [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, None, 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 and no more ? app.launch(debug=True)