File size: 5,324 Bytes
7b584bb
 
 
 
 
 
 
 
 
 
 
 
 
 
30142d7
 
 
7b584bb
 
30142d7
 
 
 
 
 
 
7b584bb
30142d7
 
7b584bb
 
30142d7
 
 
 
 
7b584bb
30142d7
 
 
 
 
 
 
 
 
 
 
 
7b584bb
 
 
 
30142d7
 
7b584bb
 
 
30142d7
7b584bb
 
 
 
 
 
 
 
30142d7
 
 
7b584bb
 
 
 
 
 
 
 
 
 
 
 
30142d7
7b584bb
 
 
 
 
 
 
30142d7
7b584bb
 
 
 
 
 
 
 
 
 
 
 
30142d7
 
7b584bb
 
 
 
30142d7
 
7b584bb
 
 
 
 
 
30142d7
 
 
 
7b584bb
 
 
 
 
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
118
119
120
121
122
123
124
125
126
127
import gradio as gr
from groq import Groq
import os

# 🔹 Set your Groq API Key securely
os.environ["GROQ_API_KEY"] = "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"

# 🔹 Initialize Groq client
client = Groq(api_key=os.getenv("GROQ_API_KEY"))

# 🔹 Define model
MODEL_ID = "llama-3.3-70b-versatile"

# ---------------- AI Response Function ----------------
def respond(albumin, creatinine, glucose, crp, mcv, rdw, alp, wbc, lymphocytes,
            hemoglobin, pv, age, gender, height, weight):
    
    # ----- System Prompt -----
    system_message = (
        "You are an AI Health Assistant that analyzes laboratory biomarkers "
        "and generates structured, patient-friendly health summaries.\n\n"
        "Your task is to evaluate the provided biomarkers and generate an AI-driven medical report "
        "with insights, observations, and clear explanations.\n"
        "You must strictly follow this structured format:\n\n"
        "### Tabular Mapping\n"
        "- Always include a Markdown table with exactly four columns:\n"
        "| Biomarker | Value | Status (Low/Normal/High) | AI-Inferred Insight |\n"
        "- Include **all available biomarkers** below:\n"
        "Albumin, Creatinine, Glucose, CRP, MCV, RDW, ALP, WBC, Lymphocytes, Hemoglobin, Plasma Viscosity (PV)\n"
        "- The first row after the header must begin directly with 'Albumin'.\n"
        "- Each biomarker must appear exactly once as a separate row.\n\n"
        "### Executive Summary\n"
        "- List Top 3 Health Priorities.\n"
        "- Highlight Key Strengths or normal biomarkers.\n\n"
        "### System-Specific Analysis\n"
        "- Summarize findings grouped by organ systems (Liver, Kidney, Immune, Blood, etc.).\n"
        "- Status: “Optimal” | “Monitor” | “Needs Attention”.\n"
        "- Provide 2–3 sentences of explanation in plain, supportive language.\n\n"
        "### Personalized Action Plan\n"
        "- Provide categorized recommendations (Nutrition, Lifestyle, Testing, Medical Consultation).\n"
        "- Never recommend medication or treatment.\n\n"
        "### Interaction Alerts\n"
        "- Highlight potential relationships between markers (e.g., high CRP + low Albumin).\n\n"
        "### Constraints\n"
        "- Never give a diagnosis or prescribe medicine.\n"
        "- Never use data not present in the input.\n"
        "- Always recommend consulting a healthcare professional.\n"
        "- Always include normal reference ranges for each biomarker.\n"
        "- Use simple, clear, patient-friendly language."
    )

    # ----- User Message -----
    user_message = (
        f"Patient Information:\n"
        f"- Age: {age} years\n"
        f"- Gender: {gender}\n"
        f"- Height: {height} cm\n"
        f"- Weight: {weight} kg\n\n"
        f"Biomarker Values:\n"
        f"- Albumin: {albumin} g/dL\n"
        f"- Creatinine: {creatinine} mg/dL\n"
        f"- Glucose: {glucose} mg/dL\n"
        f"- CRP: {crp} mg/L\n"
        f"- MCV: {mcv} fL\n"
        f"- RDW: {rdw} %\n"
        f"- ALP: {alp} U/L\n"
        f"- WBC: {wbc} x10^3/μL\n"
        f"- Lymphocytes: {lymphocytes} %\n"
        f"- Hemoglobin: {hemoglobin} g/dL\n"
        f"- Plasma Viscosity (PV): {pv} mPa·s"
    )

    # ----- Call Groq API -----
    completion = client.chat.completions.create(
        model=MODEL_ID,
        messages=[
            {"role": "system", "content": system_message},
            {"role": "user", "content": user_message}
        ],
        temperature=0.2,
        max_tokens=2000,
        top_p=0.9,
        stream=False
    )

    return completion.choices[0].message.content


# ---------------- Gradio UI ----------------
with gr.Blocks() as demo:
    gr.Markdown("## 🧪 AI Health Assistant (Extended Biomarkers via Groq Llama-3.3-70B)")

    with gr.Row():
        with gr.Column():
            albumin = gr.Textbox(label="Albumin (g/dL)", value="4.5")
            creatinine = gr.Textbox(label="Creatinine (mg/dL)", value="1.5")
            glucose = gr.Textbox(label="Glucose (mg/dL, fasting)", value="160")
            crp = gr.Textbox(label="CRP (mg/L)", value="2.5")
            mcv = gr.Textbox(label="MCV (fL)", value="150")
            rdw = gr.Textbox(label="RDW (%)", value="15")
            alp = gr.Textbox(label="ALP (U/L)", value="146")
            wbc = gr.Textbox(label="WBC (10^3/μL)", value="10.5")
            lymphocytes = gr.Textbox(label="Lymphocytes (%)", value="38")
            hemoglobin = gr.Textbox(label="Hemoglobin (g/dL)", value="13.5")
            pv = gr.Textbox(label="Plasma Viscosity (mPa·s)", value="1.7")

        with gr.Column():
            age = gr.Textbox(label="Age (years)", value="30")
            gender = gr.Dropdown(choices=["Male", "Female"], label="Gender", value="Male")
            height = gr.Textbox(label="Height (cm)", value="170")
            weight = gr.Textbox(label="Weight (kg)", value="65")

    output = gr.Textbox(label="AI Health Report", lines=30)

    btn = gr.Button("Generate Report")
    btn.click(
        respond,
        inputs=[
            albumin, creatinine, glucose, crp, mcv, rdw, alp, wbc,
            lymphocytes, hemoglobin, pv, age, gender, height, weight
        ],
        outputs=output
    )

if __name__ == "__main__":
    demo.launch()