Spaces:
Paused
Paused
# app.py | |
import streamlit as st | |
from transformers import pipeline | |
from llama import load_llama_model, generate_llama_summary, PROMPT_TEMPLATE | |
st.set_page_config(page_title="Email Summarizer", layout="wide") | |
# Predefined examples with reference summaries | |
EXAMPLES = { | |
"Sample1": { | |
"email": """ | |
Sehr geehrte Damen und Herren, | |
Leider wurden wir von einem Unwetter getroffen, weshalb unser Keller vollgelaufen ist. | |
Deshalb hatten wir für 3 Wochen Trocknungsgeräte im Keller stehen. | |
Anbei erhalten sie den Energieverbrauch/-nachweis der Geräte mit der Bitte, mir für diesen eine Zwischenrechnung zukommen zu lassen. Diese kann ich dann bei meiner Versicherung einreichen, welche die Kosten übernimmt. | |
Mein Vertragskonto lautet 405604519. | |
Aufgrund der Einfachheit halber, reicht mir die Rechnung per Email. | |
Sollten sie noch Fragen haben, können sie sich jederzeit gerne bei mir melden. | |
Mit freundlichen Grüßen | |
Wladimir Klotz | |
""", | |
"reference": "Der Kunde bittet um eine Zwischenrechnung für den Energieverbrauch der Trocknungsgeräte zur Einreichung bei der Versicherung." | |
}, | |
"Sample2": { | |
"email": """ | |
Vertragsnummer: 403755518 | |
Canan Schenk | |
Verbraucherstelle: Hans-Henning-Wilmsen-Weg 958, 74815 Osterburg | |
Zähler: 92739304 | |
Sehr geehrte Damen und Herren, | |
Ich kündige den Vertrag wegen dem Umzug zum 30.11.23 | |
Um eine schriftliche Bestätigung wird gebeten. | |
Neue Adresse: | |
Dippelgasse 83 | |
74815 Osterburg | |
Viele Grüße | |
Canan Schenk | |
""", | |
"reference": "Der Kunde kündigt den Vertrag wegen Umzug und erwartet eine schriftliche Bestätigung dazu." | |
} | |
} | |
def load_all_models(): | |
"""Pre-load all models during app initialization""" | |
with st.spinner("Loading models... This may take a few minutes"): | |
models = { | |
"mt5-small": pipeline( | |
"summarization", | |
model="ak2603/mt5-small-synthetic-data-plus-translated" | |
), | |
"Llama 3.2": load_llama_model() | |
} | |
return models | |
# Initialize models when app loads | |
models = load_all_models() | |
# Streamlit UI Configuration | |
st.title("📧 Automated Email Summarization") | |
# Sidebar Controls | |
with st.sidebar: | |
st.header("Configuration") | |
model_choice = st.selectbox( | |
"Select Model", | |
["mt5-small", "Llama 3.2"], | |
index=0 | |
) | |
st.markdown("---") | |
st.markdown("**Model Information:**") | |
st.info(f"Selected model: {model_choice}") | |
st.info(f"Total loaded models: {len([m for m in models.values() if m is not None])}") | |
# Main Content Area | |
col1, col2 = st.columns([2, 1]) | |
with col1: | |
st.subheader("Input Email") | |
# Example selection | |
example_choice = st.selectbox( | |
"Choose an example email:", | |
["Custom Email"] + list(EXAMPLES.keys()), | |
index=0 | |
) | |
# Set email text based on selection | |
email_text = EXAMPLES[example_choice]["email"] if example_choice in EXAMPLES else "" | |
email_input = st.text_area( | |
"Paste your email here:", | |
value=email_text, | |
height=300, | |
key="input_text", | |
placeholder="Enter email content here..." | |
) | |
with col2: | |
st.subheader("Summary Generation") | |
if st.button("Generate Summary", use_container_width=True): | |
if not email_input: | |
st.error("Please enter some email content first!") | |
else: | |
try: | |
selected_model = models[model_choice] | |
with st.spinner("Generating summary..."): | |
if model_choice == "mt5-small": | |
result = selected_model( | |
email_input, | |
max_length=150, | |
do_sample=True, | |
repetition_penalty=1.5 | |
)[0]['summary_text'] | |
elif model_choice == "Llama 3.2": | |
model_obj, tokenizer = selected_model | |
result = generate_llama_summary( | |
email_input, | |
model_obj, | |
tokenizer, | |
PROMPT_TEMPLATE | |
) | |
# Display results | |
st.success("**Generated Summary:**") | |
st.write(result) | |
# Show reference summary if example is selected | |
if example_choice in EXAMPLES: | |
st.success("**Reference Summary:**") | |
st.write(EXAMPLES[example_choice]["reference"]) | |
# Add export options | |
st.download_button( | |
label="Download Summary", | |
data=result, | |
file_name="email_summary.txt", | |
mime="text/plain" | |
) | |
except Exception as e: | |
st.error(f"Error generating summary: {str(e)}") | |
# Footer | |
st.markdown("---") | |
st.markdown("_Automated email summarization system v1.0_") |