excinober/Maternal
0
1import time2import gradio as gr3from langchain_openai import ChatOpenAI4from langchain.schema import HumanMessage, SystemMessage, AIMessage5import pandas as pd6from datasets import load_dataset7import os8 9css = """10 .bg-none { background-color: transparent; }11 :root {12 --background-fill-primary: #ffffff !important;13 --radius-lg: 30px !important;14 --text-xl: 45px !important;15 }16 17 #component-1 {18 border: 2px solid #e5e7eb !important;19 box-shadow: var(--block-shadow);20 border-color: var(--block-border-color);21 border-radius: var(--block-radius);22 background: var(--block-background-fill);23 }24 25 #component-2 {26 border: 2px solid;27 box-shadow: var(--block-shadow);28 border-color: var(--block-border-color);29 border-radius: var(--block-radius);30 background: var(--block-background-fill);31 width: 100%;32 line-height: var(--line-sm)33 }34 35 .shadow-none {36 box-shadow: none !important;37 }38 39 textarea {40 box-shadow: none !important;41 }42 43 .p-0 {44 padding: 0 !important;45 }46 47 #component-4 {48 padding: 8px 0 !important;49 display: inline-flex !important;50 justify-content: right;51 box-shadow: none !important;52 }53 54 footer {55 display: none !important;56 }57 58 .svelte-1mwvhlq {59 display: none !important;60 }61"""62 63def respond(message, chat_history):64 # Inicializa el modelo OpenAI con la API key65 chatgpt = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o-mini")66 67 # Inicia el mensaje de contexto (sistema)68 messages = [69 SystemMessage(content="Eres un asistente virtual de una plataforma de telemedicina que proporciona apoyo emocional y conductual a mujeres latinas en periodo de gestación y durante el primer y segundo periodo postparto")70 ]71 72 # Agrega el historial de la conversación (humanos y asistentes anteriores)73 for human_msg, ai_msg in chat_history:74 messages.append(HumanMessage(content=human_msg)) # Mensaje del usuario75 messages.append(AIMessage(content=ai_msg)) # Respuesta del asistente76 77 # Añade el nuevo mensaje al historial78 messages.append(HumanMessage(content=message))79 80 # Envía el historial completo al modelo OpenAI para obtener la respuesta81 chat_respuesta = chatgpt(messages)82 83 # Agregar la respuesta del asistente al historial84 chat_history.append((message, chat_respuesta.content))85 86 # Guardar la conversación en el dataset87 agregar_fila_dataset(message, chat_respuesta.content)88 89 # Simular un retardo de 2 segundos para la interacción90 time.sleep(2)91 92 # Retornar el mensaje vacío (para limpiar la caja de texto) y el historial actualizado93 return "", chat_history94 95def agregar_fila_dataset(columna1, columna2):96 dataset = load_dataset('excinober/MaternalAsk', split='train')97 df = dataset.to_pandas()98 99 nueva_fila = pd.DataFrame([[columna1, columna2]], columns=['Pregunta', 'Respuesta'])100 df = pd.concat([df, nueva_fila], ignore_index=True)101 dataset = dataset.from_pandas(df)102 dataset.push_to_hub("excinober/MaternalAsk", split='train', token=os.getenv("HF_API_KEY"))103 104 105with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:106 chatbot = gr.Chatbot()107 108 with gr.Row():109 msg = gr.Textbox(placeholder="Haz tu consulta...", scale=11, show_label=False, elem_classes=["shadow-none"])110 btnsubmit = gr.Button("", icon="icon-submit.png", elem_classes=["bg-none", "shadow-none", "p-0"])111 112 # Enlazar la función 'respond' a los eventos de Gradio113 msg.submit(respond, [msg, chatbot], [msg, chatbot], queue=False)114 btnsubmit.click(respond, [msg, chatbot], [msg, chatbot], queue=False)115 116demo.launch()