diff --git a/logs/app.log b/logs/app.log
index 55cdc71..0835bd1 100644
--- a/logs/app.log
+++ b/logs/app.log
@@ -2735,3 +2735,195 @@ Traceback (most recent call last):
raise BuildError(endpoint, values, method, self)
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
[in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:120]
+2026-02-28 22:13:20,966 ERROR: Exception on / [GET] [in /home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py:1414]
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+2026-02-28 22:13:21,024 ERROR: Internal Server Error: 500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+ [in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:120]
+2026-02-28 22:13:37,694 ERROR: Exception on / [GET] [in /home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py:1414]
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+2026-02-28 22:13:37,732 ERROR: Internal Server Error: 500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+ [in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:120]
+2026-02-28 22:15:25,968 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82]
+2026-02-28 22:22:12,598 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82]
diff --git a/logs/gunicorn_access.log b/logs/gunicorn_access.log
index 3d18046..ef8a059 100644
--- a/logs/gunicorn_access.log
+++ b/logs/gunicorn_access.log
@@ -15200,3 +15200,51 @@
123.139.40.200 - - [28/Feb/2026:21:30:25 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1112
123.139.40.200 - - [28/Feb/2026:21:30:25 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 151945 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 296286
123.139.40.200 - - [28/Feb/2026:21:35:52 +0800] "GET / HTTP/1.1" 500 420 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 562770
+123.139.40.200 - - [28/Feb/2026:22:13:21 +0800] "GET / HTTP/1.1" 500 420 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 716161
+123.139.40.200 - - [28/Feb/2026:22:13:37 +0800] "GET / HTTP/1.1" 500 420 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 615441
+123.139.40.200 - - [28/Feb/2026:22:15:45 +0800] "GET / HTTP/1.1" 200 216259 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 812355
+123.139.40.200 - - [28/Feb/2026:22:15:45 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 5945
+123.139.40.200 - - [28/Feb/2026:22:15:45 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 5537
+123.139.40.200 - - [28/Feb/2026:22:15:50 +0800] "GET /expert-generate-3 HTTP/1.1" 200 31515 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 464685
+123.139.40.200 - - [28/Feb/2026:22:15:50 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1165
+123.139.40.200 - - [28/Feb/2026:22:15:50 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 5464
+123.139.40.200 - - [28/Feb/2026:22:15:56 +0800] "GET /expert-generate-2 HTTP/1.1" 200 31530 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 134570
+123.139.40.200 - - [28/Feb/2026:22:15:56 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1038
+123.139.40.200 - - [28/Feb/2026:22:15:56 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1101
+123.139.40.200 - - [28/Feb/2026:22:16:50 +0800] "POST /api/expert-generate-2/generate HTTP/1.1" 200 7358 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 35345046
+123.139.40.200 - - [28/Feb/2026:22:16:54 +0800] "POST /api/expert-generate-2/generate HTTP/1.1" 200 7763 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 38867214
+123.139.40.200 - - [28/Feb/2026:22:16:57 +0800] "GET /history HTTP/1.1" 200 40105 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 143707
+123.139.40.200 - - [28/Feb/2026:22:16:57 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1470
+123.139.40.200 - - [28/Feb/2026:22:16:58 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1197
+123.139.40.200 - - [28/Feb/2026:22:16:58 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 166762 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 328044
+123.139.40.200 - - [28/Feb/2026:22:22:33 +0800] "GET / HTTP/1.1" 200 216259 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 840426
+123.139.40.200 - - [28/Feb/2026:22:22:34 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 7433
+123.139.40.200 - - [28/Feb/2026:22:22:34 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 5456
+123.139.40.200 - - [28/Feb/2026:22:22:36 +0800] "GET /expert-generate-2 HTTP/1.1" 200 31638 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 447631
+123.139.40.200 - - [28/Feb/2026:22:22:36 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1180
+123.139.40.200 - - [28/Feb/2026:22:22:36 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1050
+123.139.40.200 - - [28/Feb/2026:22:23:15 +0800] "POST /api/expert-generate-2/generate HTTP/1.1" 200 5676 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 26666136
+123.139.40.200 - - [28/Feb/2026:22:23:31 +0800] "GET /history HTTP/1.1" 200 40105 "http://101.43.95.130:5002/expert-generate-2" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 487346
+123.139.40.200 - - [28/Feb/2026:22:23:31 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1577
+123.139.40.200 - - [28/Feb/2026:22:23:31 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1007
+123.139.40.200 - - [28/Feb/2026:22:23:32 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 172261 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 285944
+123.139.40.200 - - [28/Feb/2026:22:24:40 +0800] "GET /expert-generate-3 HTTP/1.1" 200 31623 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 136880
+123.139.40.200 - - [28/Feb/2026:22:24:40 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1391
+123.139.40.200 - - [28/Feb/2026:22:24:40 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 818
+13.219.248.239 - - [28/Feb/2026:22:26:47 +0800] "HEAD /expert-generate-3 HTTP/1.1" 200 0 "-" "got (https://github.com/sindresorhus/got)" 4167
+13.219.248.239 - - [28/Feb/2026:22:26:48 +0800] "GET /expert-generate-3 HTTP/1.1" 200 31623 "-" "got (https://github.com/sindresorhus/got)" 198337
+13.219.248.239 - - [28/Feb/2026:22:26:49 +0800] "GET /expert-generate-3 HTTP/1.1" 200 31623 "-" "got (https://github.com/sindresorhus/got)" 215894
+123.139.40.200 - - [28/Feb/2026:22:28:25 +0800] "GET /expert-generate-3 HTTP/1.1" 200 34731 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 507819
+123.139.40.200 - - [28/Feb/2026:22:28:26 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1282
+123.139.40.200 - - [28/Feb/2026:22:28:26 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1074
+123.139.40.200 - - [28/Feb/2026:22:31:29 +0800] "POST /api/expert-generate-3/generate HTTP/1.1" 200 8334 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 41063840
+123.139.40.200 - - [28/Feb/2026:22:31:48 +0800] "GET /history HTTP/1.1" 200 40105 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 257675
+123.139.40.200 - - [28/Feb/2026:22:31:48 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 1372
+123.139.40.200 - - [28/Feb/2026:22:31:48 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 888
+123.139.40.200 - - [28/Feb/2026:22:31:49 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 180128 "http://101.43.95.130:5002/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 334878
+123.139.40.200 - - [28/Feb/2026:22:35:55 +0800] "POST /api/expert-generate-3/generate HTTP/1.1" 200 6946 "http://101.43.95.130:5002/expert-generate-3" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0" 39194402
+206.168.34.39 - - [01/Mar/2026:01:05:05 +0800] "GET / HTTP/1.1" 200 216259 "-" "-" 865654
+206.168.34.39 - - [01/Mar/2026:01:05:24 +0800] "GET / HTTP/1.1" 200 216259 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 1228039
+206.168.34.39 - - [01/Mar/2026:01:05:25 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 828
+206.168.34.39 - - [01/Mar/2026:01:05:26 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 806
+206.168.34.39 - - [01/Mar/2026:01:05:45 +0800] "GET /security.txt HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 659
diff --git a/logs/gunicorn_error.log b/logs/gunicorn_error.log
index b7b530a..05f84f4 100644
--- a/logs/gunicorn_error.log
+++ b/logs/gunicorn_error.log
@@ -10304,3 +10304,286 @@ werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert
[2026-02-28 21:37:53 +0800] [22289] [INFO] Booting worker with pid: 22289
[2026-02-28 21:37:53 +0800] [22289] [INFO] 工作进程 22289 已启动
[2026-02-28 21:37:53 +0800] [22289] [INFO] 工作进程 22289 初始化完成
+[2026-02-28 22:13:20,966] ERROR in app: Exception on / [GET]
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+[2026-02-28 22:13:21,024] ERROR in __init__: Internal Server Error: 500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+
+[2026-02-28 22:13:25 +0800] [22289] [INFO] Worker exiting (pid: 22289)
+[2026-02-28 22:13:25 +0800] [22948] [INFO] Handling signal: term
+[2026-02-28 22:13:25 +0800] [23019] [INFO] Worker exiting (pid: 23019)
+[2026-02-28 22:13:25 +0800] [23048] [INFO] Worker exiting (pid: 23048)
+[2026-02-28 22:13:25 +0800] [23049] [INFO] Worker exiting (pid: 23049)
+[2026-02-28 22:13:25 +0800] [22948] [ERROR] Worker (pid:22289) was sent SIGTERM!
+[2026-02-28 22:13:37,694] ERROR in app: Exception on / [GET]
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+[2026-02-28 22:13:37,732] ERROR in __init__: Internal Server Error: 500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
+Traceback (most recent call last):
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
+ response = self.full_dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request
+ rv = self.handle_user_exception(e)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function
+ return cors_after_request(app.make_response(f(*args, **kwargs)))
+ ^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 263, in index
+ return render_template('generate.html', form=form, prompt=None, templates=templates,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 151, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/templating.py", line 132, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 1295, in render
+ self.environment.handle_exception()
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/jinja2/environment.py", line 942, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 1, in top-level template code
+ {% extends "base.html" %}
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/base.html", line 603, in top-level template code
+ {% block content %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/aitsc/src/flask_prompt_master/templates/generate.html", line 206, in block 'content'
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1697, in url_for
+ return self.handle_url_build_error(error, endpoint, values)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1686, in url_for
+ rv = url_adapter.build( # type: ignore[union-attr]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 950, in build
+ raise BuildError(endpoint, values, method, self)
+werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'expert_generate_3.expert_generate_3_page'. Did you mean 'expert_generate_2.expert_generate_2_page' instead?
+
+[2026-02-28 22:13:37 +0800] [23002] [INFO] Worker exiting (pid: 23002)
+[2026-02-28 22:13:38 +0800] [22948] [INFO] Shutting down: Master
+[2026-02-28 22:15:28 +0800] [3489] [INFO] Starting gunicorn 21.2.0
+[2026-02-28 22:15:28 +0800] [3489] [INFO] Gunicorn服务器启动中...
+[2026-02-28 22:15:28 +0800] [3489] [INFO] Listening at: http://0.0.0.0:5002 (3489)
+[2026-02-28 22:15:28 +0800] [3489] [INFO] Using worker: sync
+[2026-02-28 22:15:28 +0800] [3489] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:15:28 +0800] [3677] [INFO] Booting worker with pid: 3677
+[2026-02-28 22:15:28 +0800] [3677] [INFO] 工作进程 3677 已启动
+[2026-02-28 22:15:28 +0800] [3677] [INFO] 工作进程 3677 初始化完成
+[2026-02-28 22:15:28 +0800] [3489] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:15:28 +0800] [3678] [INFO] Booting worker with pid: 3678
+[2026-02-28 22:15:28 +0800] [3678] [INFO] 工作进程 3678 已启动
+[2026-02-28 22:15:28 +0800] [3678] [INFO] 工作进程 3678 初始化完成
+[2026-02-28 22:15:28 +0800] [3489] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:15:28 +0800] [3679] [INFO] Booting worker with pid: 3679
+[2026-02-28 22:15:28 +0800] [3679] [INFO] 工作进程 3679 已启动
+[2026-02-28 22:15:28 +0800] [3679] [INFO] 工作进程 3679 初始化完成
+[2026-02-28 22:15:28 +0800] [3489] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:15:28 +0800] [3680] [INFO] Booting worker with pid: 3680
+[2026-02-28 22:15:28 +0800] [3680] [INFO] 工作进程 3680 已启动
+[2026-02-28 22:15:28 +0800] [3680] [INFO] 工作进程 3680 初始化完成
+[2026-02-28 22:15:28 +0800] [3489] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:15:28 +0800] [3681] [INFO] Booting worker with pid: 3681
+[2026-02-28 22:15:28 +0800] [3681] [INFO] 工作进程 3681 已启动
+[2026-02-28 22:15:28 +0800] [3681] [INFO] 工作进程 3681 初始化完成
+[2026-02-28 22:20:50 +0800] [3489] [INFO] Handling signal: term
+[2026-02-28 22:20:50 +0800] [3677] [INFO] Worker exiting (pid: 3677)
+[2026-02-28 22:20:50 +0800] [3679] [INFO] Worker exiting (pid: 3679)
+[2026-02-28 22:20:50 +0800] [3678] [INFO] Worker exiting (pid: 3678)
+[2026-02-28 22:20:50 +0800] [3680] [INFO] Worker exiting (pid: 3680)
+[2026-02-28 22:20:50 +0800] [3681] [INFO] Worker exiting (pid: 3681)
+[2026-02-28 22:20:51 +0800] [3489] [INFO] Shutting down: Master
+[2026-02-28 22:22:15 +0800] [31755] [INFO] Starting gunicorn 21.2.0
+[2026-02-28 22:22:15 +0800] [31755] [INFO] Gunicorn服务器启动中...
+[2026-02-28 22:22:15 +0800] [31755] [INFO] Listening at: http://0.0.0.0:5002 (31755)
+[2026-02-28 22:22:15 +0800] [31755] [INFO] Using worker: sync
+[2026-02-28 22:22:15 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:22:15 +0800] [689] [INFO] Booting worker with pid: 689
+[2026-02-28 22:22:15 +0800] [689] [INFO] 工作进程 689 已启动
+[2026-02-28 22:22:15 +0800] [689] [INFO] 工作进程 689 初始化完成
+[2026-02-28 22:22:15 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:22:15 +0800] [696] [INFO] Booting worker with pid: 696
+[2026-02-28 22:22:15 +0800] [696] [INFO] 工作进程 696 已启动
+[2026-02-28 22:22:15 +0800] [696] [INFO] 工作进程 696 初始化完成
+[2026-02-28 22:22:15 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:22:15 +0800] [741] [INFO] Booting worker with pid: 741
+[2026-02-28 22:22:15 +0800] [741] [INFO] 工作进程 741 已启动
+[2026-02-28 22:22:15 +0800] [741] [INFO] 工作进程 741 初始化完成
+[2026-02-28 22:22:15 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:22:15 +0800] [785] [INFO] Booting worker with pid: 785
+[2026-02-28 22:22:15 +0800] [785] [INFO] 工作进程 785 已启动
+[2026-02-28 22:22:15 +0800] [785] [INFO] 工作进程 785 初始化完成
+[2026-02-28 22:22:15 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:22:15 +0800] [831] [INFO] Booting worker with pid: 831
+[2026-02-28 22:22:15 +0800] [831] [INFO] 工作进程 831 已启动
+[2026-02-28 22:22:15 +0800] [831] [INFO] 工作进程 831 初始化完成
+[2026-02-28 22:35:12 +0800] [31755] [CRITICAL] WORKER TIMEOUT (pid:689)
+[2026-02-28 22:35:12 +0800] [689] [INFO] 工作进程 689 异常退出
+[2026-02-28 22:35:12 +0800] [689] [INFO] Worker exiting (pid: 689)
+[2026-02-28 22:35:12 +0800] [31755] [ERROR] Worker (pid:689) exited with code 1
+[2026-02-28 22:35:12 +0800] [31755] [ERROR] Worker (pid:689) exited with code 1.
+[2026-02-28 22:35:12 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-02-28 22:35:12 +0800] [5280] [INFO] Booting worker with pid: 5280
+[2026-02-28 22:35:12 +0800] [5280] [INFO] 工作进程 5280 已启动
+[2026-02-28 22:35:12 +0800] [5280] [INFO] 工作进程 5280 初始化完成
+[2026-03-01 01:06:55 +0800] [31755] [CRITICAL] WORKER TIMEOUT (pid:5280)
+[2026-03-01 01:06:55 +0800] [5280] [INFO] 工作进程 5280 异常退出
+[2026-03-01 01:06:55 +0800] [5280] [INFO] Worker exiting (pid: 5280)
+[2026-03-01 01:06:56 +0800] [31755] [ERROR] Worker (pid:5280) exited with code 1
+[2026-03-01 01:06:56 +0800] [31755] [ERROR] Worker (pid:5280) exited with code 1.
+[2026-03-01 01:06:56 +0800] [31755] [INFO] 工作进程 [booting] 即将启动
+[2026-03-01 01:06:56 +0800] [27142] [INFO] Booting worker with pid: 27142
+[2026-03-01 01:06:56 +0800] [27142] [INFO] 工作进程 27142 已启动
+[2026-03-01 01:06:56 +0800] [27142] [INFO] 工作进程 27142 初始化完成
+[2026-03-01 02:01:44 +0800] [27142] [INFO] Worker exiting (pid: 27142)
+[2026-03-01 02:01:44 +0800] [831] [INFO] Worker exiting (pid: 831)
+[2026-03-01 02:01:44 +0800] [696] [INFO] Worker exiting (pid: 696)
+[2026-03-01 02:01:44 +0800] [785] [INFO] Worker exiting (pid: 785)
+[2026-03-01 02:01:44 +0800] [741] [INFO] Worker exiting (pid: 741)
+[2026-03-01 02:01:44 +0800] [31755] [INFO] Handling signal: term
+[2026-03-01 02:01:44 +0800] [31755] [ERROR] Worker (pid:785) was sent SIGTERM!
+[2026-03-01 02:01:44 +0800] [31755] [ERROR] Worker (pid:741) was sent SIGTERM!
+[2026-03-01 02:01:44 +0800] [31755] [ERROR] Worker (pid:27142) was sent SIGTERM!
+[2026-03-01 02:01:44 +0800] [31755] [ERROR] Worker (pid:696) was sent SIGTERM!
+[2026-03-01 02:01:44 +0800] [31755] [ERROR] Worker (pid:831) was sent SIGTERM!
+[2026-03-01 02:01:44 +0800] [31755] [INFO] Shutting down: Master
diff --git a/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc b/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc
index d4b41ac..f9cec22 100644
Binary files a/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc and b/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc differ
diff --git a/src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc
index a32b0ac..2005885 100644
Binary files a/src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc and b/src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc differ
diff --git a/src/flask_prompt_master/routes/__pycache__/expert_generate_3.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/expert_generate_3.cpython-312.pyc
new file mode 100644
index 0000000..facd71b
Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/expert_generate_3.cpython-312.pyc differ
diff --git a/src/flask_prompt_master/routes/expert_generate_2.py b/src/flask_prompt_master/routes/expert_generate_2.py
index 3543b01..3e22282 100644
--- a/src/flask_prompt_master/routes/expert_generate_2.py
+++ b/src/flask_prompt_master/routes/expert_generate_2.py
@@ -5,15 +5,18 @@
"""
from flask import Blueprint, render_template, request, jsonify
from openai import OpenAI
+import hashlib
import json
import logging
import os
+import time
from src.flask_prompt_master import db
from src.flask_prompt_master.models.models import User, Prompt
from src.flask_prompt_master.models.history_models import PromptHistory, UserStatistics
logger = logging.getLogger(__name__)
expert_generate_2_bp = Blueprint('expert_generate_2', __name__)
+_dedup_cache = {}
client = OpenAI(
api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc',
@@ -154,6 +157,15 @@ def expert_generate_2_api():
if not user_input:
return jsonify({'code': 400, 'message': '请输入您的需求', 'data': None})
+ uid = _get_user_id()
+ req_key = (uid, hashlib.md5(user_input.encode()).hexdigest())
+ now_ts = time.time()
+ if req_key in _dedup_cache and (now_ts - _dedup_cache[req_key]) < 8:
+ return jsonify({'code': 429, 'message': '请勿重复提交,请稍后再试', 'data': None})
+ _dedup_cache[req_key] = now_ts
+ if len(_dedup_cache) > 500:
+ _dedup_cache.clear()
+
# 第一阶段:意图分析
intent_response = client.chat.completions.create(
model="deepseek-chat",
@@ -206,7 +218,7 @@ def expert_generate_2_api():
if not generated_prompt:
return jsonify({'code': 500, 'message': '生成失败,请重试', 'data': None})
- user_id = _get_user_id()
+ user_id = uid
try:
p = Prompt(input_text=user_input, generated_text=generated_prompt, user_id=user_id)
db.session.add(p)
diff --git a/src/flask_prompt_master/routes/expert_generate_3.py b/src/flask_prompt_master/routes/expert_generate_3.py
index cf5b662..1079400 100644
--- a/src/flask_prompt_master/routes/expert_generate_3.py
+++ b/src/flask_prompt_master/routes/expert_generate_3.py
@@ -6,15 +6,18 @@
"""
from flask import Blueprint, render_template, request, jsonify
from openai import OpenAI
+import hashlib
import json
import logging
import os
+import time
from src.flask_prompt_master import db
from src.flask_prompt_master.models.models import User, Prompt
from src.flask_prompt_master.models.history_models import PromptHistory, UserStatistics
logger = logging.getLogger(__name__)
expert_generate_3_bp = Blueprint('expert_generate_3', __name__)
+_dedup_cache = {}
_llm_client = OpenAI(
api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc',
@@ -153,6 +156,26 @@ def expert_generate_3_api():
raw_input = (payload.get('input_text') or '').strip()
if not raw_input:
return jsonify({'code': 400, 'message': '请输入您的需求', 'data': None})
+
+ temperature = payload.get('temperature')
+ temperature = float(temperature) if temperature is not None else 0.7
+ temperature = max(0.0, min(2.0, temperature))
+ max_tokens = payload.get('max_tokens')
+ max_tokens = int(max_tokens) if max_tokens is not None else 1000
+ max_tokens = max(100, min(4000, max_tokens))
+ timeout = payload.get('timeout')
+ timeout = int(timeout) if timeout is not None else 60
+ timeout = max(10, min(300, timeout))
+
+ uid = _resolve_user_id()
+ req_key = (uid, hashlib.md5(raw_input.encode()).hexdigest())
+ now_ts = time.time()
+ if req_key in _dedup_cache and (now_ts - _dedup_cache[req_key]) < 8:
+ return jsonify({'code': 429, 'message': '请勿重复提交,请稍后再试', 'data': None})
+ _dedup_cache[req_key] = now_ts
+ if len(_dedup_cache) > 500:
+ _dedup_cache.clear()
+
resp1 = _llm_client.chat.completions.create(
model="deepseek-chat",
messages=[
@@ -160,7 +183,7 @@ def expert_generate_3_api():
{"role": "user", "content": raw_input}
],
temperature=0.1,
- timeout=60
+ timeout=timeout
)
intent_raw = (resp1.choices[0].message.content or "").strip()
intent_raw = intent_raw.replace('```json', '').replace('```', '').strip()
@@ -189,14 +212,13 @@ def expert_generate_3_api():
{"role": "system", "content": tpl.format(analysis=analysis_str)},
{"role": "user", "content": raw_input}
],
- temperature=0.7,
- max_tokens=1000,
- timeout=60
+ temperature=temperature,
+ max_tokens=max_tokens,
+ timeout=timeout
)
result_prompt = (resp2.choices[0].message.content or "").strip()
if not result_prompt:
return jsonify({'code': 500, 'message': '生成失败,请重试', 'data': None})
- uid = _resolve_user_id()
try:
db.session.add(Prompt(input_text=raw_input, generated_text=result_prompt, user_id=uid))
db.session.commit()
diff --git a/src/flask_prompt_master/templates/expert_generate_2.html b/src/flask_prompt_master/templates/expert_generate_2.html
index 3e2ea75..f3fdea1 100644
--- a/src/flask_prompt_master/templates/expert_generate_2.html
+++ b/src/flask_prompt_master/templates/expert_generate_2.html
@@ -80,13 +80,16 @@