Tobias Geisler commited on
Commit
590d4df
·
1 Parent(s): 905eabc

Track the generation time in the block state

Browse files
Files changed (1) hide show
  1. app.py +18 -30
app.py CHANGED
@@ -1,11 +1,8 @@
1
  import gradio as gr
2
  import time
3
- from collections import defaultdict
4
  from dotenv import load_dotenv
5
  import os
6
  from openai import OpenAI
7
- import random
8
- import uuid
9
  import secrets
10
 
11
  load_dotenv()
@@ -20,8 +17,6 @@ if APP_PASSWORD is None:
20
 
21
  GENERATION_TIMEOUT = float(os.getenv("GENERATION_TIMEOUT", 60))
22
 
23
- last_generation_time = defaultdict(float)
24
-
25
  def enhance_prompt(original_prompt):
26
  try:
27
  response = client.chat.completions.create(
@@ -38,20 +33,18 @@ def enhance_prompt(original_prompt):
38
  print("Ein Fehler ist beim Verbessern des Prompts aufgetreten:", e)
39
  return original_prompt
40
 
41
- def generate_image(prompt, use_magic_prompt, style, password, user_id):
42
- global last_generation_time
43
-
44
  print(f"\nGenerierungsversuch von User {user_id} mit Prompt:\n{prompt}")
45
 
46
  if password != APP_PASSWORD:
47
  print("Generierung abgebrochen: Falsches Passwort.")
48
- return "Falsches Passwort. Bitte versuche es erneut.", None
49
 
50
  current_time = time.time()
51
- if current_time - last_generation_time[user_id] < GENERATION_TIMEOUT:
52
- remaining_time = int(GENERATION_TIMEOUT - (current_time - last_generation_time[user_id]))
53
  print("Generierung abgebrochen: Cooldown noch nicht abgelaufen")
54
- return f"Bitte warte {remaining_time} Sekunden zwischen den Bildgenerierungen.", None
55
 
56
  if use_magic_prompt:
57
  prompt = enhance_prompt(prompt)
@@ -70,15 +63,15 @@ def generate_image(prompt, use_magic_prompt, style, password, user_id):
70
  image_url = response.data[0].url
71
 
72
  # Update the last generation time for this user
73
- last_generation_time[user_id] = current_time
74
 
75
- return prompt, image_url
76
  except Exception as e:
77
  error_message = str(e)
78
  if "content_policy_violation" in error_message:
79
  return "Leider können wir deinen Prompt nicht verarbeiten, da er evtl. gegen die Content Policy von OpenAI verstösst. Wenn du denkst, dass das ein Fehler ist, versuche den Prompt so umzuformulieren, dass er jugendfreundlich ist.", None
80
  print("Ein Fehler ist aufgetreten:", e)
81
- return f"Ein Fehler ist beim Generieren des Bildes aufgetreten: {error_message}", None
82
 
83
  examples = [
84
  "Astronaut im Dschungel, kalte Farbpalette, gedämpfte Farben, detailliert, 8k",
@@ -91,9 +84,9 @@ examples = [
91
  "Ein mittelalterlicher Ritter, der gegen einen Drachen kämpft"
92
  ]
93
 
94
- def update_button_state(user_id):
95
  current_time = time.time()
96
- remaining_time = max(0, int(GENERATION_TIMEOUT - (current_time - last_generation_time[user_id])))
97
  if remaining_time > 0:
98
  return gr.update(value=f"Bitte warte {remaining_time} Sekunden", interactive=False)
99
  else:
@@ -106,11 +99,12 @@ def generate_user_id():
106
  return secrets.token_urlsafe(16)
107
 
108
  def initialize_session():
109
- new_user_id = generate_user_id()
110
- return new_user_id, update_welcome_message(new_user_id)
111
 
112
  with gr.Blocks() as demo:
113
  user_id = gr.State(generate_user_id)
 
114
 
115
  gr.Markdown("# codora DALL-E 3 Bildgenerator")
116
  welcome_message = gr.Markdown("Willkommen!")
@@ -140,23 +134,17 @@ with gr.Blocks() as demo:
140
 
141
  generate_button.click(
142
  fn=generate_image,
143
- inputs=[prompt, use_magic_prompt, style, password, user_id],
144
- outputs=[final_prompt, generated_image]
145
  )
146
 
147
- demo.load(fn=initialize_session, outputs=[user_id, welcome_message])
148
 
149
- """demo.load(
150
- fn=update_welcome_message,
151
- inputs=[user_id],
152
- outputs=[welcome_message]
153
- )
154
- """
155
  demo.load(
156
  fn=update_button_state,
157
- inputs=[user_id],
158
  outputs=[generate_button],
159
  every=1
160
  )
161
 
162
- demo.launch()
 
1
  import gradio as gr
2
  import time
 
3
  from dotenv import load_dotenv
4
  import os
5
  from openai import OpenAI
 
 
6
  import secrets
7
 
8
  load_dotenv()
 
17
 
18
  GENERATION_TIMEOUT = float(os.getenv("GENERATION_TIMEOUT", 60))
19
 
 
 
20
  def enhance_prompt(original_prompt):
21
  try:
22
  response = client.chat.completions.create(
 
33
  print("Ein Fehler ist beim Verbessern des Prompts aufgetreten:", e)
34
  return original_prompt
35
 
36
+ def generate_image(prompt, use_magic_prompt, style, password, user_id, last_generation_time):
 
 
37
  print(f"\nGenerierungsversuch von User {user_id} mit Prompt:\n{prompt}")
38
 
39
  if password != APP_PASSWORD:
40
  print("Generierung abgebrochen: Falsches Passwort.")
41
+ return "Falsches Passwort. Bitte versuche es erneut.", None, last_generation_time
42
 
43
  current_time = time.time()
44
+ if current_time - last_generation_time < GENERATION_TIMEOUT:
45
+ remaining_time = max(0, int(GENERATION_TIMEOUT - (current_time - last_generation_time)))
46
  print("Generierung abgebrochen: Cooldown noch nicht abgelaufen")
47
+ return f"Bitte warte noch {remaining_time} Sekunden bis zur nächsten Bildgenerierungen.\n\nNutze die Wartezeit, um deinen Prompt zu verfeinern. &#128521;", None, last_generation_time
48
 
49
  if use_magic_prompt:
50
  prompt = enhance_prompt(prompt)
 
63
  image_url = response.data[0].url
64
 
65
  # Update the last generation time for this user
66
+ last_generation_time = current_time
67
 
68
+ return prompt, image_url, last_generation_time
69
  except Exception as e:
70
  error_message = str(e)
71
  if "content_policy_violation" in error_message:
72
  return "Leider können wir deinen Prompt nicht verarbeiten, da er evtl. gegen die Content Policy von OpenAI verstösst. Wenn du denkst, dass das ein Fehler ist, versuche den Prompt so umzuformulieren, dass er jugendfreundlich ist.", None
73
  print("Ein Fehler ist aufgetreten:", e)
74
+ return f"Ein Fehler ist beim Generieren des Bildes aufgetreten: {error_message}", None, last_generation_time
75
 
76
  examples = [
77
  "Astronaut im Dschungel, kalte Farbpalette, gedämpfte Farben, detailliert, 8k",
 
84
  "Ein mittelalterlicher Ritter, der gegen einen Drachen kämpft"
85
  ]
86
 
87
+ def update_button_state(last_generation_time):
88
  current_time = time.time()
89
+ remaining_time = max(0, int(GENERATION_TIMEOUT - (current_time - last_generation_time)))
90
  if remaining_time > 0:
91
  return gr.update(value=f"Bitte warte {remaining_time} Sekunden", interactive=False)
92
  else:
 
99
  return secrets.token_urlsafe(16)
100
 
101
  def initialize_session():
102
+ new_user_id = generate_user_id()
103
+ return new_user_id, update_welcome_message(new_user_id), 0
104
 
105
  with gr.Blocks() as demo:
106
  user_id = gr.State(generate_user_id)
107
+ last_generation_time = gr.State(0)
108
 
109
  gr.Markdown("# codora DALL-E 3 Bildgenerator")
110
  welcome_message = gr.Markdown("Willkommen!")
 
134
 
135
  generate_button.click(
136
  fn=generate_image,
137
+ inputs=[prompt, use_magic_prompt, style, password, user_id, last_generation_time],
138
+ outputs=[final_prompt, generated_image, last_generation_time]
139
  )
140
 
141
+ demo.load(fn=initialize_session, outputs=[user_id, welcome_message, last_generation_time])
142
 
 
 
 
 
 
 
143
  demo.load(
144
  fn=update_button_state,
145
+ inputs=[last_generation_time],
146
  outputs=[generate_button],
147
  every=1
148
  )
149
 
150
+ demo.launch()