Spaces:
Running
Running
| import gradio as gr | |
| import os | |
| import requests | |
| BREVO_KEY = os.environ["BREVO_API_KEY"] | |
| FROM_EMAIL = "epicamp.response@gmail.com" | |
| FROM_NAME = "EPIC-AMP" | |
| def send_report(to_email, pdf_b64, label, confidence, sequence): | |
| is_amp = 'AMP' in label and 'Non' not in label | |
| label_color = '#2e7d32' if is_amp else '#c62828' | |
| html_content = f""" | |
| <div style="font-family:'Segoe UI',Arial,sans-serif;max-width:600px;margin:auto;color:#1a2540;line-height:1.6"> | |
| <div style="background:#00285a;padding:22px;border-radius:10px 10px 0 0"> | |
| <h2 style="color:#fff;margin:0">EPIC-AMP Analysis Report</h2> | |
| <p style="color:#a0c8ff;margin:6px 0 0;font-size:14px">Explainable Antimicrobial Peptide Classification Platform</p> | |
| </div> | |
| <div style="border:1px solid #d0daea;border-top:none;padding:24px;border-radius:0 0 10px 10px"> | |
| <p>Dear Researcher,</p> | |
| <p>Your peptide sequence has been successfully analyzed using the <strong>EPIC-AMP platform</strong>. Please find your detailed PDF report attached.</p> | |
| <table style="width:100%;border-collapse:collapse;margin:18px 0;font-size:14px"> | |
| <tr style="background:#00285a;color:#fff"> | |
| <td style="padding:10px 14px;font-weight:bold;width:40%">Metric</td> | |
| <td style="padding:10px 14px;font-weight:bold">Result</td> | |
| </tr> | |
| <tr style="background:#f0f4fa"> | |
| <td style="padding:10px 14px;font-weight:bold">Classification</td> | |
| <td style="padding:10px 14px;font-weight:bold;color:{label_color}">{label}</td> | |
| </tr> | |
| <tr> | |
| <td style="padding:10px 14px;font-weight:bold">Confidence Score</td> | |
| <td style="padding:10px 14px">{confidence}</td> | |
| </tr> | |
| <tr style="background:#f0f4fa"> | |
| <td style="padding:10px 14px;font-weight:bold">Input Sequence</td> | |
| <td style="padding:10px 14px;font-family:monospace;font-size:12px;word-break:break-all;color:#003f7d">{sequence}</td> | |
| </tr> | |
| </table> | |
| <p>The attached PDF includes LIME feature attributions, MIC predictions, and global SHAP feature importance.</p> | |
| <p>For questions reach us at <a href="mailto:epicamp.sup@gmail.com" style="color:#1a6fc4">epicamp.sup@gmail.com</a>.</p> | |
| <p style="margin-top:20px">Best regards,<br><strong>The EPIC-AMP Team</strong><br> | |
| <span style="color:#666;font-size:13px">Bioinformatics & Computational Biology Unit (BCBU)</span></p> | |
| <hr style="border:none;border-top:1px solid #e0e6f0;margin:24px 0"> | |
| <p style="color:#888;font-size:11px;margin:0"> | |
| Zewail City of Science and Technology · BCBU · Giza, Egypt<br> | |
| 📧 <a href="mailto:epicamp.sup@gmail.com" style="color:#1a6fc4">epicamp.sup@gmail.com</a><br> | |
| <span style="color:#bbb">This is an automated message — please do not reply directly.</span> | |
| </p> | |
| </div> | |
| </div> | |
| """ | |
| resp = requests.post( | |
| "https://api.brevo.com/v3/smtp/email", | |
| headers={ | |
| "api-key": BREVO_KEY, | |
| "Content-Type": "application/json" | |
| }, | |
| json={ | |
| "sender": {"email": FROM_EMAIL, "name": FROM_NAME}, | |
| "to": [{"email": to_email}], | |
| "subject": f"EPIC-AMP Analysis Report — {label}", | |
| "htmlContent": html_content, | |
| "attachment": [{ | |
| "content": pdf_b64, | |
| "name": "EPIC-AMP_Report.pdf" | |
| }] | |
| }, | |
| timeout=20 | |
| ) | |
| return "sent" if resp.status_code == 201 else f"error:{resp.status_code}:{resp.text}" | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| to_email = gr.Text(label="Recipient Email") | |
| pdf_b64 = gr.Text(label="PDF Base64") | |
| label_in = gr.Text(label="Label") | |
| confidence = gr.Text(label="Confidence") | |
| sequence = gr.Text(label="Sequence") | |
| result = gr.Text(label="Status") | |
| btn = gr.Button("Send") | |
| btn.click( | |
| fn=send_report, | |
| inputs=[to_email, pdf_b64, label_in, confidence, sequence], | |
| outputs=result, | |
| api_name="send" | |
| ) | |
| demo.launch(ssr_mode=False) |