Mispaces / app.py
JairoCesar's picture
Update app.py
54bffbe verified
import os
import math
import gradio as gr
from huggingface_hub import InferenceClient
# Configuraci贸n del cliente de Hugging Face para el modelo Llama
client = InferenceClient(model="meta-llama/Meta-Llama-3-8B-Instruct")
# Coeficientes obtenidos del modelo de regresion logistica
coef_intercepto = -5.123
coef_edad = 0.045
coef_sexo = 0.68
coef_diabetes = 0.58
coef_hipertension = 0.70
coef_colesterolLDL = 0.012
coef_colesterolHDL = -0.015
coef_presionSistolica = 0.022
coef_presionDiastolica = 0.018
coef_fumador = 0.80
def calcular_riesgo(edad, sexo, diabetes, hipertension, colesterolLDL, colesterolHDL, presionSistolica, presionDiastolica, fumador):
# Calcular el logit
logit = (coef_intercepto +
coef_edad * edad +
coef_sexo * (1 if sexo == "Hombre" else 0) +
coef_diabetes * (1 if diabetes == "S铆" else 0) +
coef_hipertension * (1 if hipertension == "S铆" else 0) +
coef_colesterolLDL * colesterolLDL +
coef_colesterolHDL * colesterolHDL +
coef_presionSistolica * presionSistolica +
coef_presionDiastolica * presionDiastolica +
coef_fumador * (1 if fumador == "S铆" else 0))
# Calcular el riesgo (probabilidad) usando la funci贸n log铆stica
riesgo = 1 / (1 + math.exp(-logit))
resultado = {
"edad": edad,
"sexo": sexo,
"diabetes": diabetes,
"hipertension": hipertension,
"colesterolLDL": colesterolLDL,
"colesterolHDL": colesterolHDL,
"presionSistolica": presionSistolica,
"presionDiastolica": presionDiastolica,
"fumador": fumador,
"riesgo_enfermedad_coronaria": f"{riesgo * 100:.2f}%"
}
comentario = generar_comentario(resultado)
resultado["comentario"] = comentario
return resultado
def generar_comentario(resultado):
prompt = (f"El paciente tiene {resultado['edad']} a帽os, es {resultado['sexo']}, "
f"{'tiene' if resultado['diabetes'] == 'S铆' else 'no tiene'} diabetes, "
f"{'tiene' if resultado['hipertension'] == 'S铆' else 'no tiene'} hipertensi贸n, "
f"tiene un nivel de colesterol LDL de {resultado['colesterolLDL']} y HDL de {resultado['colesterolHDL']}, "
f"su presi贸n sist贸lica es {resultado['presionSistolica']} y diast贸lica es {resultado['presionDiastolica']}, "
f"y {'es' if resultado['fumador'] == 'S铆' else 'no es'} fumador. "
f"El riesgo calculado de enfermedad coronaria es {resultado['riesgo_enfermedad_coronaria']}. "
f"Comente sobre este resultado.")
chat_history = [{"role": "system", "content": "Eres un asistente 煤til que proporciona respuestas en espa帽ol."}, {"role": "user", "content": prompt}]
response = client.chat_completion(messages=chat_history, max_tokens=500)
return response.choices[0].message.content
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
edad = gr.Number(label="Edad", value=40)
sexo = gr.Radio(label="Sexo", choices=["Hombre", "Mujer"], value="Hombre")
diabetes = gr.Radio(label="Diabetes", choices=["S铆", "No"], value="No")
hipertension = gr.Radio(label="Hipertensi贸n", choices=["S铆", "No"], value="No")
colesterolLDL = gr.Number(label="Colesterol LDL", value=2)
colesterolHDL = gr.Number(label="Colesterol HDL", value=3)
presionSistolica = gr.Number(label="Presi贸n Sist贸lica", value=120)
presionDiastolica = gr.Number(label="Presi贸n Diast贸lica", value=80)
fumador = gr.Radio(label="Fumador", choices=["S铆", "No"], value="No")
calcular_btn = gr.Button("Calcular")
output = gr.HTML(label="Resultado")
def mostrar_resultado(*args):
resultado = calcular_riesgo(*args)
resultado_html = f"""
<div style="color:black;">
<h2>Datos del Usuario:</h2>
<table border="1" style="width:100%; border-collapse: collapse;">
<tr><th>Edad</th><td>{resultado['edad']}</td></tr>
<tr><th>Sexo</th><td>{resultado['sexo']}</td></tr>
<tr><th>Diabetes</th><td>{resultado['diabetes']}</td></tr>
<tr><th>Hipertensi贸n</th><td>{resultado['hipertension']}</td></tr>
<tr><th>Colesterol LDL</th><td>{resultado['colesterolLDL']}</td></tr>
<tr><th>Colesterol HDL</th><td>{resultado['colesterolHDL']}</td></tr>
<tr><th>Presi贸n Sist贸lica</th><td>{resultado['presionSistolica']}</td></tr>
<tr><th>Presi贸n Diast贸lica</th><td>{resultado['presionDiastolica']}</td></tr>
<tr><th>Fumador</th><td>{resultado['fumador']}</td></tr>
</table>
<hr>
<h2>Resultados:</h2>
<table border="1" style="width:100%; border-collapse: collapse;">
<tr><th>Riesgo de Enfermedad Coronaria</th><td>{resultado['riesgo_enfermedad_coronaria']}</td></tr>
<tr><th>Comentario</th><td>{resultado['comentario']}</td></tr>
</table>
</div>
"""
return resultado_html
calcular_btn.click(
mostrar_resultado,
inputs=[edad, sexo, diabetes, hipertension, colesterolLDL, colesterolHDL, presionSistolica, presionDiastolica, fumador],
outputs=[output]
)
if __name__ == "__main__":
demo.launch()