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"
|