File size: 4,217 Bytes
dfff6b7
 
 
 
 
e1a62c0
dfff6b7
718b5aa
dfff6b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import gradio as gr
import tensorflow as tf
from transformers import TFAutoModel, AutoTokenizer
import numpy as np
import shap
import numpy as np
from scipy.special import softmax

# Model and Tokenizer Setup
MODEL_NAME = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = TFAutoModel.from_pretrained(MODEL_NAME)

# Constants
SEQ_LEN = 128
CONDITIONS = [
    "Common Cold", "COVID-19", "Allergies", "Anxiety Disorder", "Skin Infection",
    "Heart Condition", "Digestive Issues", "Migraine", "Muscle Strain", "Arthritis"
]

# Dynamic Condition Predictions
def predict_condition(description: str):
    tokens = tokenizer(
        description, max_length=SEQ_LEN, truncation=True, padding="max_length", return_tensors="tf"
    )
    outputs = model(tokens).last_hidden_state[:, 0, :]  # CLS token output
    scores = softmax(outputs.numpy())
    predictions = dict(zip(CONDITIONS, scores.flatten()))
    return predictions

# Lifestyle Tips
LIFESTYLE_TIPS = {
    "Common Cold": "Rest, stay hydrated, and use saline nasal sprays.",
    "COVID-19": "Quarantine, stay hydrated, and seek medical attention if symptoms worsen.",
    "Allergies": "Avoid allergens, take antihistamines, and use air purifiers.",
    "Anxiety Disorder": "Practice mindfulness, exercise, and seek therapy if needed.",
    "Skin Infection": "Keep the area clean, use topical creams, and consult a dermatologist.",
    # Add more conditions and tips...
}

def get_lifestyle_advice(condition: str):
    return LIFESTYLE_TIPS.get(condition, "Consult a healthcare professional for guidance.")

# Interactive Health Visualization (SHAP)
def explain_prediction(text: str):
    explainer = shap.Explainer(lambda x: predict_condition(x), tokenizer)
    shap_values = explainer([text])
    return shap.plots.text(shap_values, display=False)

# Symptom Tracker (Simple Implementation)
symptom_history = []

def log_symptom(symptom: str):
    symptom_history.append(symptom)
    return f"Logged: {symptom}. Total symptoms logged: {len(symptom_history)}"

def display_symptom_trends():
    return "\n".join(symptom_history[-10:])  # Last 10 logged symptoms

# Gradio UI Design
css = """
textarea { background-color: transparent; border: 1px solid #6366f1; }
"""
with gr.Blocks(title="MedAI Compass", css=css, theme=gr.themes.Soft()) as app:
    # Header
    gr.HTML("<h1>MedAI Compass: Comprehensive Symptom and Health Guide</h1>")

    # Section: Symptom Diagnosis
    with gr.Row():
        gr.Markdown("## Symptom Diagnosis")
        input_description = gr.Textbox(label="Describe your symptom")
        diagnose_btn = gr.Button("Diagnose")
        diagnosis_output = gr.Label(label="Possible Conditions")
        diagnose_btn.click(predict_condition, inputs=input_description, outputs=diagnosis_output)

    # Section: SHAP Analysis
    with gr.Row():
        gr.Markdown("## Explain Predictions")
        shap_text_input = gr.Textbox(label="Enter Symptom Description for Analysis")
        shap_btn = gr.Button("Generate Explanation")
        shap_output = gr.HTML()
        shap_btn.click(explain_prediction, inputs=shap_text_input, outputs=shap_output)

    # Section: Personalized Advice
    with gr.Row():
        gr.Markdown("## Personalized Health Advice")
        condition_input = gr.Dropdown(choices=CONDITIONS, label="Select a Condition")
        advice_output = gr.Textbox(label="Advice")
        advice_btn = gr.Button("Get Advice")
        advice_btn.click(get_lifestyle_advice, inputs=condition_input, outputs=advice_output)

    # Section: Symptom Tracker
    with gr.Row():
        gr.Markdown("## Symptom Tracker")
        tracker_input = gr.Textbox(label="Log a Symptom")
        tracker_btn = gr.Button("Log Symptom")
        tracker_output = gr.Textbox(label="Logged Symptoms")
        tracker_btn.click(log_symptom, inputs=tracker_input, outputs=tracker_output)
        tracker_display_btn = gr.Button("Display Trends")
        tracker_trends_output = gr.Textbox(label="Symptom Trends")
        tracker_display_btn.click(display_symptom_trends, outputs=tracker_trends_output)

    # Footer
    gr.HTML("<p>© 2024 MedAI Compass. All Rights Reserved.</p>")

app.launch()