import os import gradio as gr 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, ) # --- Chat handler --- 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. """ # --- 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: # --- Send request to model --- response = client.chat.completions.create( model="openai/gpt-oss-120b:fireworks-ai", messages=[ {"role": "system", "content": system}, {"role": "user", "content": user_message}, ], temperature=0.7, max_tokens=2000, ) reply = response.choices[0].message.content except Exception as e: reply = f"⚠️ Error: {str(e)}" return reply # --- Gradio UI --- 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 insights, risk assessment, and personalized recommendations. """ ) 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) 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_btn = gr.Button("📤 Generate Medical Report") output_box = gr.Textbox(label="AI-Generated Medical Report", lines=25) 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()