gpt / app.py
Muhammadidrees's picture
Update app.py
7a0c8e1 verified
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()