import gradio as gr import requests import uuid import os url = os.environ["url"] # Función para manejar el flujo de la conversación def model(text, conversation, name, previous_prescriptions, obra_social, plan, nro_afiliado, ids): # Si es la primera vez, generamos los IDs if ids is None: ids = { "unique_id": str(uuid.uuid4()), "user_id": str(uuid.uuid4()) } data = { "patient_data": { "name": name, "previous_prescriptions": previous_prescriptions, "obra_social": obra_social, "plan": plan, "nro_afiliado": nro_afiliado }, "unique_id": ids["unique_id"], "user_id": ids["user_id"], "message": {"text": text}, "step": "chat" } headers = { "Content-Type": "application/json" } print("DATA",data) response = requests.post(url=url, json=data, headers=headers) output = response.json()['output']['response'] return output, ids # devolvemos los ids actualizados para mantenerlos def interact_with_chatbot(text, conversation, name, previous_prescriptions, obra_social, plan, nro_afiliado, ids): response, ids = model(text, conversation, name, previous_prescriptions, obra_social, plan, nro_afiliado, ids) return response, conversation + [(text, response)], ids # Interfaz with gr.Blocks() as demo: gr.Markdown("## 👨‍⚕️ PreDoc Chatbot 📋💊") with gr.Accordion("📝 Datos del paciente", open=True): name = gr.Textbox(label="Nombre del paciente", value="Roberto") previous_prescriptions = gr.Textbox(label="Preescripciones previas", placeholder="Ej: losartán 50mg (1 caja)...") obra_social = gr.Textbox(label="Obra social", placeholder="Ej: OSDE") plan = gr.Textbox(label="Plan", placeholder="Ej: 210") nro_afiliado = gr.Textbox(label="Número de afiliado", placeholder="Ej: 12345678") chatbot = gr.Chatbot() msg = gr.Textbox(label="Tu mensaje") state_chat = gr.State([]) # historial de la conversación state_ids = gr.State(None) # IDs generados solo una vez def user_send(message, chat_history, name, previous_prescriptions, obra_social, plan, nro_afiliado, ids): response, new_history, new_ids = interact_with_chatbot( message, chat_history, name, previous_prescriptions, obra_social, plan, nro_afiliado, ids ) return "", new_history, new_ids msg.submit( user_send, [msg, state_chat, name, previous_prescriptions, obra_social, plan, nro_afiliado, state_ids], [msg, chatbot, state_ids] ) if __name__ == "__main__": print(demo) demo.launch()