AMP-Mailer / app.py
nonzeroexit's picture
Update app.py
e123dab verified
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 &amp; 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)