Rooni commited on
Commit
be07774
·
verified ·
1 Parent(s): 7d69df3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -6
app.py CHANGED
@@ -9,6 +9,7 @@ import urllib.parse
9
  import hashlib
10
  from deep_translator import GoogleTranslator
11
  from langdetect import detect
 
12
 
13
  app = Flask(__name__)
14
 
@@ -31,7 +32,6 @@ def generate_cache_key(prompt, width, height, seed, model_name):
31
  # Создаем уникальный ключ на основе всех параметров
32
  return hashlib.md5(f"{prompt}_{width}_{height}_{seed}_{model_name}".encode()).hexdigest()
33
 
34
-
35
  def scale_dimensions(width, height, max_width, max_height):
36
  """Масштабирует размеры изображения, сохраняя соотношение сторон, и округляет до чисел, кратных 8."""
37
  aspect_ratio = width / height
@@ -48,8 +48,7 @@ def scale_dimensions(width, height, max_width, max_height):
48
  height = (height + 3) // 8 * 8
49
  return width, height
50
 
51
- @cached(cache, key=lambda prompt, width, height, seed, model_name, api_key: generate_cache_key(prompt, width, height, seed, model_name))
52
- def generate_cached_image(prompt, width, height, seed, model_name, api_key):
53
  headers = {
54
  "Authorization": f"Bearer {api_key}",
55
  "Content-Type": "application/json"
@@ -84,6 +83,17 @@ def generate_cached_image(prompt, width, height, seed, model_name, api_key):
84
  app.logger.error(f"Request error occurred: {req_err}")
85
  return None
86
 
 
 
 
 
 
 
 
 
 
 
 
87
  @app.route('/prompt/<path:prompt>')
88
  def get_image(prompt):
89
  width = request.args.get('width', type=int, default=512)
@@ -118,10 +128,19 @@ def get_image(prompt):
118
  if api_key is None:
119
  api_key = get_random_key()
120
 
 
 
 
121
  try:
122
- image = generate_cached_image(prompt, width, height, seed, model_name, api_key)
 
123
  if image is None:
124
- return send_error_image()
 
 
 
 
 
125
  except Exception as e:
126
  app.logger.error(f"Error generating image: {e}")
127
  return send_error_image()
@@ -157,4 +176,4 @@ def send_error_image():
157
  abort(500, description="Error fetching error image")
158
 
159
  if __name__ == '__main__':
160
- app.run(host='0.0.0.0', port=7860, debug=False)
 
9
  import hashlib
10
  from deep_translator import GoogleTranslator
11
  from langdetect import detect
12
+ import time
13
 
14
  app = Flask(__name__)
15
 
 
32
  # Создаем уникальный ключ на основе всех параметров
33
  return hashlib.md5(f"{prompt}_{width}_{height}_{seed}_{model_name}".encode()).hexdigest()
34
 
 
35
  def scale_dimensions(width, height, max_width, max_height):
36
  """Масштабирует размеры изображения, сохраняя соотношение сторон, и округляет до чисел, кратных 8."""
37
  aspect_ratio = width / height
 
48
  height = (height + 3) // 8 * 8
49
  return width, height
50
 
51
+ def generate_image(prompt, width, height, seed, model_name, api_key):
 
52
  headers = {
53
  "Authorization": f"Bearer {api_key}",
54
  "Content-Type": "application/json"
 
83
  app.logger.error(f"Request error occurred: {req_err}")
84
  return None
85
 
86
+ def generate_with_retry(prompt, width, height, seed, model_name, api_key):
87
+ max_retries = 2 # Максимальное количество повторных попыток
88
+ for attempt in range(max_retries):
89
+ image = generate_image(prompt, width, height, seed, model_name, api_key)
90
+ if image:
91
+ return image
92
+ else:
93
+ app.logger.warning(f"Retrying image generation (attempt {attempt + 1}/{max_retries})...")
94
+ time.sleep(1) # Небольшая задержка перед повторной попыткой
95
+ return None # Возвращаем None, если все попытки не удались
96
+
97
  @app.route('/prompt/<path:prompt>')
98
  def get_image(prompt):
99
  width = request.args.get('width', type=int, default=512)
 
128
  if api_key is None:
129
  api_key = get_random_key()
130
 
131
+ # Генерируем уникальный ключ для кэша
132
+ cache_key = generate_cache_key(prompt, width, height, seed, model_name)
133
+
134
  try:
135
+ # Пытаемся получить изображение из кэша
136
+ image = cache.get(cache_key)
137
  if image is None:
138
+ # Если нет в кэше, генерируем изображение
139
+ image = generate_with_retry(prompt, width, height, seed, model_name, api_key)
140
+ if image:
141
+ cache[cache_key] = image # Кэшируем только успешное изображение
142
+ else:
143
+ return send_error_image()
144
  except Exception as e:
145
  app.logger.error(f"Error generating image: {e}")
146
  return send_error_image()
 
176
  abort(500, description="Error fetching error image")
177
 
178
  if __name__ == '__main__':
179
+ app.run(host='0.0.0.0', port=7860, debug=False)