File size: 2,699 Bytes
776f33e
f8d688e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad882b1
f8d688e
 
 
 
ad882b1
f8d688e
 
ad882b1
f8d688e
ad882b1
f8d688e
 
 
ad882b1
f8d688e
 
ad882b1
 
 
 
 
fbd027a
 
ad882b1
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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