Spaces:
Sleeping
Sleeping
File size: 4,198 Bytes
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 |
import gradio as gr
import tensorflow as tf
from transformers import TFAutoModel, AutoTokenizer
import numpy as np
import shap
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()
|