Spaces:
Sleeping
Sleeping
File size: 53,945 Bytes
9a33833 8ae36cb 9a33833 9be1c64 a6e838a 1ce93ee 9be1c64 521ae0b a6e838a 521ae0b 7e8e126 9d8a1d3 8572e8e 9d8a1d3 a6e838a 9d8a1d3 8572e8e 9d8a1d3 a6e838a 9d8a1d3 64bcbd0 b511adc 9d8a1d3 80ced1a 9d8a1d3 79fd5a0 9d8a1d3 8572e8e 9d8a1d3 0bff8df d26bf4d 9d8a1d3 8572e8e 9d8a1d3 e90cabe 9d8a1d3 29307e1 29603e5 dfde3bd 29603e5 acc5442 646c43e d286106 fdb8c57 da230a8 646c43e d286106 646c43e d286106 646c43e d286106 646c43e d286106 646c43e d286106 646c43e d286106 29307e1 3e028aa 9d8a1d3 c4bdbed 24d616f 29307e1 92de1ad ab28649 92de1ad da77158 868c4c0 2432cf4 868c4c0 2432cf4 868c4c0 2432cf4 da77158 868c4c0 dabf8fa 868c4c0 dabf8fa 868c4c0 dabf8fa da77158 868c4c0 da77158 dabf8fa da77158 dabf8fa da77158 92de1ad 997720f e04bbda d680a98 da77158 997720f 29307e1 92de1ad 997720f 92de1ad 997720f 92de1ad 997720f dccbd75 997720f ab28649 dccbd75 92de1ad de23e8e 92de1ad 0dbcfd3 e90cabe 29307e1 9d8a1d3 e90cabe f89ccbe 3e028aa e4c7db5 3e028aa 6ab8d3f 3e028aa 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f 3e028aa 6ab8d3f e4c7db5 3e028aa 6ab8d3f 3e028aa 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f e4c7db5 6ab8d3f 2010d92 6ab8d3f 2010d92 6ab8d3f 2010d92 e4c7db5 3e028aa e90cabe |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 |
import os
os.system('pip install curl_cffi tqdm bitsandbytes tiktoken g4f pinecone-client pandas datasets sentence-transformers')
# Setup and load your keys
import os
from g4f import ChatCompletion
#from google.colab import userdata
from pinecone import Pinecone
import pandas as pd
from datasets import Dataset
from sentence_transformers import SentenceTransformer
import gradio as gr
model_name = "BAAI/bge-m3"
# Retrieve the Pinecone API key from the user
PINECONE_API_KEY = "3a3e9022-381d-436e-84cb-ba93464d283e" # Use the key you set in the secrets
PINECONE_ENVIRONMENT = "us-east-1" # Use the environment you set in the secrets
# Initialize Pinecone with the API key
pc = Pinecone(api_key=PINECONE_API_KEY)
# Global variables to store the selected model and dimensions
EMBED_MODEL = 'BGE_M3-1024'
DIMENSIONS = 1024
# Confirm selection automatically
print(f"Model selected: {EMBED_MODEL}")
print(f"Dimensions set as: {DIMENSIONS}")
# Function to print current selection (can be used in other cells)
def print_current_selection():
print(f"Currently selected model: {EMBED_MODEL}")
print(f"Dimensions: {DIMENSIONS}")
# Establecer el nombre del índice automáticamente
INDEX_NAME = 'neonatos'
# Obtener la clave API de Pinecone
#PINECONE_API_KEY = userdata.get('PINECONE_API_KEY')
def connect_to_pinecone(index_name):
global INDEX_NAME
try:
pc = Pinecone(api_key=PINECONE_API_KEY)
index = pc.Index(index_name)
# Asegurarse de que la conexión se establezca
index_stats = index.describe_index_stats()
print(f"Successfully connected to Pinecone index '{index_name}'!")
print("Index Stats:", index_stats)
# Actualizar la variable global INDEX_NAME
INDEX_NAME = index_name
print(f"Global INDEX_NAME updated to: {INDEX_NAME}")
except Exception as e:
print(f"Failed to connect to Pinecone index '{index_name}':", str(e))
# Conectar automáticamente al índice "neonatos"
connect_to_pinecone(INDEX_NAME)
# Función para imprimir el nombre del índice actual (puede ser usada en otras celdas)
def print_current_index():
print(f"Current index name: {INDEX_NAME}")
# Verificar si las variables globales necesarias están configuradas
if 'INDEX_NAME' not in globals() or INDEX_NAME is None:
raise ValueError("INDEX_NAME is not set. Please set the index name first.")
if 'EMBED_MODEL' not in globals() or EMBED_MODEL is None:
raise ValueError("EMBED_MODEL is not set. Please select an embedding model first.")
# Inicializar cliente de Pinecone
#PINECONE_API_KEY = userdata.get('PINECONE_API_KEY')
pc = Pinecone(api_key=PINECONE_API_KEY)
# Inicializar el índice de Pinecone
index = pc.Index(INDEX_NAME)
# Obtener la dimensión del índice
index_stats = index.describe_index_stats()
vector_dim = index_stats['dimension']
print(f"Index dimension: {vector_dim}")
# Definir manualmente los campos de contexto y enlace
CONTEXT_FIELDS = ['Tag','Pregunta','Respuesta']
LINK_FIELDS = ['Tag','Respuesta']
# Imprimir confirmación de campos seleccionados
print(f"Context fields set to: {CONTEXT_FIELDS}")
print(f"Link fields set to: {LINK_FIELDS}")
# Función para obtener las selecciones actuales de campos (puede ser usada en otras celdas)
def get_field_selections():
return {
"CONTEXT_FIELDS": CONTEXT_FIELDS,
"LINK_FIELDS": LINK_FIELDS
}
#####################################
# Check if required global variables are set
if 'EMBED_MODEL' not in globals() or EMBED_MODEL is None:
raise ValueError("EMBED_MODEL is not set. Please select an embedding model first.")
if 'INDEX_NAME' not in globals() or INDEX_NAME is None:
raise ValueError("INDEX_NAME is not set. Please create or select an index first.")
if 'CONTEXT_FIELDS' not in globals() or 'LINK_FIELDS' not in globals():
raise ValueError("CONTEXT_FIELDS and LINK_FIELDS are not set. Please run the field selection cell first.")
# Initialize the Sentence-Transformer model
embedding_model = SentenceTransformer(model_name)
# Initialize Pinecone with the API key and connect to the index
pinecone_client = Pinecone(api_key=PINECONE_API_KEY)
index = pinecone_client.Index(INDEX_NAME)
# Constants
LIMIT = 3750
def vector_search(query):
# Generate embedding using Sentence-Transformer model
xq = embedding_model.encode(query)
# Perform vector search on Pinecone index
res = index.query(vector=xq.tolist(), top_k=3, include_metadata=True)
if res['matches']:
return [
{
'content': ' '.join(f"{k}: {v}" for k, v in match['metadata'].items() if k in CONTEXT_FIELDS and k != 'Tag'),
'metadata': match['metadata']
}
for match in res['matches']
if 'metadata' in match
]
return []
def create_prompt(query, contexts):
prompt_start = "\n\nContexto:\n"
prompt_end = f"\n\nPregunta: {query}\nRespuesta:"
current_contexts = "\n\n---\n\n".join([context['content'] for context in contexts])
if len(prompt_start + current_contexts + prompt_end) >= LIMIT:
# Truncate contexts if they exceed the limit
available_space = LIMIT - len(prompt_start) - len(prompt_end)
truncated_contexts = current_contexts[:available_space]
return prompt_start + truncated_contexts + prompt_end
else:
return prompt_start + current_contexts + prompt_end
def complete(prompt):
return [f"🌟"]
def check_image_exists(filepath):
return os.path.exists(filepath)
def chat_function(message, history):
# Perform vector search
search_results = vector_search(message)
# Create prompt with relevant contexts
query_with_contexts = create_prompt(message, search_results)
# Generate response
response = complete(query_with_contexts)
partial_message = response[0].split("\n")[0] # Solo tomar la primera línea de la respuesta
# Handle the logic for processing tags and images internally
relevant_links = [result['metadata'].get(field) for result in search_results for field in LINK_FIELDS if field in result['metadata']]
full_response = partial_message
image_url = None
tags_detected = []
filtered_links = []
if relevant_links:
for link in relevant_links:
if any(tag in link for tag in ["rId101", "rId105", "rId109", "rId113", "rId117",
"rId121", "rId125", "rId129", "rId133", "rId136",
"rId139", "rId142", "rId145", "rId149", "rId153",
"rId157", "rId161", "rId165", "rId169", "rId173",
"rId177", "rId180", "rId184", "rId187", "rId192",
"rId195", "rId40", "rId44", "rId47", "rId50",
"rId53", "rId56", "rId59", "rId63", "rId66",
"rId70", "rId73", "rId76", "rId80", "rId83",
"rId87", "rId90", "rId94", "rId97"]):
tags_detected.append(link) # Save the tag but don't display it
else:
filtered_links.append(link)
# Add the first relevant link under a single "Respuestas relevantes" section
if filtered_links:
full_response += filtered_links[0] #f".\n\nRespuesta:\n" + filtered_links[0]
# Now handle the images based on the detected tags
tags_to_images = {
"rId101": "images/rId101.png",
"rId105": "images/rId105.png",
"rId109": "images/rId109.png",
"rId113": "images/rId113.png",
"rId117": "images/rId117.png",
"rId121": "images/rId121.png",
"rId125": "images/rId125.png",
"rId129": "images/rId129.png",
"rId133": "images/rId133.png",
"rId136": "images/rId136.png",
"rId139": "images/rId139.png",
"rId142": "images/rId142.png",
"rId145": "images/rId145.png",
"rId149": "images/rId149.png",
"rId153": "images/rId153.png",
"rId157": "images/rId157.png",
"rId161": "images/rId161.png",
"rId165": "images/rId165.png",
"rId169": "images/rId169.png",
"rId173": "images/rId173.png",
"rId177": "images/rId177.png",
"rId180": "images/rId180.png",
"rId184": "images/rId184.png",
"rId187": "images/rId187.png",
"rId192": "images/rId192.png",
"rId195": "images/rId195.png",
"rId40": "images/rId40.png",
"rId44": "images/rId44.png",
"rId47": "images/rId47.png",
"rId50": "images/rId50.png",
"rId53": "images/rId53.png",
"rId56": "images/rId56.png",
"rId59": "images/rId59.png",
"rId63": "images/rId63.png",
"rId66": "images/rId66.png",
"rId70": "images/rId70.png",
"rId73": "images/rId73.png",
"rId76": "images/rId76.png",
"rId80": "images/rId80.png",
"rId83": "images/rId83.png",
"rId87": "images/rId87.png",
"rId90": "images/rId90.png",
"rId94": "images/rId94.png",
"rId97": "images/rId97.png",
}
for tag in tags_detected:
for key, path in tags_to_images.items():
if key in tag and check_image_exists(path):
image_url = path
break
return full_response, image_url
def update_image(image_url):
if image_url:
return image_url
else:
return None
images = [
{"id": "rId101", "path": "images/rId101.png", "description": "El código UBIGEO muestra que Lima (150101) tiene el mayor número de registros, seguido por Trujillo (130101) y San Juan de Miraflores (150133), destacando la concentración de atención médica en estas zonas. Un gráfico de barras visualiza los 10 códigos UBIGEO más frecuentes, facilitando la identificación de las áreas con mayor actividad en salud."},
{"id": "rId105", "path": "images/rId105.png", "description": "Los establecimientos de nivel 3 son los más representados, con 652,948 registros, seguidos por los de nivel 4 (310,272) y nivel 2 (277,385)."},
{"id": "rId109", "path": "images/rId109.png", "description": "El código UBIGEO revela que Lima (150101) lidera en registros, seguido por Trujillo (130101) y San Juan de Miraflores (150133), evidenciando la concentración de atención médica. Un gráfico de barras destaca los 10 códigos más frecuentes, facilitando la identificación de áreas con mayor actividad en salud."},
{"id": "rId113", "path": "images/rId113.png", "description": "El Instituto Nacional Materno Perinatal lidera en registros, destacando su rol en la atención materno-infantil en Perú. Le siguen el Hospital María Auxiliadora y el Hospital Nacional Cayetano Heredia. El gráfico de barras horizontal compara los 10 establecimientos con más registros."},
{"id": "rId117", "path": "images/rId117.png", "description": "El código UBIGEO muestra que Lima (150101) encabeza los registros, seguido por Trujillo (130101) y San Juan de Miraflores (150133), reflejando la concentración de atención médica. Un gráfico de barras resalta los 10 códigos más frecuentes, ayudando a identificar las áreas con mayor actividad en salud."},
{"id": "rId121", "path": "images/rId121.png", "description": "La Atención Inmediata del Recién Nacido Normal es el servicio más registrado, seguido por el Internamiento del Recién Nacido con Patología No Quirúrgica. Estos reflejan los cuidados comunes en neonatología. Servicios más especializados, como Internamiento en UCI y Atención por Emergencia, son menos frecuentes. Un gráfico de barras horizontal muestra la distribución de los registros por tipo de servicio."},
{"id": "rId125", "path": "images/rId125.png", "description": "El análisis de la variable FECINGHOSP muestra que los ingresos hospitalarios se distribuyen en el tiempo, con picos en ciertos períodos. El rango va del 7 de diciembre de 2021 al 30 de septiembre de 2023, con una mediana el 6 de noviembre de 2022, reflejando una demanda constante de hospitalización de recién nacidos. Un gráfico de líneas muestra los momentos de mayor afluencia hospitalaria."},
{"id": "rId129", "path": "images/rId129.png", "description": "La variable FECALTAHOSP, que registra las altas hospitalarias, sigue un patrón similar a los ingresos, con fechas entre el 1 de enero de 2022 y el 30 de septiembre de 2023. La mediana es el 10 de noviembre de 2022, sugiriendo hospitalizaciones breves y un manejo eficiente. Un gráfico de líneas ilustra la distribución de las altas a lo largo del tiempo."},
{"id": "rId133", "path": "images/rId133.png", "description": "El análisis muestra que la mayoría de los recién nacidos están hospitalizados por períodos cortos, con una mediana de 1 día y una media de 3.46 días. La desviación estándar de 5.25 días refleja la variabilidad según la complejidad de los casos, con estancias máximas de hasta 35 días. Histogramas y boxplots visualizan la distribución de los días de hospitalización según sexo y nivel de establecimiento de salud, destacando variaciones por factores."},
{"id": "rId136", "path": "images/rId136.png", "description": ""}, #10
{"id": "rId139", "path": "images/rId139.png", "description": ""},
{"id": "rId142", "path": "images/rId142.png", "description": ""},
{"id": "rId145", "path": "images/rId145.png", "description": ""},
{"id": "rId149", "path": "images/rId149.png", "description": ""},
{"id": "rId153", "path": "images/rId153.png", "description": ""},
{"id": "rId157", "path": "images/rId157.png", "description": ""},
{"id": "rId161", "path": "images/rId161.png", "description": ""},
{"id": "rId165", "path": "images/rId165.png", "description": ""},
{"id": "rId169", "path": "images/rId169.png", "description": ""},
{"id": "rId173", "path": "images/rId173.png", "description": ""}, #20
{"id": "rId177", "path": "images/rId177.png", "description": "Este gráfico 📊 muestra la distribución del valor bruto de medicamentos por sexo, con mujeres en rosa y hombres en azul. "},
{"id": "rId180", "path": "images/rId180.png", "description": "El valor bruto de los medicamentos tiene una mediana de 0.69 soles, una media de 2.14 soles y una desviación estándar de 3.78 soles. Aunque la mayoría de los costos son bajos 💊, algunos alcanzan hasta 17.213 soles 💰. Los histogramas 📊 muestran variaciones significativas por sexo y departamento."},
{"id": "rId184", "path": "images/rId184.png", "description": "Los gráficos 📊 reflejan la distribución por sexo y departamento, mostrando diferencias en los costos de medicamentos entre hombres y mujeres, así como entre distintas regiones."},
{"id": "rId187", "path": "images/rId187.png", "description": "El valor neto de los medicamentos, tras descuentos, tiene una mediana de 0.4 soles y una media de 1.93 soles, con una desviación estándar de 3.59 soles. La mayoría presenta un costo bajo, aunque algunos alcanzan hasta 16.5 soles 💰."},
{"id": "rId192", "path": "images/rId192.png", "description": "Este mapa 🗺️ ilustra la distribución de los registros de atención de salud en los departamentos del Perú 🇵🇪, utilizando un gradiente de color que varía desde tonos claros (menos registros) hasta tonos oscuros (más registros) 📊. Se destacan regiones con mayor actividad médica, como Lima."},
{"id": "rId195", "path": "images/rId195.png", "description": "Este mapa 🗺️ muestra los departamentos del Perú 🇵🇪 con sus nombres claramente visibles, desde Tumbes y Piura en la costa 🌊 hasta Cusco y Puno en los Andes 🏔️ y Loreto en la Amazonía 🌳"},
{"id": "rId40", "path": "images/rId40.png", "description": "El análisis de la frecuencia de códigos anonimizados revela que los 10 más comunes se repiten entre 52 y 75 veces, indicando múltiples visitas o tratamientos para los mismos pacientes. Un gráfico de barras muestra la frecuencia de estos códigos, usando solo los primeros 5 caracteres para facilitar su lectura y comparación."},
{"id": "rId44", "path": "images/rId44.png", "description": "El análisis de la frecuencia de códigos anonimizados muestra que los 10 más comunes se repiten entre 52 y 75 veces, lo que sugiere múltiples visitas o tratamientos de los mismos pacientes. Un gráfico de barras presenta la frecuencia de estos códigos, utilizando solo los primeros 5 caracteres para simplificar la comparación."},
{"id": "rId47", "path": "images/rId47.png", "description": ""},
{"id": "rId50", "path": "images/rId50.png", "description": ""}, #30
{"id": "rId53", "path": "images/rId53.png", "description": ""},
{"id": "rId56", "path": "images/rId56.png", "description": ""},
{"id": "rId59", "path": "images/rId59.png", "description": ""},
{"id": "rId63", "path": "images/rId63.png", "description": "La variable FECATENCION, que registra la fecha de atención a los recién nacidos, abarca del 1 de enero de 2022 al 30 de septiembre de 2023, con mayor concentración entre mayo de 2022 y abril de 2023. El análisis muestra una distribución uniforme con ligeros picos. Las visualizaciones incluyen registros por año y una serie de tiempo con líneas punteadas que destacan fechas clave para un análisis temporal detallado."},
{"id": "rId66", "path": "images/rId66.png", "description": ""},
{"id": "rId70", "path": "images/rId70.png", "description": "La variable SEXO clasifica a los pacientes en femenino y masculino, con una ligera predominancia de masculinos (651,827) sobre femeninos (588,778), lo que puede aportar a la comprensión de las dinámicas de género en la atención neonatal. Un gráfico de barras con colores diferenciados (rosado y azul) facilita la comparación visual. La variable PESO, con un rango de 1.75 kg a 4.55 kg y un promedio de 3.13 kg, refleja un margen estrecho de variabilidad."},
{"id": "rId73", "path": "images/rId73.png", "description": ""},
{"id": "rId76", "path": "images/rId76.png", "description": ""},
{"id": "rId80", "path": "images/rId80.png", "description": "El análisis muestra que Lima lidera en registros con 284,662, seguida por La Libertad, Cajamarca y Cusco, con entre 73,592 y 80,447 registros. Esto refleja la alta población y centralización de servicios en la capital. En contraste, Moquegua, Madre de Dios y Tacna tienen menos de 8,000 registros, posiblemente por menor población o acceso limitado a salud. Gráficos de barras visualizan los departamentos con más y menos registros."},
{"id": "rId83", "path": "images/rId83.png", "description": ""}, #40
{"id": "rId87", "path": "images/rId87.png", "description": "En cuanto a la distribución por provincia, la ciudad de Lima lidera con 83,743 registros, seguida por Trujillo, San Juan de Miraflores, y Cajamarca, que registran entre 26,721 y 32,926 casos. Estas cifras reflejan la alta demanda de atención en áreas urbanas y densamente pobladas. En contraste, provincias como Ocros y Canta, con tan solo 3 y 5 registros respectivamente, se encuentran en el extremo opuesto, lo que podría indicar áreas con menor cobertura de servicios de salud o baja densidad poblacional. La distribución de registros por provincia se presenta en gráficos de barras que ilustran tanto los valores más altos como los más bajos."},
{"id": "rId90", "path": "images/rId90.png", "description": ""},
{"id": "rId94", "path": "images/rId94.png", "description": "El análisis por distrito confirma a Lima como el líder en registros con 83,743 casos, seguido por Trujillo y San Juan de Miraflores, resaltando su relevancia como centros de atención médica. En contraste, distritos como Acos Vinchos y Capachica tienen solo un registro, lo que sugiere menor cobertura o acceso a servicios de salud. Gráficos de barras visualizan tanto los distritos con más como con menos registros."},
{"id": "rId97", "path": "images/rId97.png", "description": ""}, #44
]
# Gradio layout setup
with gr.Blocks() as demo:
with gr.Row():
with gr.Column(scale=1):
# Agregar el video al inicio
video = gr.Video(value="video.mp4", label="Video de Introducción")
# Crear la estructura para tres columnas de carruseles
gr.Markdown("### Carruseles de Imágenes")
# Crear grupos de imágenes y descripciones
image_groups = [
#Análisis Geográfico
[images[24], images[25]],
#Valor Bruto Medicamento
[images[21],images[20]],
#Valor Neto Medicamento
[images[23],images[22]],
#Departamento (Registro)
[images[38], images[39]],
#Provincia (Registro)
[images[40], images[41]],
#Distrito (Registro)
[images[42], images[43]],
#Departamento (Análisis)
[images[29], images[12], images[11]],
#Sexo (Análisis)
[images[28], images[32]],
#Peso (Análisis)
[images[35], images[36], images[37]],
#Establecimiento de Salud
[images[3], images[1], images[10], images[30]],
#Servicio de Salud
[images[5], images[14]],
#Medicamentos
[images[16], images[17], images[18], images[15]],
]
carousel_titles = [
"Análisis Geográfico", # Título para el primer carrusel
"Valor bruto de medicamento", # Título para el segundo carrusel
"Valor neto de medicamento", #Título Tercer carrusel
"Departamento (Registro)",
"Provincia (Registro)",
"Distrito (Registro)",
"Departamento (Análisis)",
"Sexo (Análisis)",
"Peso (Análisis)",
"Establecimiento de Salud",
"Servicio de Salud",
"Medicamentos",
]
# Crear tres columnas de carruseles
with gr.Row():
for group in range(0, len(image_groups), 3): # Iterar en sets de 3 carruseles
with gr.Column(scale=1): # Crear columna para cada carrusel
with gr.Tabs():
for idx in range(3): # Tres carruseles por columna
if group + idx < len(image_groups):
images_in_carousel = image_groups[group + idx]
# Comprobar si el título existe, de lo contrario usar uno predeterminado
if (group + idx) < len(carousel_titles):
title = carousel_titles[group + idx]
else:
title = f"Carrusel {group + idx + 1}" # Título predeterminado
# Verifica si image es un diccionario o un string y ajusta en consecuencia
with gr.Tab(title): # Usar el título personalizado o predeterminado
for image in images_in_carousel:
if isinstance(image, dict):
# Si `image` es un diccionario, accede a la clave "path"
gr.Image(value=image["path"]) # Mostrar la imagen
gr.Markdown(image["description"]) # Mostrar la descripción debajo de la imagen
else:
# Si `image` es un string, úsalo directamente como ruta
gr.Image(value=image) # Mostrar la imagen
# Botón de descarga de PDF
download_button = gr.File(label="Descargar Informe sobre Administración de Medicamentos a Recién Nacidos", value="Reporte.pdf")
# Chatbot
chatbot_output = gr.Chatbot(label="ChatBot")
chatbot_input = gr.Textbox(label="Tu mensaje")
submit_button = gr.Button("Enviar")
chatbot_history = gr.State(value=[])
image_url = gr.State(value=None)
# Main accordion for categories
with gr.Accordion("Categorías de Preguntas", open=True):
# Diagnósticos Accordion
with gr.Accordion("Diagnóstico y Análisis Clínico", open=False):
# Subaccordion for Diagnósticos Principales
with gr.Accordion("Diagnósticos Principales", open=True):
button_1 = gr.Button("¿Cuál es el diagnóstico más común registrado en el dataset?")
button_2 = gr.Button("¿Qué porcentaje del total de registros corresponde al diagnóstico 'Nacido Vivo Único' (Z370)?")
button_3 = gr.Button("¿Cuáles son los diagnósticos más frecuentes que requieren hospitalización prolongada?")
button_4 = gr.Button("¿Cuáles son los códigos CIE-10 relacionados con infecciones neonatales?")
button_5 = gr.Button("¿Qué tan frecuentes son los diagnósticos relacionados con nacimientos prematuros?")
button_6 = gr.Button("¿Cómo se distribuyen los diagnósticos entre pacientes masculinos y femeninos?")
button_7 = gr.Button("¿Existen diferencias significativas en los diagnósticos entre diferentes departamentos?")
button_8 = gr.Button("¿Cuál es la incidencia de diagnósticos graves como el 'Síndrome de Dificultad Respiratoria' (P220)?")
button_9 = gr.Button("¿Cuáles son los diagnósticos menos comunes en el dataset?")
button_10 = gr.Button("¿Cuál es la proporción de diagnósticos que requieren intervención quirúrgica?")
# Subaccordion for Relación Diagnóstico-Medicamentos
with gr.Accordion("Relación Diagnóstico-Medicamentos", open=False):
button_11 = gr.Button("¿Qué diagnóstico está más frecuentemente asociado con la administración de antibióticos?")
button_12 = gr.Button("¿Qué medicamentos son comúnmente administrados a neonatos con hipoglicemia?")
button_13 = gr.Button("¿Existe una preferencia por ciertos medicamentos según el diagnóstico de nacimiento pretermino?")
button_14 = gr.Button("¿Cómo influye el diagnóstico en la forma farmacéutica del medicamento administrado?")
button_15 = gr.Button("¿Qué diagnóstico está asociado con el uso frecuente de soluciones intravenosas?")
button_16 = gr.Button("¿Qué porcentaje de neonatos con sepsis bacteriana reciben antibióticos inyectables?")
button_17 = gr.Button("¿Cuál es la relación entre el diagnóstico de ictericia neonatal y los medicamentos administrados?")
button_18 = gr.Button("¿Qué diferencias se observan en la administración de medicamentos entre diagnósticos respiratorios y gastrointestinales?")
button_19 = gr.Button("¿Cómo varía la administración de medicamentos según el tipo de parto (vaginal o cesárea)?")
button_20 = gr.Button("¿Qué diagnóstico tiene la menor cantidad de registros asociados con la administración de medicamentos?")
# Tratamientos Accordion
with gr.Accordion("Análisis Geográfico y Temporal", open=False):
# Subaccordion for Diferencias Geográficas
with gr.Accordion("Diferencias Geográficas", open=False):
button_21 = gr.Button("¿Cuál es el departamento con el mayor número de registros de administración de medicamentos?")
button_22 = gr.Button("¿Qué departamentos tienen los menores registros de administración de medicamentos?")
button_23 = gr.Button("¿Cuál es la diferencia en la administración de medicamentos entre Lima y La Libertad?")
button_24 = gr.Button("¿Qué factores podrían explicar las diferencias en la administración de medicamentos entre departamentos?")
button_25 = gr.Button("¿Cómo se distribuyen los registros de administración de medicamentos en áreas urbanas versus rurales?")
button_26 = gr.Button("¿Cuál es la relación entre el nivel de establecimiento de salud y la geografía?")
button_27 = gr.Button("¿Qué departamento muestra la mayor variedad de medicamentos administrados?")
button_28 = gr.Button("¿Existen diferencias en el costo de los medicamentos entre diferentes provincias dentro de un mismo departamento?")
button_29 = gr.Button("¿Qué provincia tiene el menor registro de administración de medicamentos?")
button_30 = gr.Button("¿Cómo varía la administración de medicamentos en los distritos más poblados versus los menos poblados?")
# Subaccordion for Análisis Temporal
with gr.Accordion("Análisis Temporal", open=False):
button_31 = gr.Button("¿Cuál es el rango de fechas de administración de medicamentos registrado en el dataset?")
button_32 = gr.Button("¿En qué meses se registra la mayor cantidad de administración de medicamentos?")
button_33 = gr.Button("¿Cuál es la distribución de la administración de medicamentos a lo largo de los días de la semana?")
button_34 = gr.Button("¿Existen picos en la administración de medicamentos durante períodos específicos?")
button_35 = gr.Button("¿Cómo ha evolucionado la administración de medicamentos desde 2022 hasta 2023?")
button_36 = gr.Button("¿Qué impacto tienen las estaciones del año en la administración de medicamentos?")
button_37 = gr.Button("¿Cómo varía la administración de medicamentos durante días festivos o feriados?")
button_38 = gr.Button("¿Cuál es la correlación entre las fechas de administración de medicamentos y los ingresos hospitalarios?")
button_39 = gr.Button("¿Qué variación se observa en la administración de medicamentos al comparar el primer y el último trimestre de 2023?")
button_40 = gr.Button("¿Cómo afecta la hora del día en la administración de medicamentos a los recién nacidos?")
# Medicamentos y Costos
with gr.Accordion("Medicamentos y Costos", open=False):
with gr.Accordion("Tipo de Medicamentos", open=False):
button_41 = gr.Button("¿Cuál es el medicamento más comúnmente administrado en recién nacidos?")
button_42 = gr.Button("¿Qué porcentaje del total de medicamentos administrados corresponde a la Tetraciclina Clorhidrato?")
button_43 = gr.Button("¿Cuáles son los principales medicamentos administrados para infecciones neonatales?")
button_44 = gr.Button("¿Qué tipo de forma farmacéutica es la más utilizada en neonatos?")
button_45 = gr.Button("¿Qué porcentaje de los medicamentos administrados corresponde a soluciones oftálmicas?")
button_46 = gr.Button("¿Cuáles son los medicamentos más costosos administrados a recién nacidos?")
button_47 = gr.Button("¿Qué medicamentos se utilizan con mayor frecuencia en los departamentos con menos recursos?")
button_48 = gr.Button("¿Qué proporción de medicamentos administrados son antibióticos?")
button_49 = gr.Button("¿Cuáles son los medicamentos menos comunes administrados en el dataset?")
button_50 = gr.Button("¿Qué relación existe entre el tipo de medicamento y el diagnóstico principal?")
with gr.Accordion("Costo de Medicamentos", open=False):
button_51 = gr.Button("¿Cuál es el costo promedio bruto de los medicamentos administrados a los recién nacidos?")
button_52 = gr.Button("¿Cuál es la mediana del valor neto de los medicamentos?")
button_53 = gr.Button("¿Qué medicamentos tienen el costo bruto más alto?")
button_54 = gr.Button("¿Cuál es la desviación estándar del costo bruto de los medicamentos?")
button_55 = gr.Button("¿Cómo varía el costo neto de los medicamentos entre diferentes departamentos?")
button_56 = gr.Button("¿Qué porcentaje de los medicamentos administrados tienen un valor neto igual a cero?")
button_57 = gr.Button("¿Cómo afecta el nivel del establecimiento de salud el costo de los medicamentos?")
button_58 = gr.Button("¿Cuál es el costo bruto máximo registrado para un medicamento?")
button_59 = gr.Button("¿Cuál es el valor neto mínimo registrado para un medicamento?")
button_60 = gr.Button("¿Cuál es la correlación entre el costo del medicamento y la duración de la hospitalización?")
with gr.Accordion("Duración de Hospitalización", open=False):
button_61 = gr.Button("¿Cuál es la duración promedio de la hospitalización para los recién nacidos?")
button_62 = gr.Button("¿Qué diagnóstico está asociado con las hospitalizaciones más prolongadas?")
button_63 = gr.Button("¿Qué proporción de recién nacidos es hospitalizada por más de 7 días?")
button_64 = gr.Button("¿Cuál es la mediana de días de hospitalización para neonatos con diagnósticos menos graves?")
button_65 = gr.Button("¿Cómo varía la duración de la hospitalización entre los diferentes departamentos?")
button_66 = gr.Button("¿Cuál es el impacto de la forma farmacéutica en la duración de la hospitalización?")
button_67 = gr.Button("¿Qué relación existe entre la cantidad de medicamento administrado y la duración de la hospitalización?")
button_68 = gr.Button("¿Cómo afecta el nivel del establecimiento de salud la duración de la hospitalización?")
button_69 = gr.Button("¿Qué diagnósticos están asociados con hospitalizaciones de corta duración?")
button_70 = gr.Button("¿Cuál es la duración de hospitalización más corta registrada?")
# Calidad de datos y recomendaciones
with gr.Accordion("Calidad de Datos y Recomendaciones", open=False):
# Subaccordion for Limitaciones de la calidad de datos
with gr.Accordion("Calidad y Limitaciones de los Datos", open=False):
button_71 = gr.Button("¿Cuál es el porcentaje de registros con valores faltantes en el dataset?")
button_72 = gr.Button("¿Cómo se manejaron los valores faltantes en la variable de peso (PESO)?")
button_73 = gr.Button("¿Qué método se utilizó para imputar valores faltantes en la variable de días de hospitalización?")
button_74 = gr.Button("¿Cómo se gestionaron los outliers en la variable de peso por género?")
button_75 = gr.Button("¿Qué limitaciones presenta el análisis en cuanto a la cobertura geográfica?")
button_76 = gr.Button("¿Cómo afecta la anonimización de datos la capacidad de análisis detallado?")
button_77 = gr.Button("¿Qué desafíos presenta la calidad de los datos en términos de precisión y consistencia?")
button_78 = gr.Button("¿Qué impacto tienen las limitaciones temporales de los datos en el análisis?")
button_79 = gr.Button("¿Cómo se verificó la imputación de outliers en las variables CANTIDAD, VALOR_BRUTO y VALOR_NETO?")
button_80 = gr.Button("¿Qué recomendaciones se hicieron para mejorar la calidad de los datos en futuros estudios?")
# Subaccordion for Mejoras y Recomendaciones
with gr.Accordion("Recomendaciones y Mejoras en Atención Neonatal", open=False):
button_81 = gr.Button("¿Qué mejoras se recomendaron para la descentralización de los servicios de salud neonatal?")
button_82 = gr.Button("¿Cómo se puede fortalecer la atención neonatal en Perú según el análisis?")
button_83 = gr.Button("¿Qué papel juega la estandarización de protocolos en la atención neonatal?")
button_84 = gr.Button("¿Cuál es la importancia de la investigación continua en la atención neonatal?")
button_85 = gr.Button("¿Cómo podría mejorar la calidad de los datos recolectados en futuras investigaciones?")
button_86 = gr.Button("¿Qué impacto tendría la mejora de infraestructura hospitalaria en áreas rurales?")
button_87 = gr.Button("¿Cuál es el beneficio de un acceso más equitativo a medicamentos en áreas con menos recursos?")
button_88 = gr.Button("¿Cómo podría la implementación de nuevas políticas de salud afectar la atención neonatal?")
button_89 = gr.Button("¿Qué enfoque se recomienda para la prevención de condiciones críticas como la sepsis neonatal?")
button_90 = gr.Button("¿Cómo podrían las recomendaciones del análisis contribuir a la reducción de la mortalidad neonatal en Perú?")
# Impacto en la salud neonatal
with gr.Accordion("Impacto en la salud neonatal", open=False):
# Subaccordion for Impacto en la salud neonatal
with gr.Accordion("Impacto en la salud neonatal", open=False):
button_91 = gr.Button("¿Qué impacto tiene la administración de Fitomenadiona en la reducción de la mortalidad neonatal?")
button_92 = gr.Button("¿Cómo influye el uso de antibióticos en la duración de la hospitalización?")
button_93 = gr.Button("¿Qué resultados clínicos se observan en neonatos que reciben Oxígeno Medicinal?")
button_94 = gr.Button("¿Cuál es la tasa de reingreso hospitalario en neonatos que recibieron antibióticos?")
button_95 = gr.Button("¿Qué efectos secundarios se asocian con el uso de medicamentos inyectables en neonatos?")
button_96 = gr.Button("¿Cómo afecta la administración de medicamentos en la tasa de supervivencia de neonatos con sepsis?")
button_97 = gr.Button("¿Qué impacto tiene la administración de soluciones intravenosas en neonatos con deshidratación?")
button_98 = gr.Button("¿Cuál es la relación entre el uso de medicamentos y la tasa de complicaciones posthospitalarias?")
button_99 = gr.Button("¿Qué medicamentos están asociados con una mejor recuperación en neonatos con infecciones?")
button_100 = gr.Button("¿Cómo influye la dosis de medicamentos en los resultados de salud neonatal?")
with gr.Column(scale=1):
image_output = gr.Image(label="Imagen asociada")
def process_input(message, history):
full_response, image = chat_function(message, history)
history.append((message, full_response))
return history, history, image
# Function to update chatbot input with preset question
def send_preset_question(question, history):
return process_input(question, history)
# Assign the buttons to send the respective categorized questions
# Assign the buttons to send the respective categorized questions
button_assignments = [
(button_1, "¿Cuál es el diagnóstico más común registrado en el dataset?"),
(button_2, "¿Qué porcentaje del total de registros corresponde al diagnóstico 'Nacido Vivo Único' (Z370)?"),
(button_3, "¿Cuáles son los diagnósticos más frecuentes que requieren hospitalización prolongada?"),
(button_4, "¿Cuáles son los códigos CIE-10 relacionados con infecciones neonatales?"),
(button_5, "¿Qué tan frecuentes son los diagnósticos relacionados con nacimientos prematuros?"),
(button_6, "¿Cómo se distribuyen los diagnósticos entre pacientes masculinos y femeninos?"),
(button_7, "¿Existen diferencias significativas en los diagnósticos entre diferentes departamentos?"),
(button_8, "¿Cuál es la incidencia de diagnósticos graves como el 'Síndrome de Dificultad Respiratoria' (P220)?"),
(button_9, "¿Cuáles son los diagnósticos menos comunes en el dataset?"),
(button_10, "¿Cuál es la proporción de diagnósticos que requieren intervención quirúrgica?"),
(button_11, "¿Qué diagnóstico está más frecuentemente asociado con la administración de antibióticos?"),
(button_12, "¿Qué medicamentos son comúnmente administrados a neonatos con hipoglicemia?"),
(button_13, "¿Existe una preferencia por ciertos medicamentos según el diagnóstico de nacimiento pretermino?"),
(button_14, "¿Cómo influye el diagnóstico en la forma farmacéutica del medicamento administrado?"),
(button_15, "¿Qué diagnóstico está asociado con el uso frecuente de soluciones intravenosas?"),
(button_16, "¿Qué porcentaje de neonatos con sepsis bacteriana reciben antibióticos inyectables?"),
(button_17, "¿Cuál es la relación entre el diagnóstico de ictericia neonatal y los medicamentos administrados?"),
(button_18, "¿Qué diferencias se observan en la administración de medicamentos entre diagnósticos respiratorios y gastrointestinales?"),
(button_19, "¿Cómo varía la administración de medicamentos según el tipo de parto (vaginal o cesárea)?"),
(button_20, "¿Qué diagnóstico tiene la menor cantidad de registros asociados con la administración de medicamentos?"),
(button_21, "¿Cuál es el departamento con el mayor número de registros de administración de medicamentos?"),
(button_22, "¿Qué departamentos tienen los menores registros de administración de medicamentos?"),
(button_23, "¿Cuál es la diferencia en la administración de medicamentos entre Lima y La Libertad?"),
(button_24, "¿Qué factores podrían explicar las diferencias en la administración de medicamentos entre departamentos?"),
(button_25, "¿Cómo se distribuyen los registros de administración de medicamentos en áreas urbanas versus rurales?"),
(button_26, "¿Cuál es la relación entre el nivel de establecimiento de salud y la geografía?"),
(button_27, "¿Qué departamento muestra la mayor variedad de medicamentos administrados?"),
(button_28, "¿Existen diferencias en el costo de los medicamentos entre diferentes provincias dentro de un mismo departamento?"),
(button_29, "¿Qué provincia tiene el menor registro de administración de medicamentos?"),
(button_30, "¿Cómo varía la administración de medicamentos en los distritos más poblados versus los menos poblados?"),
(button_31, "¿Cuál es el rango de fechas de administración de medicamentos registrado en el dataset?"),
(button_32, "¿En qué meses se registra la mayor cantidad de administración de medicamentos?"),
(button_33, "¿Cuál es la distribución de la administración de medicamentos a lo largo de los días de la semana?"),
(button_34, "¿Existen picos en la administración de medicamentos durante períodos específicos?"),
(button_35, "¿Cómo ha evolucionado la administración de medicamentos desde 2022 hasta 2023?"),
(button_36, "¿Qué impacto tienen las estaciones del año en la administración de medicamentos?"),
(button_37, "¿Cómo varía la administración de medicamentos durante días festivos o feriados?"),
(button_38, "¿Cuál es la correlación entre las fechas de administración de medicamentos y los ingresos hospitalarios?"),
(button_39, "¿Qué variación se observa en la administración de medicamentos al comparar el primer y el último trimestre de 2023?"),
(button_40, "¿Cómo afecta la hora del día en la administración de medicamentos a los recién nacidos?"),
(button_41, "¿Cuál es el medicamento más comúnmente administrado en recién nacidos?"),
(button_42, "¿Qué porcentaje del total de medicamentos administrados corresponde a la Tetraciclina Clorhidrato?"),
(button_43, "¿Cuáles son los principales medicamentos administrados para infecciones neonatales?"),
(button_44, "¿Qué tipo de forma farmacéutica es la más utilizada en neonatos?"),
(button_45, "¿Qué porcentaje de los medicamentos administrados corresponde a soluciones oftálmicas?"),
(button_46, "¿Cuáles son los medicamentos más costosos administrados a recién nacidos?"),
(button_47, "¿Qué medicamentos se utilizan con mayor frecuencia en los departamentos con menos recursos?"),
(button_48, "¿Qué proporción de medicamentos administrados son antibióticos?"),
(button_49, "¿Cuáles son los medicamentos menos comunes administrados en el dataset?"),
(button_50, "¿Qué relación existe entre el tipo de medicamento y el diagnóstico principal?"),
(button_51, "¿Cuál es el costo promedio bruto de los medicamentos administrados a los recién nacidos?"),
(button_52, "¿Cuál es la mediana del valor neto de los medicamentos?"),
(button_53, "¿Qué medicamentos tienen el costo bruto más alto?"),
(button_54, "¿Cuál es la desviación estándar del costo bruto de los medicamentos?"),
(button_55, "¿Cómo varía el costo neto de los medicamentos entre diferentes departamentos?"),
(button_56, "¿Qué porcentaje de los medicamentos administrados tienen un valor neto igual a cero?"),
(button_57, "¿Cómo afecta el nivel del establecimiento de salud el costo de los medicamentos?"),
(button_58, "¿Cuál es el costo bruto máximo registrado para un medicamento?"),
(button_59, "¿Cuál es el valor neto mínimo registrado para un medicamento?"),
(button_60, "¿Cuál es la correlación entre el costo del medicamento y la duración de la hospitalización?"),
(button_61, "¿Cuál es la duración promedio de la hospitalización para los recién nacidos?"),
(button_62, "¿Qué diagnóstico está asociado con las hospitalizaciones más prolongadas?"),
(button_63, "¿Qué proporción de recién nacidos es hospitalizada por más de 7 días?"),
(button_64, "¿Cuál es la mediana de días de hospitalización para neonatos con diagnósticos menos graves?"),
(button_65, "¿Cómo varía la duración de la hospitalización entre los diferentes departamentos?"),
(button_66, "¿Cuál es el impacto de la forma farmacéutica en la duración de la hospitalización?"),
(button_67, "¿Qué relación existe entre la cantidad de medicamento administrado y la duración de la hospitalización?"),
(button_68, "¿Cómo afecta el nivel del establecimiento de salud la duración de la hospitalización?"),
(button_69, "¿Qué diagnósticos están asociados con hospitalizaciones de corta duración?"),
(button_70, "¿Cuál es la duración de hospitalización más corta registrada?"),
(button_71, "¿Cuál es el porcentaje de registros con valores faltantes en el dataset?"),
(button_72, "¿Cómo se manejaron los valores faltantes en la variable de peso (PESO)?"),
(button_73, "¿Qué método se utilizó para imputar valores faltantes en la variable de días de hospitalización?"),
(button_74, "¿Cómo se gestionaron los outliers en la variable de peso por género?"),
(button_75, "¿Qué limitaciones presenta el análisis en cuanto a la cobertura geográfica?"),
(button_76, "¿Cómo afecta la anonimización de datos la capacidad de análisis detallado?"),
(button_77, "¿Qué desafíos presenta la calidad de los datos en términos de precisión y consistencia?"),
(button_78, "¿Qué impacto tienen las limitaciones temporales de los datos en el análisis?"),
(button_79, "¿Cómo se verificó la imputación de outliers en las variables CANTIDAD, VALOR_BRUTO y VALOR_NETO?"),
(button_80, "¿Qué recomendaciones se hicieron para mejorar la calidad de los datos en futuros estudios?"),
(button_81, "¿Qué mejoras se recomendaron para la descentralización de los servicios de salud neonatal?"),
(button_82, "¿Cómo se puede fortalecer la atención neonatal en Perú según el análisis?"),
(button_83, "¿Qué papel juega la estandarización de protocolos en la atención neonatal?"),
(button_84, "¿Cuál es la importancia de la investigación continua en la atención neonatal?"),
(button_85, "¿Cómo podría mejorar la calidad de los datos recolectados en futuras investigaciones?"),
(button_86, "¿Qué impacto tendría la mejora de infraestructura hospitalaria en áreas rurales?"),
(button_87, "¿Cuál es el beneficio de un acceso más equitativo a medicamentos en áreas con menos recursos?"),
(button_88, "¿Cómo podría la implementación de nuevas políticas de salud afectar la atención neonatal?"),
(button_89, "¿Qué enfoque se recomienda para la prevención de condiciones críticas como la sepsis neonatal?"),
(button_90, "¿Cómo podrían las recomendaciones del análisis contribuir a la reducción de la mortalidad neonatal en Perú?"),
(button_91, "¿Qué impacto tiene la administración de Fitomenadiona en la reducción de la mortalidad neonatal?"),
(button_92, "¿Cómo influye el uso de antibióticos en la duración de la hospitalización?"),
(button_93, "¿Qué resultados clínicos se observan en neonatos que reciben Oxígeno Medicinal?"),
(button_94, "¿Cuál es la tasa de reingreso hospitalario en neonatos que recibieron antibióticos?"),
(button_95, "¿Qué efectos secundarios se asocian con el uso de medicamentos inyectables en neonatos?"),
(button_96, "¿Cómo afecta la administración de medicamentos en la tasa de supervivencia de neonatos con sepsis?"),
(button_97, "¿Qué impacto tiene la administración de soluciones intravenosas en neonatos con deshidratación?"),
(button_98, "¿Cuál es la relación entre el uso de medicamentos y la tasa de complicaciones posthospitalarias?"),
(button_99, "¿Qué medicamentos están asociados con una mejor recuperación en neonatos con infecciones?"),
(button_100, "¿Cómo influye la dosis de medicamentos en los resultados de salud neonatal?"),
]
for button, question in button_assignments:
button.click(send_preset_question, inputs=[gr.State(value=question), chatbot_history], outputs=[chatbot_output, chatbot_history, image_url])
submit_button.click(process_input, inputs=[chatbot_input, chatbot_history], outputs=[chatbot_output, chatbot_history, image_url])
image_url.change(fn=update_image, inputs=image_url, outputs=image_output)
# Launch the interface
demo.launch(debug=True) |