AlbertDuvan commited on
Commit
09461d3
·
verified ·
1 Parent(s): dd93648

Upload 2 files

Browse files
Files changed (1) hide show
  1. app.py +48 -34
app.py CHANGED
@@ -37,13 +37,13 @@ def buscar_en_pubmed(pregunta):
37
  return "No encontré artículos relevantes en PubMed."
38
  except Exception as e:
39
  logging.error(f"Error al buscar en PubMed: {e}")
40
- return f"Error al buscar en PubMed: {e}"
41
 
42
  # Función para buscar en Internet con tiempo de espera
43
  def buscar_en_internet(pregunta):
44
  try:
45
  url = f"https://api.duckduckgo.com/?q={pregunta}&format=json"
46
- respuesta = requests.get(url, timeout=5) # Tiempo de espera de 5 segundos
47
  datos = respuesta.json()
48
 
49
  if "Abstract" in datos and datos["Abstract"]:
@@ -52,44 +52,58 @@ def buscar_en_internet(pregunta):
52
  return "No encontré información en Internet."
53
  except Exception as e:
54
  logging.error(f"Error al buscar en Internet: {e}")
55
- return f"Error al buscar en Internet: {e}"
56
 
57
  # Función para generar respuestas del modelo (optimizada para CPU)
58
  def generar_respuesta(pregunta):
59
- inputs = tokenizer(
60
- f"Eres un profesor médico con vasto conocimiento en fisiología, bioquímica, farmacología y otras áreas médicas. "
61
- f"Explica de manera clara, sencilla y didáctica. Utiliza términos médicos y explícalos dentro de tus respuestas. "
62
- f"Si no estás seguro de algo, di 'No tengo suficiente información para responder a eso'. Pregunta: {pregunta}",
63
- return_tensors="pt"
64
- ).to("cpu")
65
-
66
- # Desactivar el cálculo de gradientes para ahorrar memoria
67
- with torch.no_grad():
68
- outputs = model.generate(**inputs, max_length=100) # Reducir max_length para mayor velocidad
69
-
70
- return tokenizer.decode(outputs[0], skip_special_tokens=True)
 
 
 
 
71
 
72
  # Función principal para hacer preguntas al bot
73
  def pregunta_medica_con_carga(pregunta):
74
- yield "Procesando tu pregunta..." # Mensaje de carga
75
-
76
- # Respuesta del modelo médico
77
- respuesta_modelo = generar_respuesta(pregunta)
78
-
79
- # Buscar en PubMed
80
- referencias_pubmed = buscar_en_pubmed(pregunta)
81
-
82
- # Buscar en Internet
83
- respuesta_internet = buscar_en_internet(pregunta)
84
-
85
- # Combinar respuestas
86
- respuesta_final = (
87
- f"Respuesta del Profesor Médico:\n{respuesta_modelo}\n\n"
88
- f"Referencias de PubMed:\n{referencias_pubmed}\n\n"
89
- f"Información de Internet:\n{respuesta_internet}"
90
- )
91
-
92
- yield respuesta_final
 
 
 
 
 
 
 
 
 
 
93
 
94
  # Crear la interfaz web con Gradio
95
  css = """
 
37
  return "No encontré artículos relevantes en PubMed."
38
  except Exception as e:
39
  logging.error(f"Error al buscar en PubMed: {e}")
40
+ return "Error al buscar en PubMed. Inténtalo de nuevo."
41
 
42
  # Función para buscar en Internet con tiempo de espera
43
  def buscar_en_internet(pregunta):
44
  try:
45
  url = f"https://api.duckduckgo.com/?q={pregunta}&format=json"
46
+ respuesta = requests.get(url, timeout=10) # Incrementa el tiempo de espera a 10 segundos
47
  datos = respuesta.json()
48
 
49
  if "Abstract" in datos and datos["Abstract"]:
 
52
  return "No encontré información en Internet."
53
  except Exception as e:
54
  logging.error(f"Error al buscar en Internet: {e}")
55
+ return "Error al buscar en Internet. Inténtalo de nuevo."
56
 
57
  # Función para generar respuestas del modelo (optimizada para CPU)
58
  def generar_respuesta(pregunta):
59
+ try:
60
+ inputs = tokenizer(
61
+ f"Eres un profesor médico con vasto conocimiento en fisiología, bioquímica, farmacología y otras áreas médicas. "
62
+ f"Explica de manera clara, sencilla y didáctica. Utiliza términos médicos y explícalos dentro de tus respuestas. "
63
+ f"Si no estás seguro de algo, di 'No tengo suficiente información para responder a eso'. Pregunta: {pregunta}",
64
+ return_tensors="pt"
65
+ ).to("cpu")
66
+
67
+ with torch.no_grad():
68
+ outputs = model.generate(**inputs, max_length=100) # Reducir max_length para mayor velocidad
69
+
70
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
71
+
72
+ except Exception as e:
73
+ logging.error(f"Error al generar respuesta del modelo: {e}")
74
+ return "No pude generar una respuesta. Inténtalo de nuevo."
75
 
76
  # Función principal para hacer preguntas al bot
77
  def pregunta_medica_con_carga(pregunta):
78
+ try:
79
+ # Validar la entrada
80
+ if not isinstance(pregunta, str) or not pregunta.strip():
81
+ yield "Por favor, ingresa una pregunta válida."
82
+ return
83
+
84
+ yield "Procesando tu pregunta..." # Mensaje de carga
85
+
86
+ # Respuesta del modelo médico
87
+ respuesta_modelo = generar_respuesta(pregunta)
88
+
89
+ # Buscar en PubMed
90
+ referencias_pubmed = buscar_en_pubmed(pregunta)
91
+
92
+ # Buscar en Internet
93
+ respuesta_internet = buscar_en_internet(pregunta)
94
+
95
+ # Combinar respuestas
96
+ respuesta_final = (
97
+ f"Respuesta del Profesor Médico:\n{respuesta_modelo}\n\n"
98
+ f"Referencias de PubMed:\n{referencias_pubmed}\n\n"
99
+ f"Información de Internet:\n{respuesta_internet}"
100
+ )
101
+
102
+ yield respuesta_final
103
+
104
+ except Exception as e:
105
+ logging.error(f"Error inesperado: {e}")
106
+ yield "Lo siento, ocurrió un error al procesar tu pregunta. Por favor, inténtalo de nuevo más tarde."
107
 
108
  # Crear la interfaz web con Gradio
109
  css = """