teezyboy commited on
Commit
e2c8489
·
verified ·
1 Parent(s): e1a6be3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +110 -51
app.py CHANGED
@@ -8,58 +8,44 @@ client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
8
 
9
  def response(user_message, history):
10
  messages = [{"role": "system", "content": """System Prompt – Five Stars (freundlich, gemütlich, interaktiv)**
11
-
12
  Du bist Five Stars, ein freundlicher und gemütlicher Film-Empfehlungs-Chatbot. Deine Aufgabe ist es, Nutzer:innen dabei zu helfen, passende Filme zu finden. Du verwendest dafür die bereitgestellte Datenbasis (Ausschnitt der IMDb-Datenbank: alle Filme ab dem Jahr 2000 mit einer Bewertung über 7). Am Ende deiner Empfehlungen gibst du genau fünf passende Filme aus – das sind die „Five Stars".
13
-
14
  Tonfall & Stil:
15
  Sei warm, einladend, positiv und persönlich.
16
  Reagiere immer empathisch und wertschätzend auf Aussagen des Nutzers.
17
  Keine knappen Stichpunkt-Antworten – kurze, freundliche ganze Sätze.
18
  Stelle höchstens eine einzige Rückfrage pro Nachricht.
19
  Verwende eine entspannte Umgangssprache, nicht übertrieben formell.
20
-
21
  Interaktion & Informationsverarbeitung:
22
  Frage zu Beginn: „Was kann ich für dich tun?"
23
-
24
  Der Nutzer kann nach Genre, Schauspielern, Stimmung, Vergleichsfilm, Zeitraum oder anderen Kriterien fragen.
25
-
26
-
27
  Je mehr Informationen vom Nutzer kommen, desto präziser die späteren Filmempfehlungen.
28
-
29
  Wenn der Nutzer unsicher ist oder mehr Gesprächsbedarf hat, stelle eine vorsichtige, offene Frage, z. B.:
30
-
31
  „Nach welcher Stimmung steht dir heute der Sinn?"
32
  „Hast du Lieblingsschauspieler:innen?"
33
  „Lieber etwas Neues oder einen Klassiker nach 2000?"
34
-
35
  stelle immer nur eine Frage auf einmal und erst die nächste wieder nach der nächsten eingabe des Nutzers. Wenn du merkst der nutzer hat zwei fragen beantwortet, frage ihn ob du ihm jetzt schon eine auswahl ausgeben sollst auf basis von dem was du weisst oder du noch weitere rückfragen stellen sollst.
36
 
37
  Filmempfehlungen:
38
  Am Ende zeigst du genau fünf Filme als Ergebnis.
39
  Für jeden Film gib folgende Informationen aus:
40
-
41
  Titel und Erscheinungsjahr
42
  Genre
43
  Bewertung auf IMDB (Rating + Anzahl Votes)
44
  Hauptschauspieler*innen
45
  Kurzbeschreibung / Plot
46
  Hinweis, wo der Film gestreamt werden kann (wenn verfügbar)
47
-
48
  Ich wünsche viel Spaß beim Schauen!
49
  Füge keine weiteren Erklärungen nach dieser Liste hinzu.
50
  Keine Spoiler, keine Handlungserklärung – höchstens 1 kurzer, maximal zweisätziger Kommentar pro Titel, falls hilfreich.
51
-
52
  Regeln:
53
  Empfehle nur Filme aus der bereitgestellten Datenbasis. Gib nur Filme mit IMDB-Bewertung über 6.9 und dem Erscheinungsjahr ab 2000 aus.
54
  Erfinde keine Filme und gebe keine Serien aus.
55
  Verwende gesammelt alle Kriterien des Nutzers, falls vorhanden, aber fordere niemals zwingend Informationen ein.
56
  Keine technischen Details über die Datenbank offenlegen.
57
  Nutze Konversation aktiv, aber nicht aufdringlich. Falls der Nutzer Sachen sagt, die nichts mit Filmen zutun haben, lenke ihn klar aber feundlich zum Theme zurück und sage, dass du ein Assistent für die Filmfindung bist.
58
-
59
 
60
  Start:
61
  Beginne jedes Gespräch mit einer freundlichen Begrüßung und der Frage: „Was kann ich für dich tun?"
62
-
63
  """}]
64
 
65
  for msg in history:
@@ -141,7 +127,6 @@ def main():
141
  max-width: 800px;
142
  margin: 0 auto;
143
  padding: 40px 20px;
144
- height: 500px;
145
  }}
146
 
147
  /* Logo Container */
@@ -149,15 +134,65 @@ def main():
149
  text-align: center;
150
  margin-bottom: 30px;
151
  }}
152
-
153
  #logo-container .download-button-container {{
154
  display: none !important;
155
  }}
156
-
157
  #logo-container button[aria-label] {{
158
  display: none !important;
159
  }}
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  /* Chat-Box Styling */
162
  #chatbot-box {{
163
  background: rgba(255, 255, 255, 0.95);
@@ -165,6 +200,17 @@ def main():
165
  padding: 30px;
166
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
167
  backdrop-filter: blur(10px);
 
 
 
 
 
 
 
 
 
 
 
168
  }}
169
 
170
  /* Chatbot Nachrichten - Bubble Style */
@@ -174,16 +220,31 @@ def main():
174
  }}
175
 
176
  /* USER MESSAGE – überschreibt Gradio Inline Styles */
 
 
 
 
 
 
 
 
 
 
177
  #chatbot .message.user .message-wrap {{
178
- background-color: rgba(60, 60, 67, 0.9) !important;
179
- border: 1px solid rgba(60, 60, 67, 0.95) !important;
180
- color: white !important;
181
- }}
182
-
183
- /* extrem wichtig: überschreibt inline background */
184
- #chatbot .message.user .message-wrap[style] {{
185
- background-color: rgba(60, 60, 67, 0.9) !important;
186
- }}
 
 
 
 
 
187
 
188
  #chatbot .message.bot .message-wrap {{
189
  background: rgba(142, 142, 147, 0.15) !important;
@@ -201,11 +262,9 @@ def main():
201
  width: 100%;
202
  height: 100%;
203
  }}
204
-
205
  #chatbot .message.user .avatar-container img {{
206
  display: none !important;
207
  }}
208
-
209
  /* Bot Avatar als Stern */
210
  #chatbot .message.bot .avatar-container::before {{
211
  content: "★";
@@ -217,7 +276,6 @@ def main():
217
  width: 100%;
218
  height: 100%;
219
  }}
220
-
221
  #chatbot .message.bot .avatar-container img {{
222
  display: none !important;
223
  }}
@@ -236,26 +294,7 @@ def main():
236
  box-shadow: 0 0 0 3px rgba(142, 142, 147, 0.08) !important;
237
  }}
238
 
239
- /* Submit Button - Runder Kreis mit Pfeil nach oben */
240
- .submit-btn {{
241
- min-width: 44px !important;
242
- max-width: 44px !important;
243
- width: 44px !important;
244
- height: 44px !important;
245
- border-radius: 50% !important;
246
- background: rgba(142, 142, 147, 0.15) !important;
247
- border: 1.5px solid rgba(142, 142, 147, 0.3) !important;
248
- backdrop-filter: blur(10px) !important;
249
- padding: 0 !important;
250
- display: flex !important;
251
- align-items: center !important;
252
- justify-content: center !important;
253
- font-size: 20px !important;
254
- color: #8E8E93 !important;
255
- transition: all 0.2s ease !important;
256
- }}
257
-
258
- /* Submit Button - Rechteckig mit gerundeten Ecken */
259
  .submit-btn {{
260
  min-width: 60px !important;
261
  max-width: 60px !important;
@@ -272,6 +311,8 @@ def main():
272
  font-size: 20px !important;
273
  color: #8E8E93 !important;
274
  transition: all 0.2s ease !important;
 
 
275
  }}
276
 
277
  .submit-btn:active {{
@@ -305,6 +346,15 @@ def main():
305
 
306
  # Chat-Box
307
  with gr.Column(elem_id="chatbot-box"):
 
 
 
 
 
 
 
 
 
308
  chatbot = gr.Chatbot(
309
  value=[{
310
  "role": "assistant",
@@ -317,12 +367,14 @@ def main():
317
  None,
318
  ),
319
  height=400,
320
- elem_id="chatbot"
 
 
321
  )
322
 
323
  with gr.Row(elem_id="input-row"):
324
  msg = gr.Textbox(
325
- placeholder="Nachricht",
326
  show_label=False,
327
  scale=11,
328
  container=False
@@ -343,12 +395,19 @@ def main():
343
  history.append({"role": "assistant", "content": bot_msg})
344
  return history
345
 
 
 
 
 
 
 
346
  msg.submit(user_message, [msg, chatbot], [msg, chatbot]).then(
347
  bot_response, chatbot, chatbot
348
  )
349
  submit.click(user_message, [msg, chatbot], [msg, chatbot]).then(
350
  bot_response, chatbot, chatbot
351
  )
 
352
 
353
  demo.launch(inbrowser=True)
354
 
 
8
 
9
  def response(user_message, history):
10
  messages = [{"role": "system", "content": """System Prompt – Five Stars (freundlich, gemütlich, interaktiv)**
 
11
  Du bist Five Stars, ein freundlicher und gemütlicher Film-Empfehlungs-Chatbot. Deine Aufgabe ist es, Nutzer:innen dabei zu helfen, passende Filme zu finden. Du verwendest dafür die bereitgestellte Datenbasis (Ausschnitt der IMDb-Datenbank: alle Filme ab dem Jahr 2000 mit einer Bewertung über 7). Am Ende deiner Empfehlungen gibst du genau fünf passende Filme aus – das sind die „Five Stars".
 
12
  Tonfall & Stil:
13
  Sei warm, einladend, positiv und persönlich.
14
  Reagiere immer empathisch und wertschätzend auf Aussagen des Nutzers.
15
  Keine knappen Stichpunkt-Antworten – kurze, freundliche ganze Sätze.
16
  Stelle höchstens eine einzige Rückfrage pro Nachricht.
17
  Verwende eine entspannte Umgangssprache, nicht übertrieben formell.
 
18
  Interaktion & Informationsverarbeitung:
19
  Frage zu Beginn: „Was kann ich für dich tun?"
 
20
  Der Nutzer kann nach Genre, Schauspielern, Stimmung, Vergleichsfilm, Zeitraum oder anderen Kriterien fragen.
 
 
21
  Je mehr Informationen vom Nutzer kommen, desto präziser die späteren Filmempfehlungen.
 
22
  Wenn der Nutzer unsicher ist oder mehr Gesprächsbedarf hat, stelle eine vorsichtige, offene Frage, z. B.:
 
23
  „Nach welcher Stimmung steht dir heute der Sinn?"
24
  „Hast du Lieblingsschauspieler:innen?"
25
  „Lieber etwas Neues oder einen Klassiker nach 2000?"
 
26
  stelle immer nur eine Frage auf einmal und erst die nächste wieder nach der nächsten eingabe des Nutzers. Wenn du merkst der nutzer hat zwei fragen beantwortet, frage ihn ob du ihm jetzt schon eine auswahl ausgeben sollst auf basis von dem was du weisst oder du noch weitere rückfragen stellen sollst.
27
 
28
  Filmempfehlungen:
29
  Am Ende zeigst du genau fünf Filme als Ergebnis.
30
  Für jeden Film gib folgende Informationen aus:
 
31
  Titel und Erscheinungsjahr
32
  Genre
33
  Bewertung auf IMDB (Rating + Anzahl Votes)
34
  Hauptschauspieler*innen
35
  Kurzbeschreibung / Plot
36
  Hinweis, wo der Film gestreamt werden kann (wenn verfügbar)
 
37
  Ich wünsche viel Spaß beim Schauen!
38
  Füge keine weiteren Erklärungen nach dieser Liste hinzu.
39
  Keine Spoiler, keine Handlungserklärung – höchstens 1 kurzer, maximal zweisätziger Kommentar pro Titel, falls hilfreich.
 
40
  Regeln:
41
  Empfehle nur Filme aus der bereitgestellten Datenbasis. Gib nur Filme mit IMDB-Bewertung über 6.9 und dem Erscheinungsjahr ab 2000 aus.
42
  Erfinde keine Filme und gebe keine Serien aus.
43
  Verwende gesammelt alle Kriterien des Nutzers, falls vorhanden, aber fordere niemals zwingend Informationen ein.
44
  Keine technischen Details über die Datenbank offenlegen.
45
  Nutze Konversation aktiv, aber nicht aufdringlich. Falls der Nutzer Sachen sagt, die nichts mit Filmen zutun haben, lenke ihn klar aber feundlich zum Theme zurück und sage, dass du ein Assistent für die Filmfindung bist.
 
46
 
47
  Start:
48
  Beginne jedes Gespräch mit einer freundlichen Begrüßung und der Frage: „Was kann ich für dich tun?"
 
49
  """}]
50
 
51
  for msg in history:
 
127
  max-width: 800px;
128
  margin: 0 auto;
129
  padding: 40px 20px;
 
130
  }}
131
 
132
  /* Logo Container */
 
134
  text-align: center;
135
  margin-bottom: 30px;
136
  }}
 
137
  #logo-container .download-button-container {{
138
  display: none !important;
139
  }}
 
140
  #logo-container button[aria-label] {{
141
  display: none !important;
142
  }}
143
 
144
+ /* Chatbot Header Buttons verstecken (Mülleimer und HF Logo) */
145
+ #chatbot .header-buttons {{
146
+ display: none !important;
147
+ }}
148
+ #chatbot button[aria-label*="Clear"] {{
149
+ display: none !important;
150
+ }}
151
+ #chatbot button[aria-label*="Like"] {{
152
+ display: none !important;
153
+ }}
154
+ #chatbot button[aria-label*="Dislike"] {{
155
+ display: none !important;
156
+ }}
157
+ #chatbot .chatbot-header {{
158
+ display: none !important;
159
+ }}
160
+ /* Alle Buttons im Chatbot-Header ausblenden */
161
+ .chatbot-header button {{
162
+ display: none !important;
163
+ }}
164
+ /* Zusätzliche Selektoren für Gradio Buttons - aber Submit und Clear ausschließen */
165
+ #chatbot-box button:not(.clear-btn):not(.submit-btn) {{
166
+ display: none !important;
167
+ }}
168
+ #chatbot button:not(.submit-btn) {{
169
+ display: none !important;
170
+ }}
171
+
172
+ /* Clear Button Styling */
173
+ .clear-btn {{
174
+ background: transparent !important;
175
+ border: none !important;
176
+ color: #8E8E93 !important;
177
+ font-size: 18px !important;
178
+ font-weight: 400 !important;
179
+ padding: 0 !important;
180
+ cursor: pointer !important;
181
+ transition: color 0.2s ease !important;
182
+ width: 32px !important;
183
+ height: 32px !important;
184
+ border-radius: 50% !important;
185
+ display: flex !important;
186
+ align-items: center !important;
187
+ justify-content: center !important;
188
+ visibility: visible !important;
189
+ opacity: 1 !important;
190
+ }}
191
+
192
+ .clear-btn:hover {{
193
+ color: #3C3C43 !important;
194
+ }}
195
+
196
  /* Chat-Box Styling */
197
  #chatbot-box {{
198
  background: rgba(255, 255, 255, 0.95);
 
200
  padding: 30px;
201
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
202
  backdrop-filter: blur(10px);
203
+ position: relative;
204
+ }}
205
+
206
+ /* Clear Button positioniert in der rechten oberen Ecke der weißen Box */
207
+ #clear-row {{
208
+ position: absolute !important;
209
+ top: 33px !important;
210
+ right: 33px !important;
211
+ z-index: 10 !important;
212
+ margin: 0 !important;
213
+ width: auto !important;
214
  }}
215
 
216
  /* Chatbot Nachrichten - Bubble Style */
 
220
  }}
221
 
222
  /* USER MESSAGE – überschreibt Gradio Inline Styles */
223
+ #chatbot .message.user,
224
+ #chatbot .message.user *,
225
+ #chatbot .user,
226
+ #chatbot .user * {{
227
+ background: #8B8B94 !important;
228
+ background-color: #8B8B94 !important;
229
+ border: none !important;
230
+ color: white !important;
231
+ }}
232
+
233
  #chatbot .message.user .message-wrap {{
234
+ background: #71717A !important;
235
+ background-color: #71717A !important;
236
+ border: none !important;
237
+ color: dark-grey !important;
238
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25) !important;
239
+ }}
240
+
241
+ /* Entferne blauen Rahmen */
242
+ #chatbot .message.user .message-wrap[style] {{
243
+ background: #3C3C43 !important;
244
+ background-color: #3C3C43 !important;
245
+ border: none !important;
246
+ outline: none !important;
247
+ }}
248
 
249
  #chatbot .message.bot .message-wrap {{
250
  background: rgba(142, 142, 147, 0.15) !important;
 
262
  width: 100%;
263
  height: 100%;
264
  }}
 
265
  #chatbot .message.user .avatar-container img {{
266
  display: none !important;
267
  }}
 
268
  /* Bot Avatar als Stern */
269
  #chatbot .message.bot .avatar-container::before {{
270
  content: "★";
 
276
  width: 100%;
277
  height: 100%;
278
  }}
 
279
  #chatbot .message.bot .avatar-container img {{
280
  display: none !important;
281
  }}
 
294
  box-shadow: 0 0 0 3px rgba(142, 142, 147, 0.08) !important;
295
  }}
296
 
297
+ /* Submit Button - Rechteckig mit gerundeten Ecken */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  .submit-btn {{
299
  min-width: 60px !important;
300
  max-width: 60px !important;
 
311
  font-size: 20px !important;
312
  color: #8E8E93 !important;
313
  transition: all 0.2s ease !important;
314
+ visibility: visible !important;
315
+ opacity: 1 !important;
316
  }}
317
 
318
  .submit-btn:active {{
 
346
 
347
  # Chat-Box
348
  with gr.Column(elem_id="chatbot-box"):
349
+ # Clear Button in der rechten oberen Ecke
350
+ with gr.Row(elem_id="clear-row"):
351
+ clear = gr.Button(
352
+ "↻",
353
+ scale=0,
354
+ elem_classes="clear-btn",
355
+ size="sm"
356
+ )
357
+
358
  chatbot = gr.Chatbot(
359
  value=[{
360
  "role": "assistant",
 
367
  None,
368
  ),
369
  height=400,
370
+ elem_id="chatbot",
371
+ show_copy_button=False,
372
+ show_share_button=False
373
  )
374
 
375
  with gr.Row(elem_id="input-row"):
376
  msg = gr.Textbox(
377
+ placeholder="...hier tippen",
378
  show_label=False,
379
  scale=11,
380
  container=False
 
395
  history.append({"role": "assistant", "content": bot_msg})
396
  return history
397
 
398
+ def clear_chat():
399
+ return [{
400
+ "role": "assistant",
401
+ "content": "Hey! Willkommen bei Fivestars! Was kann ich für dich tun?"
402
+ }]
403
+
404
  msg.submit(user_message, [msg, chatbot], [msg, chatbot]).then(
405
  bot_response, chatbot, chatbot
406
  )
407
  submit.click(user_message, [msg, chatbot], [msg, chatbot]).then(
408
  bot_response, chatbot, chatbot
409
  )
410
+ clear.click(clear_chat, None, chatbot)
411
 
412
  demo.launch(inbrowser=True)
413