Spaces:
Sleeping
Sleeping
| 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() | |