Jan Kirenz commited on
Commit
e431be9
·
1 Parent(s): 0552b81

initial commit

Browse files
Files changed (1) hide show
  1. app_model_picker.py +157 -0
app_model_picker.py ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3
+ import torch
4
+
5
+ # Titel der Anwendung mit erklärender Unterzeile
6
+ st.title("🤖 Marketing Text Generator")
7
+ st.markdown("*Ein KI-Tool für kreative Marketing-Texte mit verschiedenen Sprachmodellen*")
8
+
9
+ # Konfiguration der verfügbaren Modelle
10
+ MODELS = {
11
+ "GPT-2 (schnell & ressourcensparend)": "gpt2",
12
+ "Mistral-7B (ausgewogen)": "mistralai/Mistral-7B-v0.1",
13
+ "LLAMA-2 (leistungsstark)": "meta-llama/Llama-2-7b-hf",
14
+ "Falcon (kreativ)": "tiiuae/falcon-7b"
15
+ }
16
+
17
+ @st.cache_resource
18
+ def load_model(model_name):
19
+ """
20
+ Lädt das ausgewählte Modell und den zugehörigen Tokenizer.
21
+ Verwendet Caching für bessere Performance.
22
+ """
23
+ try:
24
+ if model_name == "gpt2":
25
+ # GPT-2 ist einfacher zu laden und benötigt weniger Ressourcen
26
+ return pipeline('text-generation', model=model_name, device=-1)
27
+ else:
28
+ # Fortgeschrittene Modelle benötigen spezielle Konfiguration
29
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
30
+ model = AutoModelForCausalLM.from_pretrained(
31
+ model_name,
32
+ device_map="auto",
33
+ trust_remote_code=True,
34
+ load_in_8bit=True # Speicheroptimierung
35
+ )
36
+ return (model, tokenizer)
37
+ except Exception as e:
38
+ st.error(f"Fehler beim Laden des Modells: {str(e)}")
39
+ return None
40
+
41
+ def generate_text(model_name, prompt, max_length=200):
42
+ """
43
+ Generiert Text basierend auf dem ausgewählten Modell und Prompt.
44
+ Behandelt verschiedene Modelltypen unterschiedlich.
45
+ """
46
+ try:
47
+ if model_name == "gpt2":
48
+ generator = load_model(model_name)
49
+ response = generator(prompt, max_length=max_length, num_return_sequences=1)
50
+ return response[0]['generated_text']
51
+ else:
52
+ model, tokenizer = load_model(model_name)
53
+ inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
54
+
55
+ with torch.no_grad():
56
+ outputs = model.generate(
57
+ **inputs,
58
+ max_length=max_length,
59
+ num_return_sequences=1,
60
+ temperature=0.7, # Kreativität kontrollieren
61
+ top_p=0.9 # Vielfalt der Ausgabe steuern
62
+ )
63
+
64
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
65
+ except Exception as e:
66
+ st.error(f"Fehler bei der Textgenerierung: {str(e)}")
67
+ return None
68
+
69
+ def main():
70
+ # Seitenleiste für Modellauswahl und Erklärungen
71
+ with st.sidebar:
72
+ st.header("Modell-Einstellungen")
73
+ selected_model = st.selectbox(
74
+ "Wählen Sie ein Sprachmodell:",
75
+ list(MODELS.keys()),
76
+ help="Verschiedene Modelle haben unterschiedliche Stärken und Performance-Eigenschaften"
77
+ )
78
+
79
+ st.markdown("---")
80
+ st.markdown("""
81
+ **Modell-Informationen:**
82
+ - GPT-2: Schnell, aber basic
83
+ - Mistral: Guter Allrounder
84
+ - LLAMA-2: Sehr leistungsfähig
85
+ - Falcon: Besonders kreativ
86
+ """)
87
+
88
+ # Hauptbereich für Eingabe und Generierung
89
+ with st.form("text_generation_form"):
90
+ # Strukturierte Eingabefelder
91
+ col1, col2 = st.columns(2)
92
+ with col1:
93
+ product_name = st.text_input(
94
+ "Produktname",
95
+ help="Name des Produkts, für das Text generiert werden soll"
96
+ )
97
+ with col2:
98
+ target_audience = st.text_input(
99
+ "Zielgruppe",
100
+ help="Beschreiben Sie Ihre Zielgruppe"
101
+ )
102
+
103
+ key_features = st.text_area(
104
+ "Hauptmerkmale",
105
+ help="Listen Sie die wichtigsten Eigenschaften des Produkts auf (durch Kommas getrennt)"
106
+ )
107
+
108
+ tone_options = ["Professionell", "Casual", "Luxuriös", "Jugendlich", "Technisch"]
109
+ tone = st.select_slider(
110
+ "Tonalität",
111
+ options=tone_options,
112
+ value="Professionell"
113
+ )
114
+
115
+ submit_button = st.form_submit_button("Text generieren")
116
+
117
+ if submit_button:
118
+ if not product_name or not key_features:
119
+ st.warning("Bitte füllen Sie mindestens Produktname und Hauptmerkmale aus.")
120
+ return
121
+
122
+ # Fortschrittsanzeige
123
+ with st.spinner(f'Generiere Text mit {selected_model.split(" ")[0]}...'):
124
+ # Marketing-spezifischer Prompt
125
+ prompt = f"""
126
+ Erstelle einen überzeugenden Marketing-Text mit folgendem Kontext:
127
+ Produkt: {product_name}
128
+ Zielgruppe: {target_audience}
129
+ Hauptmerkmale: {key_features}
130
+ Tonalität: {tone}
131
+
132
+ Der Text sollte die USPs hervorheben und die Zielgruppe direkt ansprechen.
133
+ """
134
+
135
+ # Modellname aus dem Dictionary abrufen
136
+ model_name = MODELS[selected_model]
137
+ response = generate_text(model_name, prompt)
138
+
139
+ if response:
140
+ st.success("Text wurde generiert!")
141
+ st.markdown("### Generierter Marketing-Text:")
142
+ st.markdown(response)
143
+
144
+ # Zusätzliche Aktionen anbieten
145
+ col1, col2 = st.columns(2)
146
+ with col1:
147
+ if st.button("Text kopieren"):
148
+ st.text_area("Kopieren Sie den Text:", value=response)
149
+ with col2:
150
+ st.download_button(
151
+ "Als TXT herunterladen",
152
+ response,
153
+ file_name="marketing_text.txt"
154
+ )
155
+
156
+ if __name__ == "__main__":
157
+ main()