Spaces:
Sleeping
Sleeping
File size: 4,510 Bytes
afddc96 6c89169 796bdfb 01d4e47 afddc96 dbaef5a 6c89169 01d4e47 afddc96 6c89169 afddc96 796bdfb dbaef5a 796bdfb dbaef5a 796bdfb dbaef5a afddc96 6c89169 796bdfb 6c89169 7a0c8e1 dbaef5a 796bdfb afddc96 796bdfb 6c89169 796bdfb 6c89169 796bdfb 6c89169 796bdfb 6c89169 afddc96 796bdfb dbaef5a 796bdfb dbaef5a 796bdfb dbaef5a 796bdfb dbaef5a 796bdfb dbaef5a 796bdfb dbaef5a |
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 128 129 130 131 132 133 134 135 136 137 |
import os
import gradio as gr
import markdown
from openai import OpenAI
# --- Initialize Hugging Face router client ---
HF_TOKEN = os.getenv("HF_TOKEN")
if not HF_TOKEN:
raise ValueError("❌ HF_TOKEN not found. Please set it in your Hugging Face Space secrets.")
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=HF_TOKEN,
)
# --- AI processing function ---
def generate_report(age, gender, height, weight, albumin, creatinine, glucose, crp, mcv, rdw, alp, wbc, lymphocytes, hb, pv):
# --- System prompt ---
system = """You are an advanced Medical Insight Generation AI trained to analyze clinical biomarkers, urine analysis, and lab test results.
Your goal is to generate a medically accurate, empathetic, and client-friendly health report in the following structured format:
1. Executive Summary
2. System-Specific Analysis
3. Personalized Action Plan
4. Interaction Alerts
5. Longevity Metrics
6. Tabular Mapping
7. Enhanced AI Insight
8. AI Insights & Longitudinal Risk Assessment
9. Predictive Longevity Risk Profile
10. Actionable Next Steps
Maintain a professional, compassionate tone and explain medical reasoning in accessible language.
"""
# --- Format user message ---
user_message = (
f"Patient Info:\n"
f"- Age: {age}\n"
f"- Gender: {gender}\n"
f"- Height: {height} cm\n"
f"- Weight: {weight} kg\n\n"
f"Biomarkers:\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: {hb} g/dL\n"
f"- Plasma (PV): {pv} mL\n"
)
try:
# --- Query model ---
response = client.chat.completions.create(
model="openai/gpt-oss-120b:groq",
messages=[
{"role": "system", "content": system},
{"role": "user", "content": user_message},
],
temperature=0.5,
)
# --- Get model reply and convert Markdown → HTML ---
reply = response.choices[0].message.content
html_output = markdown.markdown(
reply,
extensions=["tables", "fenced_code", "nl2br"]
)
except Exception as e:
html_output = f"<p style='color:red;'>⚠️ Error: {str(e)}</p>"
return html_output
# --- Gradio Interface ---
with gr.Blocks(title="🧬 Biomarker Medical Insight Chatbot") as demo:
gr.Markdown(
"""
## 🧠 AI-Powered Biomarker Report Generator
Enter the patient details and biomarkers below.
The AI will generate a **comprehensive medical report** with structured insights, risk assessment, and recommendations.
"""
)
# --- Basic Info ---
with gr.Row():
age = gr.Number(label="Age", value=45)
gender = gr.Radio(["Male", "Female"], label="Gender", value="Male")
with gr.Row():
height = gr.Number(label="Height (cm)", value=175)
weight = gr.Number(label="Weight (kg)", value=72)
# --- Biomarkers ---
gr.Markdown("### 🧫 Biomarker Inputs (Demo Values Pre-filled)")
with gr.Row():
albumin = gr.Number(label="Albumin (g/dL)", value=4.2)
creatinine = gr.Number(label="Creatinine (mg/dL)", value=1.1)
glucose = gr.Number(label="Glucose (mg/dL)", value=98)
with gr.Row():
crp = gr.Number(label="CRP (mg/L)", value=2.5)
mcv = gr.Number(label="MCV (fL)", value=90.5)
rdw = gr.Number(label="RDW (%)", value=13.2)
with gr.Row():
alp = gr.Number(label="ALP (U/L)", value=110)
wbc = gr.Number(label="WBC (x10^3/μL)", value=6.8)
lymphocytes = gr.Number(label="Lymphocytes (%)", value=35)
with gr.Row():
hb = gr.Number(label="Hemoglobin (g/dL)", value=14.5)
pv = gr.Number(label="Plasma (PV) (mL)", value=3000)
# --- Submit + Output ---
submit_btn = gr.Button("📤 Generate Medical Report")
output_box = gr.HTML(label="🧠 AI-Generated Medical Report (Rendered in Markup)")
submit_btn.click(
generate_report,
inputs=[
age, gender, height, weight,
albumin, creatinine, glucose, crp, mcv,
rdw, alp, wbc, lymphocytes, hb, pv
],
outputs=output_box
)
demo.launch()
|