Spaces:
Paused
Paused
#llama.py | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
PROMPT_TEMPLATE = """ | |
You are an expert summarizer. Generate concise German summaries based on the email content, | |
following this structure: 'Der Kunde ... und erwartet ...'. The summaries need to be short. Here are some examples: | |
- Der Kunde übermittelt den Kontoauszug mit einer Abbuchung von 103,22€ und erwartet die Bestätigung der Abbuchung. | |
- Der Kunde möchte die Zahlungsart von Überweisung auf Lastschrift ändern und erwartet die Änderung der Zahlungsart durch die Unternehmensvertretung. | |
- Der Kunde übermittelt fehlende Angaben wie Übergabedatum und Zählerstand und erwartet die Verarbeitung der bereitgestellten Informationen. | |
- Der Kunde teilt die Beendigung des Gasbezugs aufgrund der Installation einer Wärmepumpe mit und erwartet den Abschluss des Gasvertrags und Bestätigung. | |
- Der Kunde sendet Daten und Papiere zur Entsperrung des Stromzählers. | |
- Der Kunde bittet um Korrektur der berechneten Abschlagszahlung für August 2023 und erwartet die Überprüfung und Anpassung der Zahlung. | |
- Der Kunde fragt nach der Abrechnung für einen beendeten Vertrag und erwartet die Erstellung und Zusendung der Abrechnung. | |
- Der Kunde bittet um Stellungnahme oder Korrektur, da der E.ON Plus Rabatt nicht berücksichtigt wurde und erwartet die Überprüfung und Korrektur der Rechnungen. | |
- Der Kunde sendet ein unterschriebenes Formular zurück und bittet um Kenntnisnahme und erwartet die Verarbeitung des Formulars. | |
- Der Kunde bittet um eine Ratenzahlung von 30 Euro monatlich für die letzte Stromrechnung und erwartet die Vereinbarung der Ratenzahlung. | |
### Email: | |
{} | |
### Summary: | |
""" | |
def load_llama_model(): | |
"""Load Llama model and tokenizer with optimized settings""" | |
tokenizer = AutoTokenizer.from_pretrained("Walid777/llama3-8b-emails-summarization") | |
model = AutoModelForCausalLM.from_pretrained( "Walid777/llama3-8b-emails-summarization") | |
return model, tokenizer | |
def generate_llama_summary(email, model, tokenizer, prompt_template): | |
"""Generate summary using structured prompt template""" | |
formatted_prompt = prompt_template.format(email, "") | |
inputs = tokenizer( | |
[formatted_prompt], | |
return_tensors="pt" | |
).to("cuda") | |
outputs = model.generate( | |
**inputs, | |
max_new_tokens=128 | |
) | |
summary = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
if "### Summary:" in summary: | |
summary = summary.split("### Summary:")[-1].strip() | |
else: | |
summary = "Error: Could not extract summary" | |
if "### Email:" in summary: | |
summary = summary.split("### Email:")[0].strip() | |
return summary | |