import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline # Load your model from Hugging Face Hub MODEL_ID = "Muhammadidrees/my-gpt-oss" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) model = AutoModelForCausalLM.from_pretrained(MODEL_ID, device_map="auto") pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) # Function to build structured input and query the LLM def analyze( albumin, creatinine, glucose, crp, mcv, rdw, alp, wbc, lymph, age, gender, height, weight ): # Calculate BMI try: height_m = height / 100 # cm โ†’ m bmi = round(weight / (height_m ** 2), 2) except Exception: bmi = "N/A" # Improved system prompt with clearer instructions system_prompt = """You are a professional AI Medical Assistant analyzing patient biomarkers. CRITICAL: Generate a COMPLETE report following this EXACT structure. Do not stop mid-sentence. === REQUIRED OUTPUT FORMAT === 1. Executive Summary - Top Priority Issues: [List 2-3 main concerns] - Key Strengths: [List 2-3 positive findings] 2. System-Specific Analysis - Blood Health (MCV, RDW, Lymphocytes, WBC) - Protein & Liver Health (Albumin, ALP) - Kidney Health (Creatinine) - Metabolic Health (Glucose, CRP) 3. Personalized Action Plan - Medical: [Recommended tests/consultations] - Nutrition: [Dietary recommendations and supplements] - Lifestyle: [Exercise, hydration, sleep guidance] - Testing: [Follow-up labs needed] 4. Interaction Alerts [Explain how biomarkers interact and influence each other] 6. Tabular Mapping | Biomarker | Value | Status | AI Insight | Client Message | |-----------|-------|--------|------------|----------------| [Complete table for all biomarkers] 7. Enhanced AI Insights - Subclinical Nutrient Analysis (Iron, B12, Folate status) - ALP Interpretation (bone vs liver origin) - Immune System Assessment (WBC & lymphocyte trends) - Long-term Health Considerations === END FORMAT === Now analyze the following patient data and provide a COMPLETE report:""" # Construct patient profile patient_input = f""" Patient Profile: - Age: {age} years - Gender: {gender} - Height: {height} cm - Weight: {weight} kg - BMI: {bmi} Laboratory Values: - Albumin: {albumin} g/dL - Creatinine: {creatinine} mg/dL - Glucose: {glucose} mg/dL - C-Reactive Protein (CRP): {crp} mg/L - Mean Cell Volume (MCV): {mcv} fL - Red Cell Distribution Width (RDW): {rdw} % - Alkaline Phosphatase (ALP): {alp} U/L - White Blood Cell Count (WBC): {wbc} K/uL - Lymphocyte Percentage: {lymph} % Generate complete analysis now:""" prompt = system_prompt + "\n" + patient_input try: # Increased max_new_tokens significantly for complete output result = pipe( prompt, max_new_tokens=2500, # INCREASED from 1000 do_sample=True, temperature=0.7, # INCREASED from 0.3 for better generation top_p=0.92, top_k=50, repetition_penalty=1.1, # Prevent repetition return_full_text=False, pad_token_id=tokenizer.eos_token_id ) output_text = result[0]["generated_text"].strip() # Clean up output - remove any prompt leakage if "Executive Summary" in output_text: idx = output_text.find("Executive Summary") output_text = output_text[idx:] elif "1. Executive Summary" in output_text: idx = output_text.find("1. Executive Summary") output_text = output_text[idx:] # If output seems incomplete, add a note if len(output_text) < 500: output_text += "\n\nโš ๏ธ Note: Output may be incomplete. Consider re-running the analysis." return output_text except Exception as e: return f"Error during analysis: {str(e)}\n\nPlease check your input values and try again." # Build Gradio UI with improved layout with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown(""" # ๐Ÿงช Wellness Insights AI ### Enter Patient Profile & Lab Values for Comprehensive Analysis """) with gr.Row(): with gr.Column(): gr.Markdown("### ๐Ÿ‘ค Demographics") age = gr.Number(label="Age (years)", value=30) gender = gr.Dropdown(choices=["Male", "Female"], label="Gender", value="Male") height = gr.Number(label="Height (cm)", value=175) weight = gr.Number(label="Weight (kg)", value=70) with gr.Column(): gr.Markdown("### ๐Ÿฉธ Blood Health Markers") wbc = gr.Number(label="White Blood Cell Count (K/uL)", value=7.0) lymph = gr.Number(label="Lymphocyte Percentage (%)", value=30) mcv = gr.Number(label="Mean Cell Volume (fL)", value=90) rdw = gr.Number(label="Red Cell Distribution Width (%)", value=13) with gr.Row(): with gr.Column(): gr.Markdown("### ๐Ÿซ€ Metabolic Markers") glucose = gr.Number(label="Glucose (mg/dL)", value=95) crp = gr.Number(label="C-Reactive Protein (mg/L)", value=1.5) with gr.Column(): gr.Markdown("### ๐Ÿงฌ Organ Function Markers") albumin = gr.Number(label="Albumin (g/dL)", value=4.2) creatinine = gr.Number(label="Creatinine (mg/dL)", value=1.0) alp = gr.Number(label="Alkaline Phosphatase (U/L)", value=70) analyze_btn = gr.Button("๐Ÿ”Ž Generate Comprehensive Analysis", variant="primary", size="lg") gr.Markdown("### ๐Ÿ“‹ Analysis Report") output = gr.Textbox( label="AI-Generated Lab Report", lines=25, max_lines=50, show_copy_button=True ) analyze_btn.click( fn=analyze, inputs=[albumin, creatinine, glucose, crp, mcv, rdw, alp, wbc, lymph, age, gender, height, weight], outputs=output ) gr.Markdown(""" --- **Note:** This tool provides educational insights based on biomarker analysis. Always consult healthcare professionals for medical advice. """) demo.launch(share=False)