Spaces:
Sleeping
Sleeping
File size: 5,814 Bytes
dab6e6a 5e6f9c4 dab6e6a 5e6f9c4 dab6e6a 5e6f9c4 b1a364e 5e6f9c4 b1a364e 5e6f9c4 771d4ac 5e6f9c4 771d4ac 5e6f9c4 29c0acf 5e6f9c4 b1a364e 5e6f9c4 b1a364e 5e6f9c4 b069a16 771d4ac ee377a3 5e6f9c4 ee377a3 771d4ac a104661 5e6f9c4 a104661 771d4ac b1a364e 5e6f9c4 771d4ac b1a364e 5e6f9c4 b1a364e 5e6f9c4 b1a364e 5e6f9c4 | 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 |
# PATIO DE JUEGOS DE INTELIGENCIA ARTIFICIAL
# PROYECTO 50 Consulta Médica colombiana IA
# Consejero Médico regional personalizado
# Bogota colombia 2024
import gradio as gr
import os
import google.generativeai as genai
# --- CONFIGURACIÓN DE GEMINI ---
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
if not GEMINI_API_KEY:
print("Error: GEMINI_API_KEY no encontrada. Por favor configúrala en tus variables de entorno.")
# En un script real, podrías querer salir o levantar una excepción aquí.
# Para Gradio, si la clave no está, la llamada a la API fallará más tarde.
# exit() # Descomentar si quieres que el script termine si no hay clave
else:
try:
genai.configure(api_key=GEMINI_API_KEY)
except Exception as e:
print(f"Error al configurar Gemini API: {e}")
# exit() # Descomentar si quieres que el script termine si la configuración falla
# Inicializar el modelo Gemini (puedes cambiar "gemini-1.5-flash" por otro, ej. "gemini-1.5-pro-latest")
# Usamos "gemini-1.5-flash" por ser más rápido y económico, adecuado para muchos casos de chat.
try:
gemini_model = genai.GenerativeModel("gemini-1.5-flash")
print("Modelo Gemini inicializado correctamente.")
except Exception as e:
print(f"Error al inicializar el modelo Gemini: {e}")
gemini_model = None # Asegurarse de que la app no intente usar un modelo no inicializado
# Función para manejar la completación del chat con Gemini
def chat_con_bot(ciudad, informacion_clinica):
if not gemini_model:
return "Error: El modelo Gemini no está disponible. Verifica la configuración de la API Key y el modelo."
if not GEMINI_API_KEY: # Doble chequeo por si el print anterior no detuvo la ejecución
return "Error: GEMINI_API_KEY no configurada. La aplicación no puede funcionar."
mensaje_usuario = f"Ciudad: {ciudad}. Información clínica: {informacion_clinica}"
# El prompt para Gemini puede beneficiarse de un rol o instrucción más explícita
# sobre cómo debe actuar, similar a un system prompt.
# Por ejemplo, podrías anteponer:
# "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."
# Sin embargo, para mantener la similitud con el original, solo pasamos el mensaje.
# Para Gemini, los parámetros como temperature, max_tokens, top_p se pasan en `generation_config`
generation_config = genai.types.GenerationConfig(
temperature=0.7,
max_output_tokens=1024, # Equivalente a max_tokens en Groq
top_p=1
# stop_sequences=None # Equivalente a stop en Groq, si lo necesitas
)
try:
completion = gemini_model.generate_content(
mensaje_usuario,
generation_config=generation_config,
stream=True
)
respuesta = ""
for chunk in completion:
# Gemini chunks tienen el texto directamente en chunk.text (o en partes si hay candidatos múltiples)
# Para un chat simple, chunk.text suele ser suficiente.
if chunk.parts: # Más robusto para manejar diferentes tipos de chunks
respuesta += "".join(part.text for part in chunk.parts if hasattr(part, 'text'))
elif hasattr(chunk, 'text') and chunk.text:
respuesta += chunk.text
except Exception as e:
print(f"Error durante la llamada a Gemini API: {e}")
return f"Hubo un error al procesar tu solicitud con Gemini: {str(e)}"
return respuesta
# Configurar la interfaz de Gradio usando Blocks
with gr.Blocks(theme=gr.themes.Soft()) as interfaz: # Añadido un tema suave para mejor apariencia
gr.Markdown("# Consulta Médica colombiana IA\nModelo Gemini 1.5 Flash en español") # Actualizado el modelo
with gr.Row():
informacion_clinica = gr.Textbox(
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?",
lines=5, # Más espacio para texto largo
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."
)
with gr.Row():
ciudad = gr.Textbox(
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)?",
value="Bogotá",
placeholder="Ej: Medellín, bachiller"
)
with gr.Row():
respuesta_bot = gr.Textbox(label="Respuesta del Consejero Médico IA", lines=10, interactive=False) # Renombrado para claridad y hecho no interactivo
with gr.Row():
enviar = gr.Button("Enviar Consulta") # Texto del botón más descriptivo
limpiar = gr.Button("Limpiar Campos")
def limpiar_campos():
return "Bogotá", "", "" # Limpia ciudad (a Bogotá), información clínica y respuesta
enviar.click(fn=chat_con_bot, inputs=[ciudad, informacion_clinica], outputs=respuesta_bot)
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
# Lanzar la aplicación
if __name__ == "__main__":
if not GEMINI_API_KEY or not gemini_model:
print("No se puede iniciar la interfaz de Gradio debido a problemas con la API de Gemini.")
print("Por favor, asegúrate de que la variable de entorno GEMINI_API_KEY está configurada correctamente.")
else:
interfaz.launch() |