TransPolymer_Demo_v001 / src /streamlit_app.py
zuliani1123's picture
Update src/streamlit_app.py
bc0caee verified
import streamlit as st
import torch
import pandas as pd
from utils import load_model_and_tokenizer, preprocess_input, predict_property
from attention_plot import plot_attention_heatmap
st.set_page_config(page_title="TransPolymer Predictor", layout="centered")
st.title("πŸ”¬ TransPolymer Property Prediction")
st.markdown("Masukkan struktur polimer (SMILES) dan maklumat deskriptor.")
tokenizer, model = load_model_and_tokenizer()
# Input form
with st.form("polymer_form"):
smiles = st.text_input("πŸ“„ Polymer SMILES", value="*CCO*")
temp = st.number_input("🌑️ Suhu (°C)", value=25.0)
mw = st.number_input("βš–οΈ Berat Molekul (kDa)", value=100.0)
submitted = st.form_submit_button("Jalankan Ramalan")
if submitted:
input_seq = preprocess_input(smiles, temp, mw)
pred = predict_property(input_seq, model, tokenizer)
st.success(f"πŸ“Š Ramalan Sifat Polimer: **{pred:.4f}**")
st.markdown("### 🎯 Visualisasi Attention (Last Layer)")
fig = plot_attention_heatmap(model, tokenizer, input_seq)
st.pyplot(fig)
# Batch prediction
st.markdown("---")
st.header("πŸ“ Batch Prediction (CSV)")
uploaded_file = st.file_uploader("Muat naik CSV dengan lajur: `smiles`, `temp`, `mw`", type="csv")
if uploaded_file:
df = pd.read_csv(uploaded_file)
results = []
for i, row in df.iterrows():
seq = preprocess_input(row["smiles"], row["temp"], row["mw"])
pred = predict_property(seq, model, tokenizer)
results.append(pred)
df["prediction"] = results
st.dataframe(df)
st.download_button("πŸ“₯ Muat turun hasil", df.to_csv(index=False), "predictions.csv")