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'))) | |