import gradio as gr from transformers import pipeline from fpdf import FPDF import re from groq import Groq # Groq API import os groq_api_key = os.environ["groq_api_key"] # Initialize Groq client groq_client = Groq(api_key=groq_api_key) # Replace with your Groq API key # Load models translator = pipeline("translation", model="Helsinki-NLP/opus-mt-hi-en") classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli") # Expanded Medical Conditions conditions = [ # Respiratory Diseases "Asthma", "COPD", "Pneumonia", "Tuberculosis", "COVID-19", "Bronchitis", "Pulmonary Fibrosis", "Cystic Fibrosis", "Emphysema", "Sleep Apnea", # Cardiovascular Diseases "Heart Failure", "Hypertension", "Hypotension", "Coronary Artery Disease", "Arrhythmia", "Atrial Fibrillation", "Myocardial Infarction", "Peripheral Artery Disease", "Stroke", "Aneurysm", # Endocrine & Metabolic Diseases "Diabetes Type 1", "Diabetes Type 2", "Hyperthyroidism", "Hypothyroidism", "Addison’s Disease", "Cushing’s Syndrome", "Polycystic Ovary Syndrome", "Metabolic Syndrome", "Hypoglycemia", "Hyperglycemia", # Neurological Disorders "Migraine", "Epilepsy", "Parkinson’s Disease", "Multiple Sclerosis", "Alzheimer’s Disease", "Huntington’s Disease", "ALS", "Meningitis", "Encephalitis", "Bell’s Palsy", # Digestive System Diseases "Gastroenteritis", "Acid Reflux", "Peptic Ulcer", "Crohn’s Disease", "Ulcerative Colitis", "Irritable Bowel Syndrome", "Hepatitis A", "Hepatitis B", "Hepatitis C", "Cirrhosis", "Gallstones", "Pancreatitis", # Blood & Immune System Disorders "Anemia", "Leukemia", "Lymphoma", "Sickle Cell Disease", "Hemophilia", "Thrombocytopenia", "Lupus", "Rheumatoid Arthritis", "HIV/AIDS", "Sepsis", "Aplastic Anemia", # Musculoskeletal Disorders "Arthritis", "Osteoporosis", "Gout", "Fibromyalgia", "Scoliosis", "Ankylosing Spondylitis", "Carpal Tunnel Syndrome", "Muscular Dystrophy", "Tendinitis", "Bone Fractures", # Skin Conditions "Eczema", "Psoriasis", "Acne", "Rosacea", "Fungal Infections", "Vitiligo", "Hives", "Melanoma", "Alopecia", "Sunburn", # Infectious Diseases "Influenza", "Malaria", "Dengue Fever", "Chickenpox", "Measles", "Mumps", "Typhoid Fever", "Tetanus", "Rabies", "Lyme Disease", # Kidney & Urinary Tract Diseases "Chronic Kidney Disease", "Kidney Stones", "UTI", "Bladder Cancer", "Polycystic Kidney Disease", "Nephritis", "Hydronephrosis", "Glomerulonephritis", "Interstitial Cystitis", "Prostatitis", # Reproductive System Disorders "Endometriosis", "Ovarian Cysts", "Erectile Dysfunction", "Prostate Cancer", "Uterine Fibroids", "Pelvic Inflammatory Disease", "Infertility", "Testicular Cancer", "Menstrual Disorders", "Premature Ovarian Failure", # Mental Health Disorders "Depression", "Anxiety Disorder", "Bipolar Disorder", "Schizophrenia", "PTSD", "OCD", "ADHD", "Autism Spectrum Disorder", "Sleep Disorders", "Substance Abuse Disorder" ] # Expanded Specialist Mapping specialist_mapping = { "Asthma": ("Pulmonologist", "Respiratory System"), "COPD": ("Pulmonologist", "Respiratory System"), "Pneumonia": ("Pulmonologist", "Respiratory System"), "Tuberculosis": ("Infectious Disease Specialist", "Respiratory System"), "COVID-19": ("Infectious Disease Specialist", "Immune System"), "Heart Failure": ("Cardiologist", "Cardiovascular System"), "Hypertension": ("Cardiologist", "Cardiovascular System"), "Diabetes Type 1": ("Endocrinologist", "Endocrine System"), "Diabetes Type 2": ("Endocrinologist", "Endocrine System"), "Migraine": ("Neurologist", "Nervous System"), "Gastroenteritis": ("Gastroenterologist", "Digestive System"), "Anemia": ("Hematologist", "Blood Disorders"), "Depression": ("Psychiatrist", "Mental Health"), "Anxiety Disorder": ("Psychiatrist", "Mental Health"), "Chronic Kidney Disease": ("Nephrologist", "Urinary System"), "UTI": ("Urologist", "Urinary System"), "Osteoporosis": ("Orthopedic Specialist", "Musculoskeletal System"), "Psoriasis": ("Dermatologist", "Skin Disorders"), "Epilepsy": ("Neurologist", "Nervous System") } def generate_expert_analysis(condition, symptoms): """Generate expert analysis using Groq API""" specialist_title = specialist_mapping[condition][0] # Construct the prompt prompt = f"""As a {specialist_title.lower()}, explain {condition} to a patient with: "{symptoms}". Structure clearly in 4 parts: 1. Biological process 2. Immediate treatments 3. Long-term care 4. Emergency signs Use simple language. Never reference studies/articles.""" # Get response from Groq API chat_completion = groq_client.chat.completions.create( messages=[ { "role": "user", "content": prompt } ], model="mixtral-8x7b-32768", # Use Groq's Mixtral model temperature=0.5, max_tokens=1024, top_p=0.9, stop=["\n\n\n"] # Corrected parameter name ) # Process response raw_analysis = chat_completion.choices[0].message.content # Clean up output clean_text = re.sub(r'\(PMID:\d+\)|\[.*?\]', '', raw_analysis) # Remove citations clean_text = re.sub(r'\b(article|study|volume|issue)\b.*?\.', '', clean_text, flags=re.I) sections = [s for s in clean_text.split('\n\n') if any(kw in s for kw in ["process", "treatment", "manage", "emergency"])] return f"**Expert Analysis:**\n\n" + "\n\n".join(sections[:4]) def create_medical_report(symptoms, language="en"): try: # Translation if language != "en": translated = translator(symptoms)[0]['translation_text'] else: translated = symptoms # Diagnosis result = classifier(translated, conditions, multi_label=False) diagnosis = result['labels'][0] specialist, system = specialist_mapping.get(diagnosis, ("General Physician", "General Medicine")) # Generate expert analysis expert_analysis = generate_expert_analysis(diagnosis, translated) # Compile report full_report = f"""**Medical Report** Patient Symptoms: {translated} Primary Diagnosis: {diagnosis} Affected System: {system} Consult: {specialist} **Key Questions for Your Doctor:** 1. Is this condition acute or chronic? 2. What medication options are suitable for me? 3. What lifestyle changes would help manage this condition? 4. What warning signs require immediate attention? {expert_analysis}""" # PDF Generation pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.multi_cell(0, 10, full_report) pdf.output("report.pdf") return full_report, "report.pdf" except Exception as e: return f"Error generating report: {str(e)}", None # Gradio Interface interface = gr.Interface( fn=create_medical_report, inputs=[ gr.Textbox(label="Describe Your Symptoms", placeholder="e.g., shortness of breath, chest pain..."), gr.Dropdown(["en", "hi"], label="Language", value="en") ], outputs=[ gr.Textbox(label="Complete Medical Report"), gr.File(label="Download PDF Report") ], title="MedExpert: AI-Powered Clinical Analysis System", description="Get comprehensive medical reports with expert-level analysis in any language" ) interface.launch()