File size: 4,427 Bytes
d7f76f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7335022
d7f76f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7335022
 
 
 
 
d7f76f3
7335022
 
 
 
 
d7f76f3
 
 
 
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# Load the IBM Granite instruct model from Hugging Face
MODEL_NAME = "ibm-granite/granite-3.3-2b-instruct"

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
    device_map="auto"
)

def generate_response(prompt):
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(
        **inputs,
        max_new_tokens=150,
        do_sample=True,
        top_p=0.9,
        temperature=0.7,
        pad_token_id=tokenizer.eos_token_id,
    )
    text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return text[len(prompt):].strip()

def symptoms_identifier(symptoms):
    if not symptoms.strip():
        return "Please enter symptoms."
    prompt = f"Based on the following symptoms, identify the most likely disease:\nSymptoms: {symptoms}\nDisease:"
    return generate_response(prompt)

def home_remedies(disease):
    if not disease.strip():
        return "Please enter a disease."
    prompt = f"Suggest a natural, easy home remedy for the disease:\nDisease: {disease}\nHome Remedy:"
    return generate_response(prompt)

# Custom CSS styling
custom_css = """
body {
    background-color: #ffffff;
    color: #6b7280;
    font-family: 'Poppins', sans-serif;
    margin: 0; padding: 0;
}
h1 {
    font-weight: 700;
    font-size: 3rem;
    color: #111827;
    margin-bottom: 0.5rem;
}
h2 {
    font-weight: 600;
    font-size: 1.5rem;
    color: #111827;
    margin-bottom: 1rem;
}
.card {
    background: white;
    border-radius: 0.75rem;
    box-shadow: rgba(203, 213, 224, 0.5) 0px 4px 6px -1px;
    padding: 2rem;
    margin: 1rem;
    box-sizing: border-box;
}
.gr-button {
    background-color: #111827;
    color: white;
    border-radius: 0.5rem;
    padding: 0.75rem 1.5rem;
    font-weight: 600;
    font-size: 1rem;
    transition: all 0.3s ease;
    border: none;
    cursor: pointer;
}
.gr-button:hover {
    background-color: #374151;
    transform: scale(1.05);
}
.gr-textbox {
    border-radius: 0.5rem;
    border: 1px solid #d1d5db;
    padding: 0.75rem 1rem;
    font-size: 1rem;
    color: #111827;
    font-family: 'Poppins', sans-serif;
    transition: border-color 0.3s ease;
}
.gr-textbox:focus {
    border-color: #111827;
    outline: none;
    box-shadow: 0 0 6px rgb(17 24 39 / 0.3);
}
@media (min-width: 768px) {
    .flex-row {
        display: flex;
        justify-content: center;
        max-width: 1200px;
        margin: 0 auto;
        gap: 2rem;
    }
    .flex-column {
        flex: 1;
        min-width: 0; /* For Firefox */
    }
}
@media (max-width: 767px) {
    .flex-column {
        margin: 1rem 0;
    }
}
"""

with gr.Blocks(css=custom_css) as demo:
    gr.Markdown("<h1 style='text-align:center;'>HealthAI</h1><p style='text-align:center; font-size:1.25rem; color:#4b5563; max-width:700px; margin:auto;'>Generative AI-powered health assistant for symptom identification and natural home remedies.</p>")
    with gr.Row(variant="panel", elem_classes="flex-row"):
        with gr.Column(elem_classes="flex-column"):
            gr.Markdown("## Symptoms Identifier")
            symptoms_input = gr.Textbox(label="Enter Symptoms", placeholder="e.g. fever, headache, fatigue", lines=4)
            symptoms_output = gr.Textbox(label="Predicted Disease", interactive=False, lines=2)
            symptoms_button = gr.Button("Identify Disease")
            symptoms_button.click(symptoms_identifier, inputs=symptoms_input, outputs=symptoms_output)
        with gr.Column(elem_classes="flex-column"):
            gr.Markdown("## Home Remedies")
            disease_input = gr.Textbox(label="Enter Disease", placeholder="e.g. common cold", lines=2)
            remedy_output = gr.Textbox(label="Recommended Home Remedy", interactive=False, lines=4)
            remedy_button = gr.Button("Get Home Remedy")
            remedy_button.click(home_remedies, inputs=disease_input, outputs=remedy_output)
    gr.Markdown("<p style='text-align:center; margin-top:3rem; color:#9ca3af;'>Powered by <a href='https://huggingface.co/ibm-granite/granite-3.3-2b-instruct' target='_blank' rel='noopener noreferrer'>ibm-granite/granite-3.3-2b-instruct</a></p>")

if __name__ == "__main__":
    demo.launch()