Muhammadidrees's picture
Update app.py
a7e45d3 verified
raw
history blame
4.11 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
# Load your model from Hugging Face Hub
MODEL_ID = "Muhammadidrees/MedicalInsights"
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(MODEL_ID, device_map="auto")
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
# Function to build structured input and query the LLM
def analyze(
albumin, creatinine, glucose, crp, mcv, rdw, alp,
wbc, lymph, age, gender, height, weight
):
# Calculate BMI (hidden from user, only passed to LLM)
try:
height_m = height / 100 # cm → m
bmi = round(weight / (height_m ** 2), 2)
except Exception:
bmi = "N/A"
# System-style instruction (non-medical, fixed headings)
system_prompt = (
"""Output MUST strictly follow this structured format:
1. Executive Summary
- Longevity Vitality Score (out of 100)
- Top Priority Issues
- Key Strengths
2. System-Specific Analysis
- Blood Health (MCV, RDW, Lymphocytes, WBC)
- Protein & Liver Health (Albumin, ALP)
- Kidney Health (Creatinine µmol/L)
- Metabolic Health (Glucose mmol/L, lnCRP)
- Other relevant systems
3. Personalized Action Plan
- Medical (tests/consults)
- Nutrition (diet & supplements)
- Lifestyle (hydration, exercise, sleep)
- Testing (follow-up labs: ferritin, Vitamin D, GGT)
4. Interaction Alerts
- How biomarkers interact (e.g., anemia ↔ infection cycle, ALP with bone/liver origin)
5. Longevity Metrics
- Metabolic Health Score
- Cardiovascular & Cognitive risk trajectory
. Enhanced AI Insights & Longitudinal Risk
"""
)
# Construct profile input
patient_input = f"""
Patient Profile:
- Age: {age}
- Gender: {gender}
- Height: {height} cm
- Weight: {weight} kg
- BMI: {bmi}
Lab Values:
- Albumin: {albumin} g/dL
- Creatinine: {creatinine} mg/dL
- Glucose: {glucose} mg/dL
- C-Reactive Protein: {crp} mg/L
- Mean Cell Volume: {mcv} fL
- Red Cell Distribution Width: {rdw} %
- Alkaline Phosphatase: {alp} U/L
- White Blood Cell Count: {wbc} K/uL
- Lymphocyte Percentage: {lymph} %
"""
prompt = system_prompt + "\n" + patient_input
# Call LLM
result = pipe(
prompt,
max_new_tokens=5000,
do_sample=True,
temperature=0.3,
top_p=0.9,
return_full_text=False
)
# Force output to start from "Executive Summary"
output_text = result[0]["generated_text"].strip()
if "Executive Summary" in output_text:
output_text = output_text.split("Executive Summary", 1)[-1]
output_text = "Executive Summary" + output_text
return output_text
# Build Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🧪 Wellness Insights AI — Enter Profile Data")
with gr.Row():
albumin = gr.Number(label="Albumin (g/dL)")
wbc = gr.Number(label="White Blood Cell Count (K/uL)")
with gr.Row():
creatinine = gr.Number(label="Creatinine (mg/dL)")
lymph = gr.Number(label="Lymphocyte Percentage (%)")
with gr.Row():
glucose = gr.Number(label="Glucose (mg/dL)")
age = gr.Number(label="Age (years)")
with gr.Row():
crp = gr.Number(label="C-Reactive Protein (mg/L)")
gender = gr.Dropdown(choices=["Male", "Female"], label="Gender")
with gr.Row():
mcv = gr.Number(label="Mean Cell Volume (fL)")
height = gr.Number(label="Height (cm)")
with gr.Row():
rdw = gr.Number(label="Red Cell Distribution Width (%)")
weight = gr.Number(label="Weight (kg)")
with gr.Row():
alp = gr.Number(label="Alkaline Phosphatase (U/L)")
analyze_btn = gr.Button("🔎 Analyze")
output = gr.Textbox(label="AI Wellness Assessment", lines=12)
analyze_btn.click(
fn=analyze,
inputs=[albumin, creatinine, glucose, crp, mcv, rdw, alp,
wbc, lymph, age, gender, height, weight],
outputs=output
)
demo.launch()