Jan Kirenz commited on
Commit
b0ce7e8
·
1 Parent(s): bd85648
Files changed (2) hide show
  1. app.py +27 -31
  2. requirements.txt +1 -3
app.py CHANGED
@@ -2,31 +2,28 @@ import streamlit as st
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
 
5
- # Titel der Anwendung
6
  st.title("🚀 Marketing Text Generator mit Falcon")
7
  st.markdown("*Generiere kreative Marketing-Texte mit dem Falcon-7B Modell*")
8
 
9
- # Modell und Tokenizer laden
10
- # Wir nutzen @st.cache_resource, um zu vermeiden, dass das Modell bei jeder Interaktion neu geladen wird
11
  @st.cache_resource
12
  def load_falcon_model():
13
  """
14
- Lädt das Falcon Modell und den zugehörigen Tokenizer.
15
- Falcon ist bekannt für seine kreativen Textgenerierungsfähigkeiten.
16
  """
17
  try:
18
- # Modellname für Falcon
19
  model_name = "tiiuae/falcon-7b"
20
 
21
- # Tokenizer laden - wandelt Text in Zahlen um, die das Modell verarbeiten kann
22
  tokenizer = AutoTokenizer.from_pretrained(model_name)
23
 
24
- # Modell laden mit optimierten Einstellungen für Streamlit
25
  model = AutoModelForCausalLM.from_pretrained(
26
  model_name,
27
  trust_remote_code=True,
28
- device_map="auto", # Automatische Gerätezuweisung (CPU/GPU)
29
- load_in_8bit=True # Speicheroptimierung durch 8-bit Quantisierung
 
30
  )
31
 
32
  return model, tokenizer
@@ -37,7 +34,6 @@ def load_falcon_model():
37
 
38
  # Hauptbereich für die Eingabe
39
  with st.form("marketing_form"):
40
- # Eingabefelder für die Produktinformationen
41
  product_name = st.text_input(
42
  "Produktname",
43
  help="Geben Sie den Namen Ihres Produkts ein"
@@ -48,17 +44,22 @@ with st.form("marketing_form"):
48
  help="Beschreiben Sie die wichtigsten Eigenschaften (durch Kommas getrennt)"
49
  )
50
 
51
- # Button zum Generieren des Textes
 
 
 
 
 
 
 
 
52
  submit = st.form_submit_button("Marketing-Text generieren")
53
 
54
- # Text generieren, wenn der Button geklickt wurde
55
  if submit and product_name and key_features:
56
- # Lade das Modell
57
- with st.spinner("Lade Falcon Modell..."):
58
  model, tokenizer = load_falcon_model()
59
 
60
  if model and tokenizer:
61
- # Marketing-spezifischer Prompt erstellen
62
  prompt = f"""
63
  Erstelle einen kurzen, überzeugenden Marketing-Text für folgendes Produkt:
64
  Produkt: {product_name}
@@ -67,30 +68,25 @@ if submit and product_name and key_features:
67
  Der Text sollte professionell und ansprechend sein.
68
  """
69
 
70
- # Text generieren
71
  with st.spinner("Generiere Marketing-Text..."):
72
- # Text in Token umwandeln
73
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
74
 
75
- # Generierung mit optimierten Parametern
76
- with torch.no_grad(): # Deaktiviert Gradient-Berechnung für Speichereffizienz
77
  outputs = model.generate(
78
  **inputs,
79
- max_length=200, # Maximale Textlänge
80
- temperature=0.7, # Kreativität (0.0 bis 1.0)
81
- top_p=0.9, # Sampling-Parameter für Textvielfalt
82
- num_return_sequences=1 # Anzahl der generierten Varianten
 
83
  )
84
 
85
- # Generierten Text dekodieren und anzeigen
86
  generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
87
 
88
- # Ergebnis anzeigen
89
  st.success("Text wurde erfolgreich generiert!")
90
  st.markdown("### Ihr Marketing-Text:")
91
  st.markdown(generated_text)
92
 
93
- # Download-Option anbieten
94
  st.download_button(
95
  "Text als Datei speichern",
96
  generated_text,
@@ -99,10 +95,10 @@ if submit and product_name and key_features:
99
  elif submit:
100
  st.warning("Bitte füllen Sie alle Felder aus.")
101
 
102
- # Hilfreiche Informationen am Ende
103
  st.markdown("---")
104
  st.markdown("""
105
- **Hinweise zur Nutzung:**
106
- - Die erste Generierung kann etwas länger dauern, da das Modell geladen werden muss
107
- - Experimentieren Sie mit verschiedenen Beschreibungen für beste Ergebnisse
 
108
  """)
 
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
 
 
5
  st.title("🚀 Marketing Text Generator mit Falcon")
6
  st.markdown("*Generiere kreative Marketing-Texte mit dem Falcon-7B Modell*")
7
 
 
 
8
  @st.cache_resource
9
  def load_falcon_model():
10
  """
11
+ Lädt das Falcon Modell in einer CPU-freundlichen Konfiguration.
12
+ Diese Version verwendet weniger Speicher und läuft auf allen Systemen.
13
  """
14
  try:
 
15
  model_name = "tiiuae/falcon-7b"
16
 
17
+ # Tokenizer bleibt unverändert
18
  tokenizer = AutoTokenizer.from_pretrained(model_name)
19
 
20
+ # Angepasste Modellkonfiguration für CPU-Systeme
21
  model = AutoModelForCausalLM.from_pretrained(
22
  model_name,
23
  trust_remote_code=True,
24
+ device_map="auto",
25
+ torch_dtype=torch.float32, # Standard-Datentyp statt 8-bit
26
+ low_cpu_mem_usage=True # Speicheroptimierung für CPU
27
  )
28
 
29
  return model, tokenizer
 
34
 
35
  # Hauptbereich für die Eingabe
36
  with st.form("marketing_form"):
 
37
  product_name = st.text_input(
38
  "Produktname",
39
  help="Geben Sie den Namen Ihres Produkts ein"
 
44
  help="Beschreiben Sie die wichtigsten Eigenschaften (durch Kommas getrennt)"
45
  )
46
 
47
+ # Zusätzliche Kontrolle über die Textlänge
48
+ max_length = st.slider(
49
+ "Maximale Textlänge",
50
+ min_value=50,
51
+ max_value=200,
52
+ value=100,
53
+ help="Längere Texte benötigen mehr Verarbeitungszeit"
54
+ )
55
+
56
  submit = st.form_submit_button("Marketing-Text generieren")
57
 
 
58
  if submit and product_name and key_features:
59
+ with st.spinner("Lade Falcon Modell... (Dies kann einige Minuten dauern)"):
 
60
  model, tokenizer = load_falcon_model()
61
 
62
  if model and tokenizer:
 
63
  prompt = f"""
64
  Erstelle einen kurzen, überzeugenden Marketing-Text für folgendes Produkt:
65
  Produkt: {product_name}
 
68
  Der Text sollte professionell und ansprechend sein.
69
  """
70
 
 
71
  with st.spinner("Generiere Marketing-Text..."):
 
72
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
73
 
74
+ with torch.no_grad():
 
75
  outputs = model.generate(
76
  **inputs,
77
+ max_length=max_length,
78
+ temperature=0.7,
79
+ top_p=0.9,
80
+ num_return_sequences=1,
81
+ pad_token_id=tokenizer.eos_token_id # Verbesserte Token-Handhabung
82
  )
83
 
 
84
  generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
85
 
 
86
  st.success("Text wurde erfolgreich generiert!")
87
  st.markdown("### Ihr Marketing-Text:")
88
  st.markdown(generated_text)
89
 
 
90
  st.download_button(
91
  "Text als Datei speichern",
92
  generated_text,
 
95
  elif submit:
96
  st.warning("Bitte füllen Sie alle Felder aus.")
97
 
 
98
  st.markdown("---")
99
  st.markdown("""
100
+ **Wichtige Hinweise:**
101
+ - Die erste Generierung dauert länger, da das Modell geladen werden muss
102
+ - Auf Systemen ohne GPU kann die Verarbeitung mehrere Minuten in Anspruch nehmen
103
+ - Kürzere Texte werden schneller generiert
104
  """)
requirements.txt CHANGED
@@ -1,6 +1,4 @@
1
  streamlit
2
  transformers
3
  torch
4
- accelerate
5
- bitsandbytes
6
- sentencepiece
 
1
  streamlit
2
  transformers
3
  torch
4
+ accelerate