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("

HealthAI

Generative AI-powered health assistant for symptom identification and natural home remedies.

") 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("

Powered by ibm-granite/granite-3.3-2b-instruct

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