import gradio as gr import os from gcp import download_credentials from utils import make_invisible, make_visible, create_folders from backend_functions import get_answer, init_greeting, export_dataframe from dotenv import load_dotenv load_dotenv() download_credentials() create_folders() with gr.Blocks() as main_app: with gr.Tab('Chatbot'): user_id = gr.State('') # id used to find the chat into the database with gr.Column(): with gr.Row(): chat = gr.Chatbot(label="Chatbot Crunchyroll") output_video = gr.Video(interactive=False, label='Video', autoplay=True, height=400) with gr.Column(): with gr.Row(): options_audio = gr.Radio(["XTTS", "Elevenlabs"], value="Elevenlabs", label="Audio Generation") options_prompt = gr.Radio(["Default", "Custom"], value="Default", label="Prompts") output_audio = gr.Audio(interactive=False, label='Audio', autoplay=False) messages = gr.State([]) with gr.Row(): text = gr.Textbox(label='Write your question') with gr.Column(): with gr.Row(): button_text = gr.Button(value='Submit text') clear_button = gr.ClearButton([chat, messages]) with gr.Tab('Prompts'): general_prompt = gr.Text( placeholder='Ingrese el prompt general del bot', label='General prompt' ) standalone_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 100 words.\n" "Chat History:\n" "\n" "HISTORY\n" "Follow-up message: QUESTION\n" "Standalone message:\n", line_breaks=True ) with gr.Tab('Times'): columns = ["User Message", "Chatbot Response", "Standalone Question", "Create Embedding", "Query Pinecone", "Context Prompt", "Final Response GPT", "Create Clean Message", "Create Audio", "Create Video", "Final Time"] table_times = gr.DataFrame(headers=columns, visible=False, interactive=False) with gr.Column(): with gr.Row(visible=False) as row_export_csv: export_button = gr.Button(value="Export CSV") csv = gr.File(interactive=False, visible=False) text.submit( fn=get_answer, inputs=[text, chat, messages, output_audio, output_video, table_times, options_audio, options_prompt, general_prompt, standalone_prompt], outputs=[chat, output_audio, output_video, table_times] ).then( lambda: None, None, [text] ).then( fn=make_visible, inputs=None, outputs=row_export_csv ) button_text.click( fn=get_answer, inputs=[text, chat, messages, output_audio, output_video, table_times, options_audio, options_prompt, general_prompt, standalone_prompt], outputs=[chat, output_audio, output_video, table_times] ).then( lambda: None, None, [text] ).then( fn=make_visible, inputs=None, outputs=row_export_csv ) export_button.click( fn=export_dataframe, inputs=table_times, outputs=csv ) main_app.load(init_greeting, inputs=[chat, messages], outputs=[chat, messages]) main_app.launch(debug=True, auth=(os.environ.get('SPACE_USERNAME'), os.environ.get('SPACE_PASSWORD')))