Update app.py
Browse files
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
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 =
|
| 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 |
-
|
| 126 |
-
enhanced_prompt =
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
f"图像规格:{size}\n",
|
| 194 |
"正在根据提示词生成图像...\n",
|
| 195 |
"图像正在处理中...\n",
|
| 196 |
"即将完成...\n",
|
| 197 |
f"生成成功!\n图像生成完毕,以下是结果:\n\n"
|
| 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 |
-
|
| 235 |
-
|
|
|
|
|
|
|
|
|
|
| 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"
|
| 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"
|