smgc commited on
Commit
2950611
1 Parent(s): 44dac73

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -19
app.py CHANGED
@@ -91,15 +91,23 @@ def translate_and_enhance_prompt(prompt, auth_token):
91
  logger.error(f"Error in translate_and_enhance_prompt: {str(e)}")
92
  raise
93
 
94
- def extract_size_from_prompt(prompt):
95
  size_match = re.search(r'-s\s+(\S+)', prompt)
 
 
96
  if size_match:
97
  size = size_match.group(1)
98
  clean_prompt = re.sub(r'-s\s+\S+', '', prompt).strip()
99
  else:
100
  size = "16:9"
101
  clean_prompt = prompt
102
- return RATIO_MAP.get(size, RATIO_MAP["16:9"]), clean_prompt
 
 
 
 
 
 
103
 
104
  @app.route('/')
105
  def index():
@@ -116,17 +124,20 @@ def handle_request():
116
  return jsonify({"error": "Bad Request: Missing required fields"}), 400
117
 
118
  prompt = messages[-1]['content']
119
- image_size, clean_prompt = extract_size_from_prompt(prompt)
120
 
121
  random_token = get_random_token(request.headers.get('Authorization'))
122
  if not random_token:
123
  return jsonify({"error": "Unauthorized: Invalid or missing Authorization header"}), 401
124
 
125
- try:
126
- enhanced_prompt = translate_and_enhance_prompt(clean_prompt, random_token)
127
- except Exception as e:
128
- logger.error(f"Error in translate_and_enhance_prompt: {str(e)}")
129
- return jsonify({"error": "Failed to enhance prompt"}), 500
 
 
 
130
 
131
  new_url = f'https://api.siliconflow.cn/v1/{model}/text-to-image'
132
  new_request_body = {
@@ -175,27 +186,32 @@ def handle_request():
175
  image_data = {'data': [{'url': image_url}]}
176
 
177
  if stream:
178
- return stream_response(unique_id, image_data, clean_prompt, enhanced_prompt, image_size, current_timestamp, model, system_fingerprint)
179
  else:
180
- return non_stream_response(unique_id, image_data, clean_prompt, enhanced_prompt, image_size, current_timestamp, model, system_fingerprint)
181
  except Exception as e:
182
  logger.error(f"Unexpected error in handle_request: {str(e)}")
183
  return jsonify({"error": f"Internal Server Error: {str(e)}"}), 500
184
 
185
- def stream_response(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint):
186
  logger.debug("Starting stream response")
187
- return Response(stream_with_context(generate_stream(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint)), content_type='text/event-stream')
188
 
189
- def generate_stream(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint):
190
  chunks = [
191
  f"原始提示词:\n{original_prompt}\n",
192
- f"翻译后的提示词:\n{translated_prompt}\n",
 
 
 
 
 
193
  f"图像规格:{size}\n",
194
  "正在根据提示词生成图像...\n",
195
  "图像正在处理中...\n",
196
  "即将完成...\n",
197
  f"生成成功!\n图像生成完毕,以下是结果:\n\n![生成的图像]({image_data['data'][0]['url']})"
198
- ]
199
 
200
  for i, chunk in enumerate(chunks):
201
  json_chunk = json.dumps({
@@ -229,10 +245,13 @@ def generate_stream(unique_id, image_data, original_prompt, translated_prompt, s
229
  })
230
  yield f"data: {final_chunk}\n\n"
231
 
232
- def non_stream_response(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint):
233
- content = (
234
- f"原始提示词:{original_prompt}\n"
235
- f"翻译后的提示词:{translated_prompt}\n"
 
 
 
236
  f"图像规格:{size}\n"
237
  f"图像生成成功!\n"
238
  f"以下是结果:\n\n"
 
91
  logger.error(f"Error in translate_and_enhance_prompt: {str(e)}")
92
  raise
93
 
94
+ def extract_params_from_prompt(prompt):
95
  size_match = re.search(r'-s\s+(\S+)', prompt)
96
+ original_match = re.search(r'-o', prompt)
97
+
98
  if size_match:
99
  size = size_match.group(1)
100
  clean_prompt = re.sub(r'-s\s+\S+', '', prompt).strip()
101
  else:
102
  size = "16:9"
103
  clean_prompt = prompt
104
+
105
+ use_original = bool(original_match)
106
+ if use_original:
107
+ clean_prompt = re.sub(r'-o', '', clean_prompt).strip()
108
+
109
+ image_size = RATIO_MAP.get(size, RATIO_MAP["16:9"])
110
+ return image_size, clean_prompt, use_original
111
 
112
  @app.route('/')
113
  def index():
 
124
  return jsonify({"error": "Bad Request: Missing required fields"}), 400
125
 
126
  prompt = messages[-1]['content']
127
+ image_size, clean_prompt, use_original = extract_params_from_prompt(prompt)
128
 
129
  random_token = get_random_token(request.headers.get('Authorization'))
130
  if not random_token:
131
  return jsonify({"error": "Unauthorized: Invalid or missing Authorization header"}), 401
132
 
133
+ if use_original:
134
+ enhanced_prompt = clean_prompt
135
+ else:
136
+ try:
137
+ enhanced_prompt = translate_and_enhance_prompt(clean_prompt, random_token)
138
+ except Exception as e:
139
+ logger.error(f"Error in translate_and_enhance_prompt: {str(e)}")
140
+ return jsonify({"error": "Failed to enhance prompt"}), 500
141
 
142
  new_url = f'https://api.siliconflow.cn/v1/{model}/text-to-image'
143
  new_request_body = {
 
186
  image_data = {'data': [{'url': image_url}]}
187
 
188
  if stream:
189
+ return stream_response(unique_id, image_data, clean_prompt, enhanced_prompt, image_size, current_timestamp, model, system_fingerprint, use_original)
190
  else:
191
+ return non_stream_response(unique_id, image_data, clean_prompt, enhanced_prompt, image_size, current_timestamp, model, system_fingerprint, use_original)
192
  except Exception as e:
193
  logger.error(f"Unexpected error in handle_request: {str(e)}")
194
  return jsonify({"error": f"Internal Server Error: {str(e)}"}), 500
195
 
196
+ def stream_response(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint, use_original):
197
  logger.debug("Starting stream response")
198
+ return Response(stream_with_context(generate_stream(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint, use_original)), content_type='text/event-stream')
199
 
200
+ def generate_stream(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint, use_original):
201
  chunks = [
202
  f"原始提示词:\n{original_prompt}\n",
203
+ ]
204
+
205
+ if not use_original:
206
+ chunks.append(f"翻译后的提示词:\n{translated_prompt}\n")
207
+
208
+ chunks.extend([
209
  f"图像规格:{size}\n",
210
  "正在根据提示词生成图像...\n",
211
  "图像正在处理中...\n",
212
  "即将完成...\n",
213
  f"生成成功!\n图像生成完毕,以下是结果:\n\n![生成的图像]({image_data['data'][0]['url']})"
214
+ ])
215
 
216
  for i, chunk in enumerate(chunks):
217
  json_chunk = json.dumps({
 
245
  })
246
  yield f"data: {final_chunk}\n\n"
247
 
248
+ def non_stream_response(unique_id, image_data, original_prompt, translated_prompt, size, created, model, system_fingerprint, use_original):
249
+ content = f"原始提示词:{original_prompt}\n"
250
+
251
+ if not use_original:
252
+ content += f"翻译后的提示词:{translated_prompt}\n"
253
+
254
+ content += (
255
  f"图像规格:{size}\n"
256
  f"图像生成成功!\n"
257
  f"以下是结果:\n\n"