JairoCesar commited on
Commit
5e6f9c4
·
verified ·
1 Parent(s): 2c47f99

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -32
app.py CHANGED
@@ -4,63 +4,114 @@
4
  # Consejero Médico regional personalizado
5
  # Bogota colombia 2024
6
 
 
 
 
7
 
 
 
8
 
9
- import gradio as gr
10
- from groq import Groq
 
 
 
 
 
 
 
 
 
11
 
12
- # Inicializar el cliente Groq
13
- client = Groq()
 
 
 
 
 
 
14
 
15
- # Función para manejar la completación del chat
16
  def chat_con_bot(ciudad, informacion_clinica):
 
 
 
 
 
17
  mensaje_usuario = f"Ciudad: {ciudad}. Información clínica: {informacion_clinica}"
18
- completion = client.chat.completions.create(
19
- model="llama-3.1-70b-versatile",
20
- messages=[
21
- {
22
- "role": "user",
23
- "content": mensaje_usuario
24
- }
25
- ],
 
26
  temperature=0.7,
27
- max_tokens=1024,
28
- top_p=1,
29
- stream=True,
30
- stop=None,
31
  )
32
-
33
- # Recopilar la respuesta
34
- respuesta = ""
35
- for chunk in completion:
36
- respuesta += chunk.choices[0].delta.content or ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  return respuesta
39
 
40
  # Configurar la interfaz de Gradio usando Blocks
41
- with gr.Blocks() as interfaz:
42
- gr.Markdown("# Consulta Médica colombiana IA\nModelo Llama 3.1 70B en español")
43
 
44
  with gr.Row():
45
  informacion_clinica = gr.Textbox(
46
- label="¿Cuáles son tus síntomas, desde cuándo aparecieron, cuál es tu sexo, edad, y antecedentes médicos, fármacos y si hay algún hallazgo físico observable?"
 
 
47
  )
48
 
49
  with gr.Row():
50
  ciudad = gr.Textbox(
51
  label="¿En qué ciudad o municipio vives (para ajustes epidemiológicos) y qué nivel de educación tienes (para ajustar la explicación de tu enfermedad)?",
52
- value="Bogotá"
 
53
  )
54
 
55
  with gr.Row():
56
- respuesta = gr.Textbox(label="Respuesta")
57
 
58
  with gr.Row():
59
- enviar = gr.Button("Enviar")
60
- limpiar = gr.Button("Limpiar")
 
 
 
61
 
62
- enviar.click(fn=chat_con_bot, inputs=[ciudad, informacion_clinica], outputs=respuesta)
63
- limpiar.click(fn=lambda: ("Bogotá", ""), inputs=None, outputs=[ciudad, informacion_clinica])
64
 
65
  # Lanzar la aplicación
66
- interfaz.launch()
 
 
 
 
 
 
4
  # Consejero Médico regional personalizado
5
  # Bogota colombia 2024
6
 
7
+ import gradio as gr
8
+ import os
9
+ import google.generativeai as genai
10
 
11
+ # --- CONFIGURACIÓN DE GEMINI ---
12
+ GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
13
 
14
+ if not GEMINI_API_KEY:
15
+ print("Error: GEMINI_API_KEY no encontrada. Por favor configúrala en tus variables de entorno.")
16
+ # En un script real, podrías querer salir o levantar una excepción aquí.
17
+ # Para Gradio, si la clave no está, la llamada a la API fallará más tarde.
18
+ # exit() # Descomentar si quieres que el script termine si no hay clave
19
+ else:
20
+ try:
21
+ genai.configure(api_key=GEMINI_API_KEY)
22
+ except Exception as e:
23
+ print(f"Error al configurar Gemini API: {e}")
24
+ # exit() # Descomentar si quieres que el script termine si la configuración falla
25
 
26
+ # Inicializar el modelo Gemini (puedes cambiar "gemini-1.5-flash" por otro, ej. "gemini-1.5-pro-latest")
27
+ # Usamos "gemini-1.5-flash" por ser más rápido y económico, adecuado para muchos casos de chat.
28
+ try:
29
+ gemini_model = genai.GenerativeModel("gemini-1.5-flash")
30
+ print("Modelo Gemini inicializado correctamente.")
31
+ except Exception as e:
32
+ print(f"Error al inicializar el modelo Gemini: {e}")
33
+ gemini_model = None # Asegurarse de que la app no intente usar un modelo no inicializado
34
 
35
+ # Función para manejar la completación del chat con Gemini
36
  def chat_con_bot(ciudad, informacion_clinica):
37
+ if not gemini_model:
38
+ return "Error: El modelo Gemini no está disponible. Verifica la configuración de la API Key y el modelo."
39
+ if not GEMINI_API_KEY: # Doble chequeo por si el print anterior no detuvo la ejecución
40
+ return "Error: GEMINI_API_KEY no configurada. La aplicación no puede funcionar."
41
+
42
  mensaje_usuario = f"Ciudad: {ciudad}. Información clínica: {informacion_clinica}"
43
+
44
+ # El prompt para Gemini puede beneficiarse de un rol o instrucción más explícita
45
+ # sobre cómo debe actuar, similar a un system prompt.
46
+ # Por ejemplo, podrías anteponer:
47
+ # "Eres un consejero médico colombiano. Proporciona información basada en los siguientes datos, ajustando tu lenguaje según el nivel educativo y la epidemiología local."
48
+ # Sin embargo, para mantener la similitud con el original, solo pasamos el mensaje.
49
+
50
+ # Para Gemini, los parámetros como temperature, max_tokens, top_p se pasan en `generation_config`
51
+ generation_config = genai.types.GenerationConfig(
52
  temperature=0.7,
53
+ max_output_tokens=1024, # Equivalente a max_tokens en Groq
54
+ top_p=1
55
+ # stop_sequences=None # Equivalente a stop en Groq, si lo necesitas
 
56
  )
57
+
58
+ try:
59
+ completion = gemini_model.generate_content(
60
+ mensaje_usuario,
61
+ generation_config=generation_config,
62
+ stream=True
63
+ )
64
+
65
+ respuesta = ""
66
+ for chunk in completion:
67
+ # Gemini chunks tienen el texto directamente en chunk.text (o en partes si hay candidatos múltiples)
68
+ # Para un chat simple, chunk.text suele ser suficiente.
69
+ if chunk.parts: # Más robusto para manejar diferentes tipos de chunks
70
+ respuesta += "".join(part.text for part in chunk.parts if hasattr(part, 'text'))
71
+ elif hasattr(chunk, 'text') and chunk.text:
72
+ respuesta += chunk.text
73
+
74
+ except Exception as e:
75
+ print(f"Error durante la llamada a Gemini API: {e}")
76
+ return f"Hubo un error al procesar tu solicitud con Gemini: {str(e)}"
77
 
78
  return respuesta
79
 
80
  # Configurar la interfaz de Gradio usando Blocks
81
+ with gr.Blocks(theme=gr.themes.Soft()) as interfaz: # Añadido un tema suave para mejor apariencia
82
+ gr.Markdown("# Consulta Médica colombiana IA\nModelo Gemini 1.5 Flash en español") # Actualizado el modelo
83
 
84
  with gr.Row():
85
  informacion_clinica = gr.Textbox(
86
+ label="¿Cuáles son tus síntomas, desde cuándo aparecieron, cuál es tu sexo, edad, y antecedentes médicos, fármacos y si hay algún hallazgo físico observable?",
87
+ lines=5, # Más espacio para texto largo
88
+ placeholder="Ej: Dolor de cabeza y fiebre desde hace 2 días, mujer, 30 años, sufro de migraña, tomo ibuprofeno, no veo nada raro al examinarme."
89
  )
90
 
91
  with gr.Row():
92
  ciudad = gr.Textbox(
93
  label="¿En qué ciudad o municipio vives (para ajustes epidemiológicos) y qué nivel de educación tienes (para ajustar la explicación de tu enfermedad)?",
94
+ value="Bogotá",
95
+ placeholder="Ej: Medellín, bachiller"
96
  )
97
 
98
  with gr.Row():
99
+ respuesta_bot = gr.Textbox(label="Respuesta del Consejero Médico IA", lines=10, interactive=False) # Renombrado para claridad y hecho no interactivo
100
 
101
  with gr.Row():
102
+ enviar = gr.Button("Enviar Consulta") # Texto del botón más descriptivo
103
+ limpiar = gr.Button("Limpiar Campos")
104
+
105
+ def limpiar_campos():
106
+ return "Bogotá", "", "" # Limpia ciudad (a Bogotá), información clínica y respuesta
107
 
108
+ enviar.click(fn=chat_con_bot, inputs=[ciudad, informacion_clinica], outputs=respuesta_bot)
109
+ limpiar.click(fn=limpiar_campos, inputs=None, outputs=[ciudad, informacion_clinica, respuesta_bot]) # Asegúrate de que 'respuesta_bot' coincide con el nombre del output Textbox
110
 
111
  # Lanzar la aplicación
112
+ if __name__ == "__main__":
113
+ if not GEMINI_API_KEY or not gemini_model:
114
+ print("No se puede iniciar la interfaz de Gradio debido a problemas con la API de Gemini.")
115
+ print("Por favor, asegúrate de que la variable de entorno GEMINI_API_KEY está configurada correctamente.")
116
+ else:
117
+ interfaz.launch()