diff --git a/(红头)启动和停止.txt b/(红头)启动和停止.txt index 682907f..8860f7e 100644 --- a/(红头)启动和停止.txt +++ b/(红头)启动和停止.txt @@ -96,8 +96,39 @@ tail -f logs/app.log tail -f logs/gunicorn_access.log ``` +## 📦 **首次部署或更新后(含新功能时)** + +若启用了「智能周报生成」「旅行攻略规划」等需要新表的功能,需先执行数据库迁移再启动服务: + +```bash +cd /home/renjianbo/aitsc +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv +FLASK_APP=run_dev.py flask db upgrade +``` + +执行成功后再按上文方式启动服务;否则访问周报/旅行攻略页面可能报 500 或“表不存在”类错误。 + ## 🔧 **故障排除** +### 无法访问此页面 / 连接被拒绝 (ERR_CONNECTION_REFUSED) + +访问 `http://101.43.95.130:5002` 出现「拒绝连接」时,请**在 101.43.95.130 这台服务器上**依次检查: + +1. **服务是否在本机运行** + ```bash + ps aux | grep gunicorn + ss -tlnp | grep 5002 + ``` + 若无进程或无 5002 监听,说明服务未启动,请在本机按上文「启动服务器」步骤启动。 + +2. **防火墙 / 安全组是否放行 5002** + - 若使用云服务器(如腾讯云),在控制台为该实例的**安全组**添加入站规则:放行 **TCP 5002**。 + - 若本机有 firewalld:`sudo firewall-cmd --add-port=5002/tcp --permanent && sudo firewall-cmd --reload` + - 若使用 iptables,需放行 5002 端口。 + +3. **确认用服务器 IP 访问** + - 在其他电脑/手机访问时,必须用 **http://101.43.95.130:5002/**,不能写 localhost。 + ### 清理和重启 ```bash # 1. 停止所有相关进程 diff --git a/__pycache__/gunicorn.conf.cpython-312.pyc b/__pycache__/gunicorn.conf.cpython-312.pyc index 35c6452..28ba265 100644 Binary files a/__pycache__/gunicorn.conf.cpython-312.pyc and b/__pycache__/gunicorn.conf.cpython-312.pyc differ diff --git a/logs/app.log b/logs/app.log index cc7925d..55cdc71 100644 --- a/logs/app.log +++ b/logs/app.log @@ -2144,3 +2144,594 @@ OSError: [Errno 5] Input/output error 2026-02-23 17:38:55,248 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] 2026-02-23 17:39:42,847 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] 2026-02-23 17:43:32,860 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 18:12:59,692 ERROR: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +2026-02-23 18:13:02,015 ERROR: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +2026-02-23 18:14:09,978 ERROR: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +2026-02-23 18:14:27,798 ERROR: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +2026-02-23 18:44:22,993 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 18:51:44,077 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 19:00:39,104 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 19:26:00,741 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 19:34:31,341 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 19:54:02,981 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 20:02:09,548 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? +2026-02-23 20:02:09,582 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? + [in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:104] +2026-02-23 20:02:12,566 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? +2026-02-23 20:02:12,590 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? + [in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:104] +2026-02-23 20:03:05,855 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 20:05:51,643 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 20:21:07,607 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 186, 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 'smart_prompt_optimization.optimization_page'. Did you mean 'prompt_optimization.optimization_page' instead? +2026-02-23 20:21:07,637 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 186, 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 'smart_prompt_optimization.optimization_page'. Did you mean 'prompt_optimization.optimization_page' instead? + [in /home/renjianbo/aitsc/src/flask_prompt_master/__init__.py:108] +2026-02-23 20:22:15,054 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 20:23:48,617 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-23 20:43:53,945 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-24 23:29:21,427 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-24 23:38:09,269 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-24 23:44:15,907 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-24 23:45:18,261 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-25 00:33:02,387 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-25 20:48:02,400 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-25 21:16:30,116 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-25 21:22:34,987 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-28 00:46:55,402 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-28 21:12:52,401 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-28 21:16:47,113 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-28 21:25:08,556 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2026-02-28 21:35:52,847 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 21:35:52,893 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] diff --git a/logs/gunicorn.pid b/logs/gunicorn.pid index 7342e19..85fb85f 100644 --- a/logs/gunicorn.pid +++ b/logs/gunicorn.pid @@ -1 +1 @@ -26873 +22948 diff --git a/logs/gunicorn_access.log b/logs/gunicorn_access.log index 37a64b4..3d18046 100644 --- a/logs/gunicorn_access.log +++ b/logs/gunicorn_access.log @@ -14607,3 +14607,596 @@ 127.0.0.1 - - [23/Feb/2026:17:47:44 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 1671 127.0.0.1 - - [23/Feb/2026:17:47:44 +0800] "GET /api/check-login HTTP/1.1" 200 92 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 940 127.0.0.1 - - [23/Feb/2026:17:48:26 +0800] "POST /api/travel-planning/generate HTTP/1.1" 200 7876 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 22271992 +127.0.0.1 - - [23/Feb/2026:18:12:59 +0800] "GET /travel-planning HTTP/1.1" 500 265 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 201311 +127.0.0.1 - - [23/Feb/2026:18:13:02 +0800] "GET /travel-planning HTTP/1.1" 500 265 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 12537 +127.0.0.1 - - [23/Feb/2026:18:13:06 +0800] "GET / HTTP/1.1" 200 176259 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 700530 +127.0.0.1 - - [23/Feb/2026:18:13:07 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 5969 +127.0.0.1 - - [23/Feb/2026:18:13:07 +0800] "GET /api/check-login HTTP/1.1" 200 92 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 1140 +127.0.0.1 - - [23/Feb/2026:18:13:09 +0800] "GET /travel-planning HTTP/1.1" 200 28229 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 1573 +127.0.0.1 - - [23/Feb/2026:18:13:09 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 1040 +127.0.0.1 - - [23/Feb/2026:18:13:09 +0800] "GET /api/check-login HTTP/1.1" 200 92 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 4796 +127.0.0.1 - - [23/Feb/2026:18:13:52 +0800] "POST /api/travel-planning/generate HTTP/1.1" 200 9454 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 31638990 +127.0.0.1 - - [23/Feb/2026:18:14:10 +0800] "GET /travel-planning HTTP/1.1" 500 265 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 38563 +127.0.0.1 - - [23/Feb/2026:18:14:27 +0800] "GET /travel-planning HTTP/1.1" 500 265 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 11398 +127.0.0.1 - - [23/Feb/2026:18:16:15 +0800] "GET /travel-planning HTTP/1.1" 200 28229 "http://localhost:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 2373 +127.0.0.1 - - [23/Feb/2026:18:16:15 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 1281 +127.0.0.1 - - [23/Feb/2026:18:16:15 +0800] "GET /api/check-login HTTP/1.1" 200 92 "http://localhost:5002/travel-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" 929 +123.139.39.117 - - [23/Feb/2026:18:45:15 +0800] "GET / HTTP/1.1" 200 176259 "-" "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" 759289 +123.139.39.117 - - [23/Feb/2026:18:45:15 +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" 5468 +123.139.39.117 - - [23/Feb/2026:18:45:16 +0800] "GET /api/check-login HTTP/1.1" 200 35 "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" 4691 +123.139.39.117 - - [23/Feb/2026:18:45:20 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 515240 +123.139.39.117 - - [23/Feb/2026:18:45:20 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1190 +123.139.39.117 - - [23/Feb/2026:18:45:20 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/travel-planning" "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" 4839 +123.139.39.117 - - [23/Feb/2026:18:45:30 +0800] "GET /login HTTP/1.1" 200 24095 "http://101.43.95.130:5002/travel-planning" "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" 525236 +123.139.39.117 - - [23/Feb/2026:18:45:30 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/login" "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" 1773 +123.139.39.117 - - [23/Feb/2026:18:45:30 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/login" "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" 1010 +123.139.39.117 - - [23/Feb/2026:18:45:44 +0800] "POST /api/login HTTP/1.1" 200 79 "http://101.43.95.130:5002/login" "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" 117911 +123.139.39.117 - - [23/Feb/2026:18:45:52 +0800] "POST /api/login HTTP/1.1" 200 182 "http://101.43.95.130:5002/login" "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" 257792 +123.139.39.117 - - [23/Feb/2026:18:45:55 +0800] "GET / HTTP/1.1" 200 176259 "http://101.43.95.130:5002/login" "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" 352685 +123.139.39.117 - - [23/Feb/2026:18:45:55 +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" 1070 +123.139.39.117 - - [23/Feb/2026:18:45:55 +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" 1185 +123.139.39.117 - - [23/Feb/2026:18:45:59 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 512126 +123.139.39.117 - - [23/Feb/2026:18:45:59 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1024 +123.139.39.117 - - [23/Feb/2026:18:45:59 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 880 +123.139.39.117 - - [23/Feb/2026:18:46:38 +0800] "POST /api/travel-planning/generate HTTP/1.1" 200 8908 "http://101.43.95.130:5002/travel-planning" "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" 27744872 +123.139.39.117 - - [23/Feb/2026:18:46:51 +0800] "POST /api/travel-planning/save HTTP/1.1" 200 105 "http://101.43.95.130:5002/travel-planning" "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" 231308 +123.139.39.117 - - [23/Feb/2026:18:46:58 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 143759 +123.139.39.117 - - [23/Feb/2026:18:46:59 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1512 +123.139.39.117 - - [23/Feb/2026:18:46:59 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 860 +123.139.39.117 - - [23/Feb/2026:18:47:04 +0800] "GET / HTTP/1.1" 200 176259 "http://101.43.95.130:5002/travel-planning" "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" 407350 +123.139.39.117 - - [23/Feb/2026:18:47:04 +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" 1031 +123.139.39.117 - - [23/Feb/2026:18:47:04 +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" 1020 +172.236.119.165 - - [23/Feb/2026:18:47:26 +0800] "GET / HTTP/1.1" 200 176259 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" 1281514 +123.139.39.117 - - [23/Feb/2026:18:47:44 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 153843 +123.139.39.117 - - [23/Feb/2026:18:47:44 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1025 +123.139.39.117 - - [23/Feb/2026:18:47:44 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 1195 +123.139.39.117 - - [23/Feb/2026:18:50:22 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 158692 +123.139.39.117 - - [23/Feb/2026:18:50:22 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1259 +123.139.39.117 - - [23/Feb/2026:18:50:22 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 820 +123.139.39.117 - - [23/Feb/2026:18:52:11 +0800] "GET / HTTP/1.1" 200 177783 "http://101.43.95.130:5002/travel-planning" "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" 846207 +123.139.39.117 - - [23/Feb/2026:18:52:11 +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" 6978 +123.139.39.117 - - [23/Feb/2026:18:52:11 +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" 5724 +123.139.39.117 - - [23/Feb/2026:18:52:14 +0800] "GET /travel-planning/history HTTP/1.1" 200 26926 "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" 510176 +123.139.39.117 - - [23/Feb/2026:18:52:14 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning/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" 7337 +123.139.39.117 - - [23/Feb/2026:18:52:35 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning/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" 1285 +123.139.39.117 - - [23/Feb/2026:18:52:35 +0800] "GET /api/travel-planning/list?page=1&per_page=10 HTTP/1.1" 200 9115 "http://101.43.95.130:5002/travel-planning/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" 477841 +123.139.39.117 - - [23/Feb/2026:18:53:10 +0800] "GET /travel-planning/history HTTP/1.1" 200 26926 "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" 464882 +123.139.39.117 - - [23/Feb/2026:18:53:10 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning/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" 1072 +123.139.39.117 - - [23/Feb/2026:18:53:11 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning/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" 919 +123.139.39.117 - - [23/Feb/2026:18:53:11 +0800] "GET /api/travel-planning/list?page=1&per_page=10 HTTP/1.1" 200 9115 "http://101.43.95.130:5002/travel-planning/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" 143044 +123.139.39.117 - - [23/Feb/2026:18:53:18 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 139962 +123.139.39.117 - - [23/Feb/2026:18:53:18 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1723 +123.139.39.117 - - [23/Feb/2026:18:53:18 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 1178 +123.139.39.117 - - [23/Feb/2026:18:59:41 +0800] "GET / HTTP/1.1" 200 177783 "http://101.43.95.130:5002/travel-planning" "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" 737257 +123.139.39.117 - - [23/Feb/2026:18:59:41 +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" 1352 +123.139.39.117 - - [23/Feb/2026:18:59:41 +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" 952 +123.139.39.117 - - [23/Feb/2026:18:59:49 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 144782 +123.139.39.117 - - [23/Feb/2026:18:59:49 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1031 +123.139.39.117 - - [23/Feb/2026:18:59:49 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 884 +123.139.39.117 - - [23/Feb/2026:18:59:52 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 279226 +123.139.39.117 - - [23/Feb/2026:18:59:52 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1607 +123.139.39.117 - - [23/Feb/2026:18:59:52 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 919 +123.139.39.117 - - [23/Feb/2026:18:59:59 +0800] "GET /meal-planning HTTP/1.1" 200 36604 "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" 290595 +123.139.39.117 - - [23/Feb/2026:18:59:59 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning" "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" 1010 +123.139.39.117 - - [23/Feb/2026:18:59:59 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning" "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" 1091 +123.139.39.117 - - [23/Feb/2026:19:00:01 +0800] "GET /meal-planning HTTP/1.1" 200 36604 "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" 143556 +123.139.39.117 - - [23/Feb/2026:19:00:01 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning" "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" 1381 +123.139.39.117 - - [23/Feb/2026:19:00:01 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning" "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" 1057 +123.139.39.117 - - [23/Feb/2026:19:01:17 +0800] "GET / HTTP/1.1" 200 177783 "http://101.43.95.130:5002/travel-planning" "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" 740373 +123.139.39.117 - - [23/Feb/2026:19:01:17 +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" 5500 +123.139.39.117 - - [23/Feb/2026:19:01:17 +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" 5987 +123.139.39.117 - - [23/Feb/2026:19:01:19 +0800] "GET /meal-planning HTTP/1.1" 200 36604 "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" 145425 +123.139.39.117 - - [23/Feb/2026:19:01:19 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning" "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" 1239 +123.139.39.117 - - [23/Feb/2026:19:01:19 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning" "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" 936 +123.139.39.117 - - [23/Feb/2026:19:01:24 +0800] "GET /meal-planning HTTP/1.1" 200 36604 "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" 138866 +123.139.39.117 - - [23/Feb/2026:19:01:24 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning" "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" 7306 +123.139.39.117 - - [23/Feb/2026:19:01:24 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning" "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" 1268 +123.139.39.117 - - [23/Feb/2026:19:01:26 +0800] "GET /travel-planning HTTP/1.1" 200 30026 "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" 512484 +123.139.39.117 - - [23/Feb/2026:19:01:26 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1388 +123.139.39.117 - - [23/Feb/2026:19:01:27 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 1073 +123.139.39.117 - - [23/Feb/2026:19:03:47 +0800] "GET /travel-planning HTTP/1.1" 200 30269 "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" 522284 +123.139.39.117 - - [23/Feb/2026:19:03:47 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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" 1776 +123.139.39.117 - - [23/Feb/2026:19:03:47 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 1119 +123.139.39.117 - - [23/Feb/2026:19:03:51 +0800] "GET /travel-planning/history HTTP/1.1" 200 26926 "http://101.43.95.130:5002/travel-planning" "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" 469061 +123.139.39.117 - - [23/Feb/2026:19:03:51 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning/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" 1045 +123.139.39.117 - - [23/Feb/2026:19:03:51 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning/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" 1486 +123.139.39.117 - - [23/Feb/2026:19:03:52 +0800] "GET /api/travel-planning/list?page=1&per_page=10 HTTP/1.1" 200 9115 "http://101.43.95.130:5002/travel-planning/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" 527969 +123.139.39.117 - - [23/Feb/2026:19:03:55 +0800] "GET / HTTP/1.1" 200 177783 "http://101.43.95.130:5002/travel-planning" "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" 389150 +123.139.39.117 - - [23/Feb/2026:19:03:55 +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" 1077 +123.139.39.117 - - [23/Feb/2026:19:03:55 +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" 896 +123.139.39.117 - - [23/Feb/2026:19:03:57 +0800] "GET /meal-planning HTTP/1.1" 200 36881 "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" 135345 +123.139.39.117 - - [23/Feb/2026:19:03:57 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning" "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" 1052 +123.139.39.117 - - [23/Feb/2026:19:03:57 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning" "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" 868 +123.139.39.117 - - [23/Feb/2026:19:03:58 +0800] "GET /meal-planning/history HTTP/1.1" 200 44347 "http://101.43.95.130:5002/meal-planning" "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" 143255 +123.139.39.117 - - [23/Feb/2026:19:03:59 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning/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" 989 +123.139.39.117 - - [23/Feb/2026:19:03:59 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning/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" 813 +123.139.39.117 - - [23/Feb/2026:19:03:59 +0800] "GET /api/meal-planning/list?page=1&per_page=10 HTTP/1.1" 200 17944 "http://101.43.95.130:5002/meal-planning/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" 144832 +123.139.39.117 - - [23/Feb/2026:19:04:01 +0800] "GET /meal-planning/history HTTP/1.1" 200 44347 "http://101.43.95.130:5002/meal-planning" "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" 141368 +123.139.39.117 - - [23/Feb/2026:19:04:01 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meal-planning/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" 1010 +123.139.39.117 - - [23/Feb/2026:19:04:01 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meal-planning/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" 831 +123.139.39.117 - - [23/Feb/2026:19:04:01 +0800] "GET /api/meal-planning/list?page=1&per_page=10 HTTP/1.1" 200 17944 "http://101.43.95.130:5002/meal-planning/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" 142081 +123.139.39.117 - - [23/Feb/2026:19:04:03 +0800] "GET / HTTP/1.1" 200 177783 "http://101.43.95.130:5002/meal-planning/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" 354772 +123.139.39.117 - - [23/Feb/2026:19:04:03 +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" 1060 +123.139.39.117 - - [23/Feb/2026:19:04:03 +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" 872 +123.139.39.117 - - [23/Feb/2026:19:04:06 +0800] "GET /weekly-report HTTP/1.1" 200 28285 "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" 139898 +123.139.39.117 - - [23/Feb/2026:19:04:06 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/weekly-report" "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" 1381 +123.139.39.117 - - [23/Feb/2026:19:04:06 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/weekly-report" "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" 897 +123.139.39.117 - - [23/Feb/2026:19:17:47 +0800] "GET /poetry/ HTTP/1.1" 200 51205 "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" 242195 +123.139.39.117 - - [23/Feb/2026:19:17:47 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/poetry/" "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" 1138 +123.139.39.117 - - [23/Feb/2026:19:17:48 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/poetry/" "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" 912 +123.139.39.117 - - [23/Feb/2026:19:17:57 +0800] "GET /poetry/favorites HTTP/1.1" 200 35154 "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" 254268 +123.139.39.117 - - [23/Feb/2026:19:17:57 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/poetry/favorites" "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" 949 +123.139.39.117 - - [23/Feb/2026:19:17:57 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/poetry/favorites" "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" 871 +123.139.39.117 - - [23/Feb/2026:19:17:58 +0800] "GET /poetry/favorites/list?page=1&per_page=10&search=&dynasty=&author= HTTP/1.1" 200 98 "http://101.43.95.130:5002/poetry/favorites" "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" 249975 +123.139.39.117 - - [23/Feb/2026:19:18:05 +0800] "GET /poetry/ HTTP/1.1" 200 51205 "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" 516963 +123.139.39.117 - - [23/Feb/2026:19:18:05 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/poetry/" "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" 1316 +123.139.39.117 - - [23/Feb/2026:19:18:05 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/poetry/" "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" 1100 +123.139.39.117 - - [23/Feb/2026:19:18:24 +0800] "GET /travel-planning HTTP/1.1" 200 30269 "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" 142811 +123.139.39.117 - - [23/Feb/2026:19:18:24 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/travel-planning" "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.39.117 - - [23/Feb/2026:19:18:24 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/travel-planning" "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" 860 +123.139.39.117 - - [23/Feb/2026:19:26:02 +0800] "GET / HTTP/1.1" 200 179329 "http://101.43.95.130:5002/meal-planning/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" 739884 +123.139.39.117 - - [23/Feb/2026:19:26:03 +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" 5525 +123.139.39.117 - - [23/Feb/2026:19:26:03 +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" 5061 +123.139.39.117 - - [23/Feb/2026:19:26:13 +0800] "GET /resume-optimization HTTP/1.1" 200 28991 "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" 481165 +123.139.39.117 - - [23/Feb/2026:19:26:13 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/resume-optimization" "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" 5406 +123.139.39.117 - - [23/Feb/2026:19:26:13 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/resume-optimization" "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" 1056 +123.139.39.117 - - [23/Feb/2026:19:26:38 +0800] "GET / HTTP/1.1" 200 179329 "http://101.43.95.130:5002/resume-optimization" "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" 642833 +123.139.39.117 - - [23/Feb/2026:19:26:38 +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" 5561 +123.139.39.117 - - [23/Feb/2026:19:26:38 +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" 1024 +123.139.39.117 - - [23/Feb/2026:19:26:41 +0800] "GET /meeting-minutes HTTP/1.1" 200 28116 "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" 136963 +123.139.39.117 - - [23/Feb/2026:19:26:41 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/meeting-minutes" "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" 1234 +123.139.39.117 - - [23/Feb/2026:19:26:41 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/meeting-minutes" "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" 1205 +123.139.39.117 - - [23/Feb/2026:19:26:48 +0800] "GET / HTTP/1.1" 200 179329 "http://101.43.95.130:5002/meeting-minutes" "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" 307461 +123.139.39.117 - - [23/Feb/2026:19:26:48 +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" 974 +123.139.39.117 - - [23/Feb/2026:19:26:48 +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" 886 +123.139.39.117 - - [23/Feb/2026:19:34:10 +0800] "GET / HTTP/1.1" 200 179329 "http://101.43.95.130:5002/meeting-minutes" "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" 502809 +123.139.39.117 - - [23/Feb/2026:19:34:10 +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" 1016 +123.139.39.117 - - [23/Feb/2026:19:34:10 +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" 916 +123.139.39.117 - - [23/Feb/2026:19:34:47 +0800] "GET / HTTP/1.1" 200 184318 "http://101.43.95.130:5002/meeting-minutes" "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" 3034106 +123.139.39.117 - - [23/Feb/2026:19:34:47 +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" 5569 +123.139.39.117 - - [23/Feb/2026:19:34:47 +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" 5405 +123.139.39.117 - - [23/Feb/2026:19:34:55 +0800] "GET /app/interview HTTP/1.1" 200 21296 "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" 92782 +123.139.39.117 - - [23/Feb/2026:19:34:55 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/app/interview" "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" 5735 +123.139.39.117 - - [23/Feb/2026:19:34:55 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/app/interview" "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" 1403 +123.139.39.117 - - [23/Feb/2026:19:35:02 +0800] "GET / HTTP/1.1" 200 184318 "http://101.43.95.130:5002/app/interview" "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" 923721 +123.139.39.117 - - [23/Feb/2026:19:35:02 +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" 1622 +123.139.39.117 - - [23/Feb/2026:19:35:02 +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" 837 +123.139.39.117 - - [23/Feb/2026:19:43:15 +0800] "GET / HTTP/1.1" 200 184318 "http://101.43.95.130:5002/app/interview" "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" 663333 +123.139.39.117 - - [23/Feb/2026:19:43:15 +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" 1017 +123.139.39.117 - - [23/Feb/2026:19:43:15 +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" 910 +123.139.39.117 - - [23/Feb/2026:19:51:18 +0800] "GET /api/templates/%E4%BA%A7%E5%93%81%E7%AE%A1%E7%90%86 HTTP/1.1" 200 9044 "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" 258851 +123.139.39.117 - - [23/Feb/2026:19:54:21 +0800] "GET / HTTP/1.1" 200 210711 "http://101.43.95.130:5002/app/interview" "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" 1057637 +123.139.39.117 - - [23/Feb/2026:19:54:21 +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" 5638 +123.139.39.117 - - [23/Feb/2026:19:54:21 +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" 5299 +123.139.39.117 - - [23/Feb/2026:20:02:09 +0800] "GET / HTTP/1.1" 500 420 "http://101.43.95.130:5002/app/interview" "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" 725356 +123.139.39.117 - - [23/Feb/2026:20:02:12 +0800] "GET / HTTP/1.1" 500 420 "http://101.43.95.130:5002/app/interview" "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" 739090 +123.139.39.117 - - [23/Feb/2026:20:05:54 +0800] "GET / HTTP/1.1" 200 211283 "-" "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" 1056623 +123.139.39.117 - - [23/Feb/2026:20:05:54 +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" 5747 +123.139.39.117 - - [23/Feb/2026:20:05:54 +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" 7003 +123.139.39.117 - - [23/Feb/2026:20:06:10 +0800] "GET /prompt-optimization HTTP/1.1" 200 26156 "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" 490155 +123.139.39.117 - - [23/Feb/2026:20:06:10 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/prompt-optimization" "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" 5876 +123.139.39.117 - - [23/Feb/2026:20:06:10 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/prompt-optimization" "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.39.117 - - [23/Feb/2026:20:06:48 +0800] "POST /api/prompt-optimization/generate HTTP/1.1" 200 4450 "http://101.43.95.130:5002/prompt-optimization" "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" 12386989 +123.139.39.117 - - [23/Feb/2026:20:06:58 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/prompt-optimization" "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" 551055 +123.139.39.117 - - [23/Feb/2026:20:06:58 +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" 2148 +123.139.39.117 - - [23/Feb/2026:20:06: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" 881 +123.139.39.117 - - [23/Feb/2026:20:08:07 +0800] "GET /prompt-optimization HTTP/1.1" 200 26156 "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" 112681 +123.139.39.117 - - [23/Feb/2026:20:08:07 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/prompt-optimization" "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" 1519 +123.139.39.117 - - [23/Feb/2026:20:08:07 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/prompt-optimization" "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" 1075 +123.139.39.117 - - [23/Feb/2026:20:08:25 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 141992 +123.139.39.117 - - [23/Feb/2026:20:08:25 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1000 +123.139.39.117 - - [23/Feb/2026:20:08:25 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 869 +123.139.39.117 - - [23/Feb/2026:20:08:38 +0800] "GET / HTTP/1.1" 200 211283 "http://101.43.95.130:5002/expert_generate" "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" 1103567 +123.139.39.117 - - [23/Feb/2026:20:08:38 +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" 1198 +123.139.39.117 - - [23/Feb/2026:20:08:38 +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" 892 +123.139.39.117 - - [23/Feb/2026:20:12:14 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 278563 +123.139.39.117 - - [23/Feb/2026:20:12:14 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1538 +123.139.39.117 - - [23/Feb/2026:20:12:15 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 948 +123.139.39.117 - - [23/Feb/2026:20:21:07 +0800] "GET / HTTP/1.1" 500 420 "http://101.43.95.130:5002/expert_generate" "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" 772211 +123.139.39.117 - - [23/Feb/2026:20:24:06 +0800] "GET / HTTP/1.1" 200 211866 "-" "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" 959005 +123.139.39.117 - - [23/Feb/2026:20:24:06 +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" 5919 +123.139.39.117 - - [23/Feb/2026:20:24:06 +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" 1231 +123.139.39.117 - - [23/Feb/2026:20:24:14 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 27463 "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" 136830 +123.139.39.117 - - [23/Feb/2026:20:24:14 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5901 +123.139.39.117 - - [23/Feb/2026:20:24:14 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5374 +123.139.39.117 - - [23/Feb/2026:20:26:08 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 525191 +123.139.39.117 - - [23/Feb/2026:20:26:08 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1797 +123.139.39.117 - - [23/Feb/2026:20:26:08 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 930 +123.139.39.117 - - [23/Feb/2026:20:27:29 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 8076 "http://101.43.95.130:5002/expert_generate" "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" 27354257 +123.139.39.117 - - [23/Feb/2026:20:27:30 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 8289 "http://101.43.95.130:5002/expert_generate" "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" 28090549 +123.139.39.117 - - [23/Feb/2026:20:29:52 +0800] "GET / HTTP/1.1" 200 211866 "-" "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" 743861 +123.139.39.117 - - [23/Feb/2026:20:29:52 +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" 1122 +123.139.39.117 - - [23/Feb/2026:20:29:53 +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" 864 +123.139.39.117 - - [23/Feb/2026:20:44:00 +0800] "GET / HTTP/1.1" 200 211866 "-" "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" 1013603 +123.139.39.117 - - [23/Feb/2026:20:44:00 +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" 8752 +123.139.39.117 - - [23/Feb/2026:20:44:00 +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" 1203 +123.139.39.117 - - [23/Feb/2026:20:44:04 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31551 "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" 460219 +123.139.39.117 - - [23/Feb/2026:20:44:05 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5851 +123.139.39.117 - - [23/Feb/2026:20:44:05 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5908 +123.139.39.117 - - [23/Feb/2026:20:44:11 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 922834 +123.139.39.117 - - [23/Feb/2026:20:44:11 +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" 1418 +123.139.39.117 - - [23/Feb/2026:20:44:12 +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" 925 +123.139.39.117 - - [23/Feb/2026:20:44:14 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31551 "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" 125857 +123.139.39.117 - - [23/Feb/2026:20:44:14 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 989 +123.139.39.117 - - [23/Feb/2026:20:44:14 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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.39.117 - - [23/Feb/2026:20:45:45 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 2173 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 17580700 +123.139.39.117 - - [23/Feb/2026:20:46:03 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8280 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 35026880 +123.139.39.117 - - [23/Feb/2026:21:05:54 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/expert_generate" "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" 993793 +123.139.39.117 - - [23/Feb/2026:21:05:54 +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" 1417 +123.139.39.117 - - [23/Feb/2026:21:05:54 +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" 1214 +123.139.39.117 - - [23/Feb/2026:21:05:55 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31551 "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" 277728 +123.139.39.117 - - [23/Feb/2026:21:05:55 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1059 +123.139.39.117 - - [23/Feb/2026:21:05:56 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5363 +123.139.39.117 - - [23/Feb/2026:21:05:57 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 304162 +123.139.39.117 - - [23/Feb/2026:21:05: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" 1015 +123.139.39.117 - - [23/Feb/2026:21:05:57 +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" 1013 +123.139.39.117 - - [23/Feb/2026:22:08:48 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 771006 +123.139.39.117 - - [23/Feb/2026:22:08:49 +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" 1597 +123.139.39.117 - - [23/Feb/2026:22:08:49 +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" 902 +123.139.39.117 - - [23/Feb/2026:22:39:18 +0800] "GET /api/templates/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96 HTTP/1.1" 200 1653 "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" 461801 +123.139.39.117 - - [23/Feb/2026:22:39:31 +0800] "GET /api/templates/%E5%95%86%E4%B8%9A%E8%90%A5%E9%94%80 HTTP/1.1" 200 2681 "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" 110496 +123.139.39.117 - - [23/Feb/2026:22:39:49 +0800] "GET /api/templates/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91 HTTP/1.1" 200 18538 "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" 110150 +123.139.39.117 - - [24/Feb/2026:23:29:28 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 769833 +123.139.39.117 - - [24/Feb/2026:23:29:28 +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" 5770 +123.139.39.117 - - [24/Feb/2026:23:29:29 +0800] "GET /api/check-login HTTP/1.1" 200 35 "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" 1387 +123.139.39.117 - - [24/Feb/2026:23:29:35 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 520933 +123.139.39.117 - - [24/Feb/2026:23:29:35 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1427 +123.139.39.117 - - [24/Feb/2026:23:29:35 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 848 +123.139.39.117 - - [24/Feb/2026:23:29:40 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 144969 +123.139.39.117 - - [24/Feb/2026:23:29:40 +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" 1163 +123.139.39.117 - - [24/Feb/2026:23:29:40 +0800] "GET /api/check-login HTTP/1.1" 200 35 "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" 5033 +123.139.39.117 - - [24/Feb/2026:23:29:46 +0800] "GET /login HTTP/1.1" 200 24095 "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" 505881 +123.139.39.117 - - [24/Feb/2026:23:29:46 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/login" "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" 5863 +123.139.39.117 - - [24/Feb/2026:23:29:46 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/login" "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" 831 +123.139.39.117 - - [24/Feb/2026:23:29:50 +0800] "POST /api/login HTTP/1.1" 200 182 "http://101.43.95.130:5002/login" "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" 253143 +123.139.39.117 - - [24/Feb/2026:23:29:52 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/login" "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" 505955 +123.139.39.117 - - [24/Feb/2026:23:29:53 +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" 5992 +123.139.39.117 - - [24/Feb/2026:23:29:53 +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" 898 +123.139.39.117 - - [24/Feb/2026:23:29:55 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 149888 +123.139.39.117 - - [24/Feb/2026:23:29:55 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1546 +123.139.39.117 - - [24/Feb/2026:23:29:55 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1377 +123.139.39.117 - - [24/Feb/2026:23:32:10 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8717 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 36572672 +123.139.39.117 - - [24/Feb/2026:23:32:12 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8359 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 39171734 +123.139.39.117 - - [24/Feb/2026:23:32:32 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 144203 +123.139.39.117 - - [24/Feb/2026:23:32:32 +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" 1070 +123.139.39.117 - - [24/Feb/2026:23:32:32 +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" 1073 +123.139.39.117 - - [24/Feb/2026:23:33:56 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 524109 +123.139.39.117 - - [24/Feb/2026:23:33: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" 1304 +123.139.39.117 - - [24/Feb/2026:23:33:57 +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" 1422 +123.139.39.117 - - [24/Feb/2026:23:34:00 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 134993 +123.139.39.117 - - [24/Feb/2026:23:34:00 +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" 1063 +123.139.39.117 - - [24/Feb/2026:23:34:00 +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" 1157 +100.26.147.67 - - [24/Feb/2026:23:35:31 +0800] "HEAD /smart-prompt-optimization HTTP/1.1" 200 0 "-" "got (https://github.com/sindresorhus/got)" 967 +100.26.147.67 - - [24/Feb/2026:23:35:32 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 486219 +100.26.147.67 - - [24/Feb/2026:23:35:32 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 228921 +123.139.39.117 - - [24/Feb/2026:23:37:23 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 261759 +123.139.39.117 - - [24/Feb/2026:23:37:23 +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" 1047 +123.139.39.117 - - [24/Feb/2026:23:37:23 +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" 1148 +123.139.39.117 - - [24/Feb/2026:23:37:32 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 133194 +123.139.39.117 - - [24/Feb/2026:23:37:32 +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" 971 +123.139.39.117 - - [24/Feb/2026:23:37:32 +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" 874 +123.139.39.117 - - [24/Feb/2026:23:38:13 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 462533 +123.139.39.117 - - [24/Feb/2026:23:38:14 +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" 5771 +123.139.39.117 - - [24/Feb/2026:23:38:14 +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" 5367 +123.139.39.117 - - [24/Feb/2026:23:38:17 +0800] "GET / HTTP/1.1" 200 211866 "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" 889853 +123.139.39.117 - - [24/Feb/2026:23:38:18 +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" 1308 +123.139.39.117 - - [24/Feb/2026:23:38:18 +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" 5538 +123.139.39.117 - - [24/Feb/2026:23:38:32 +0800] "GET / HTTP/1.1" 200 211866 "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" 914628 +123.139.39.117 - - [24/Feb/2026:23:38:32 +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" 6186 +123.139.39.117 - - [24/Feb/2026:23:38:32 +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" 901 +123.139.39.117 - - [24/Feb/2026:23:38:36 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 149572 +123.139.39.117 - - [24/Feb/2026:23:38:36 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1618 +123.139.39.117 - - [24/Feb/2026:23:38:36 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 921 +123.139.39.117 - - [24/Feb/2026:23:39:23 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 9203 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 36927405 +123.139.39.117 - - [24/Feb/2026:23:39:24 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 9208 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 38576519 +123.139.39.117 - - [24/Feb/2026:23:39:41 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 127745 +123.139.39.117 - - [24/Feb/2026:23:39:41 +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" 1234 +123.139.39.117 - - [24/Feb/2026:23:39:41 +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" 847 +123.139.39.117 - - [24/Feb/2026:23:40:10 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 141473 +123.139.39.117 - - [24/Feb/2026:23:40:10 +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" 1013 +123.139.39.117 - - [24/Feb/2026:23:40:10 +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" 809 +98.81.67.150 - - [24/Feb/2026:23:40:22 +0800] "HEAD /history HTTP/1.1" 200 0 "-" "got (https://github.com/sindresorhus/got)" 23076 +98.81.67.150 - - [24/Feb/2026:23:40:23 +0800] "GET /history HTTP/1.1" 200 39140 "-" "got (https://github.com/sindresorhus/got)" 229338 +98.81.67.150 - - [24/Feb/2026:23:40:24 +0800] "GET /history HTTP/1.1" 200 39140 "-" "got (https://github.com/sindresorhus/got)" 226389 +123.139.39.117 - - [24/Feb/2026:23:43:29 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 143985 +123.139.39.117 - - [24/Feb/2026:23:43:29 +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" 1310 +123.139.39.117 - - [24/Feb/2026:23:43:29 +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" 850 +123.139.39.117 - - [24/Feb/2026:23:43:31 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 285612 +123.139.39.117 - - [24/Feb/2026:23:43: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" 987 +123.139.39.117 - - [24/Feb/2026:23:43: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" 928 +123.139.39.117 - - [24/Feb/2026:23:44:29 +0800] "GET /history HTTP/1.1" 200 39140 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 276726 +123.139.39.117 - - [24/Feb/2026:23:45:23 +0800] "GET / HTTP/1.1" 200 211866 "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" 915093 +123.139.39.117 - - [24/Feb/2026:23:45:23 +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" 5851 +123.139.39.117 - - [24/Feb/2026:23:45:23 +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" 1511 +123.139.39.117 - - [24/Feb/2026:23:45:26 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 514290 +123.139.39.117 - - [24/Feb/2026:23:45:26 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5850 +123.139.39.117 - - [24/Feb/2026:23:45:26 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1424 +123.139.39.117 - - [24/Feb/2026:23:46:21 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8557 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 38727381 +123.139.39.117 - - [24/Feb/2026:23:46:22 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8576 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 39104248 +123.139.39.117 - - [24/Feb/2026:23:46:32 +0800] "GET /history HTTP/1.1" 200 39448 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 152149 +123.139.39.117 - - [24/Feb/2026:23:46:32 +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" 1421 +123.139.39.117 - - [24/Feb/2026:23:46:33 +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" 6787 +123.139.39.117 - - [24/Feb/2026:23:46:33 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 87725 "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" 580354 +123.139.39.117 - - [24/Feb/2026:23:47:12 +0800] "GET / HTTP/1.1" 200 211866 "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" 793782 +123.139.39.117 - - [24/Feb/2026:23:47:12 +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" 1232 +123.139.39.117 - - [24/Feb/2026:23:47:12 +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" 949 +123.139.39.117 - - [24/Feb/2026:23:48:11 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 140851 +123.139.39.117 - - [24/Feb/2026:23:48:11 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1334 +123.139.39.117 - - [24/Feb/2026:23:48:11 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 972 +123.139.39.117 - - [24/Feb/2026:23:48:13 +0800] "GET /history HTTP/1.1" 200 39448 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 144891 +123.139.39.117 - - [24/Feb/2026:23:48:13 +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" 1013 +123.139.39.117 - - [24/Feb/2026:23:48:13 +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" 865 +123.139.39.117 - - [24/Feb/2026:23:48:13 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 87725 "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" 284900 +123.139.39.117 - - [24/Feb/2026:23:49:52 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 2825 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 18315631 +123.139.39.117 - - [24/Feb/2026:23:50:10 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 6807 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 36353637 +123.139.39.117 - - [24/Feb/2026:23:52:31 +0800] "GET /history HTTP/1.1" 200 39448 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 309768 +123.139.39.117 - - [24/Feb/2026:23:52: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" 1088 +123.139.39.117 - - [24/Feb/2026:23:52: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" 894 +123.139.39.117 - - [24/Feb/2026:23:52:32 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 96551 "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" 423914 +123.139.39.117 - - [24/Feb/2026:23:54:25 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 2933 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 17865811 +123.139.39.117 - - [24/Feb/2026:23:54:34 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 6125 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 26721380 +123.139.39.117 - - [24/Feb/2026:23:55:39 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 598378 +123.139.39.117 - - [24/Feb/2026:23:55:39 +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" 1445 +123.139.39.117 - - [24/Feb/2026:23:55:39 +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" 860 +123.139.39.117 - - [24/Feb/2026:23:56:20 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 122441 +123.139.39.117 - - [24/Feb/2026:23:56:20 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1204 +123.139.39.117 - - [24/Feb/2026:23:56:20 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 856 +123.139.39.117 - - [24/Feb/2026:23:56:23 +0800] "GET /history HTTP/1.1" 200 39448 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 131185 +123.139.39.117 - - [24/Feb/2026:23:56:23 +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" 955 +123.139.39.117 - - [24/Feb/2026:23:56:23 +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" 880 +123.139.39.117 - - [24/Feb/2026:23:56:24 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 104516 "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" 413432 +123.139.39.117 - - [24/Feb/2026:23:56:52 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 383090 +123.139.39.117 - - [24/Feb/2026:23:56:52 +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" 1003 +123.139.39.117 - - [24/Feb/2026:23:56:52 +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" 849 +123.139.39.117 - - [24/Feb/2026:23:59:49 +0800] "GET /weekly-report HTTP/1.1" 200 28285 "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" 135206 +123.139.39.117 - - [24/Feb/2026:23:59:49 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/weekly-report" "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" 1267 +123.139.39.117 - - [24/Feb/2026:23:59:50 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/weekly-report" "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" 795 +123.139.39.117 - - [24/Feb/2026:23:59:53 +0800] "GET /weekly-report/history HTTP/1.1" 200 26582 "http://101.43.95.130:5002/weekly-report" "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" 252969 +123.139.39.117 - - [24/Feb/2026:23:59:53 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/weekly-report/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" 969 +123.139.39.117 - - [24/Feb/2026:23:59:53 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/weekly-report/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" 1011 +123.139.39.117 - - [24/Feb/2026:23:59:53 +0800] "GET /api/weekly-report/list?page=1&per_page=10 HTTP/1.1" 200 129 "http://101.43.95.130:5002/weekly-report/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" 268819 +123.139.39.117 - - [24/Feb/2026:23:59:57 +0800] "GET / HTTP/1.1" 200 211866 "http://101.43.95.130:5002/weekly-report" "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" 408568 +123.139.39.117 - - [24/Feb/2026:23:59:57 +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" 1339 +123.139.39.117 - - [24/Feb/2026:23:59:58 +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" 833 +123.139.39.117 - - [25/Feb/2026:00:33:04 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/weekly-report" "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" 806484 +123.139.39.117 - - [25/Feb/2026:00:33:04 +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" 8984 +123.139.39.117 - - [25/Feb/2026:00:33:04 +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" 5657 +123.139.39.117 - - [25/Feb/2026:00:33:17 +0800] "GET /android/crash-log HTTP/1.1" 200 25957 "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" 461146 +123.139.39.117 - - [25/Feb/2026:00:33:17 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/android/crash-log" "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" 1555 +123.139.39.117 - - [25/Feb/2026:00:33:17 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/android/crash-log" "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" 1536 +123.139.39.117 - - [25/Feb/2026:00:33:51 +0800] "GET /android/perf-optimize HTTP/1.1" 200 25913 "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" 465601 +123.139.39.117 - - [25/Feb/2026:00:33:51 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/android/perf-optimize" "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" 1035 +123.139.39.117 - - [25/Feb/2026:00:33:52 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/android/perf-optimize" "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" 892 +123.139.39.117 - - [25/Feb/2026:00:34:03 +0800] "GET /android/tech-review HTTP/1.1" 200 25944 "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" 105319 +123.139.39.117 - - [25/Feb/2026:00:34:04 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/android/tech-review" "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" 1426 +123.139.39.117 - - [25/Feb/2026:00:34:04 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/android/tech-review" "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" 5389 +123.139.39.117 - - [25/Feb/2026:00:34:25 +0800] "GET /android/code-review HTTP/1.1" 200 26050 "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" 106759 +123.139.39.117 - - [25/Feb/2026:00:34:25 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/android/code-review" "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" 2273 +123.139.39.117 - - [25/Feb/2026:00:34:25 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/android/code-review" "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" 885 +123.139.39.117 - - [25/Feb/2026:00:34:44 +0800] "GET /android/perf-optimize HTTP/1.1" 200 25913 "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" 483353 +123.139.39.117 - - [25/Feb/2026:00:34:44 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/android/perf-optimize" "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" 1208 +123.139.39.117 - - [25/Feb/2026:00:34:44 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/android/perf-optimize" "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" 825 +123.139.39.117 - - [25/Feb/2026:00:35:09 +0800] "GET /app/tech-blog HTTP/1.1" 200 21240 "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" 110806 +123.139.39.117 - - [25/Feb/2026:00:35:09 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/app/tech-blog" "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" 994 +123.139.39.117 - - [25/Feb/2026:00:35:09 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/app/tech-blog" "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" 5521 +123.139.39.117 - - [25/Feb/2026:00:35:16 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/app/tech-blog" "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" 732375 +123.139.39.117 - - [25/Feb/2026:00:35:16 +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" 1626 +123.139.39.117 - - [25/Feb/2026:00:35:17 +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" 949 +123.139.39.117 - - [25/Feb/2026:00:43:57 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 290831 +123.139.39.117 - - [25/Feb/2026:00:43:57 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1645 +123.139.39.117 - - [25/Feb/2026:00:43:57 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 846 +123.139.39.117 - - [25/Feb/2026:00:44:00 +0800] "GET /history HTTP/1.1" 200 39887 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 262835 +123.139.39.117 - - [25/Feb/2026:00:44:00 +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" 1016 +123.139.39.117 - - [25/Feb/2026:00:44:00 +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" 914 +123.139.39.117 - - [25/Feb/2026:00:44:01 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 104516 "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" 303355 +123.139.39.117 - - [25/Feb/2026:00:46:37 +0800] "GET / HTTP/1.1" 200 215132 "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" 344862 +123.139.39.117 - - [25/Feb/2026:00:46:37 +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" 1038 +123.139.39.117 - - [25/Feb/2026:00:46:38 +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" 1133 +123.139.39.117 - - [25/Feb/2026:00:46:40 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 287493 +123.139.39.117 - - [25/Feb/2026:00:46:40 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1037 +123.139.39.117 - - [25/Feb/2026:00:46:40 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 851 +123.139.39.117 - - [25/Feb/2026:00:47:21 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 7043 "http://101.43.95.130:5002/expert_generate" "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" 24198595 +123.139.39.117 - - [25/Feb/2026:00:47:35 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 12401 "http://101.43.95.130:5002/expert_generate" "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" 37625951 +123.139.39.117 - - [25/Feb/2026:00:47:54 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/expert_generate" "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" 397284 +123.139.39.117 - - [25/Feb/2026:00:47:54 +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" 1045 +123.139.39.117 - - [25/Feb/2026:00:47:54 +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" 880 +123.139.39.117 - - [25/Feb/2026:00:47:58 +0800] "GET /history HTTP/1.1" 200 39887 "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" 141478 +123.139.39.117 - - [25/Feb/2026:00:47:59 +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" 1252 +123.139.39.117 - - [25/Feb/2026:00:47:59 +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" 1086 +123.139.39.117 - - [25/Feb/2026:00:47:59 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 104516 "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" 411413 +123.139.39.117 - - [25/Feb/2026:00:48:24 +0800] "GET / HTTP/1.1" 200 215132 "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" 440874 +123.139.39.117 - - [25/Feb/2026:00:48:24 +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" 959 +123.139.39.117 - - [25/Feb/2026:00:48:24 +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" 1137 +123.139.39.117 - - [25/Feb/2026:00:48:47 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 139914 +123.139.39.117 - - [25/Feb/2026:00:48:47 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1336 +123.139.39.117 - - [25/Feb/2026:00:48:47 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 814 +123.139.39.117 - - [25/Feb/2026:00:49:03 +0800] "GET /history HTTP/1.1" 200 39887 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 150736 +123.139.39.117 - - [25/Feb/2026:00:49:03 +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" 1136 +123.139.39.117 - - [25/Feb/2026:00:49:03 +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" 885 +123.139.39.117 - - [25/Feb/2026:00:49:03 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 104516 "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" 280968 +123.139.39.117 - - [25/Feb/2026:00:50:36 +0800] "GET / HTTP/1.1" 200 215132 "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" 405719 +123.139.39.117 - - [25/Feb/2026:00:50:36 +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" 939 +123.139.39.117 - - [25/Feb/2026:00:50:37 +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" 1067 +162.142.125.192 - - [25/Feb/2026:02:18:49 +0800] "GET / HTTP/1.1" 200 215132 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 4715915 +162.142.125.192 - - [25/Feb/2026:02:18:56 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 761 +162.142.125.192 - - [25/Feb/2026:02:18:58 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 691 +162.142.125.192 - - [25/Feb/2026:02:19:23 +0800] "GET /login HTTP/1.1" 200 24095 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 3333 +162.142.125.192 - - [25/Feb/2026:02:19:24 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 756 +162.142.125.192 - - [25/Feb/2026:02:19:41 +0800] "GET /_bnn7cai83l5c03lf HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 959 +47.92.244.14 - - [25/Feb/2026:03:43:37 +0800] "GET / HTTP/1.1" 200 215132 "-" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" 407252 +47.92.244.14 - - [25/Feb/2026:03:43:37 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" 1041 +207.46.13.230 - - [25/Feb/2026:04:15:17 +0800] "GET /robots.txt HTTP/1.1" 404 207 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" 730 +52.167.144.173 - - [25/Feb/2026:04:15:24 +0800] "GET /meal-planning HTTP/1.1" 200 36881 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" 264000 +123.139.41.55 - - [25/Feb/2026:20:48:58 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 490548 +123.139.41.55 - - [25/Feb/2026:20:48:59 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 7381 +123.139.41.55 - - [25/Feb/2026:20:48:59 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 1243 +123.139.41.55 - - [25/Feb/2026:20:51:51 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/expert_generate" "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" 821432 +123.139.41.55 - - [25/Feb/2026:20:51:51 +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" 1479 +123.139.41.55 - - [25/Feb/2026:20:51:52 +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" 1281 +123.139.41.55 - - [25/Feb/2026:20:51:55 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 134914 +123.139.41.55 - - [25/Feb/2026:20:51:55 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1220 +123.139.41.55 - - [25/Feb/2026:20:51:55 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1392 +123.139.41.55 - - [25/Feb/2026:20:51:57 +0800] "GET /history HTTP/1.1" 200 39887 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 141849 +123.139.41.55 - - [25/Feb/2026:20:51: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" 1406 +123.139.41.55 - - [25/Feb/2026:20:51:57 +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" 1191 +123.139.41.55 - - [25/Feb/2026:20:51:57 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 104516 "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" 271414 +123.139.41.55 - - [25/Feb/2026:20:57:52 +0800] "GET / HTTP/1.1" 200 215132 "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" 838307 +123.139.41.55 - - [25/Feb/2026:20:57:52 +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" 1426 +123.139.41.55 - - [25/Feb/2026:20:57:53 +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" 897 +123.139.41.55 - - [25/Feb/2026:20:57:54 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 246727 +123.139.41.55 - - [25/Feb/2026:20:57:54 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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.41.55 - - [25/Feb/2026:20:57:54 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1182 +123.139.41.55 - - [25/Feb/2026:20:58:24 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 4142 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 22868991 +123.139.41.55 - - [25/Feb/2026:20:58:38 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 7584 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 37060031 +123.139.41.55 - - [25/Feb/2026:20:59:22 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 755074 +123.139.41.55 - - [25/Feb/2026:20:59:22 +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" 1586 +123.139.41.55 - - [25/Feb/2026:20:59:22 +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" 870 +123.139.41.55 - - [25/Feb/2026:20:59:23 +0800] "GET /poetry/ HTTP/1.1" 200 51205 "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" 134819 +123.139.41.55 - - [25/Feb/2026:20:59:23 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/poetry/" "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" 1061 +123.139.41.55 - - [25/Feb/2026:20:59:23 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/poetry/" "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" 822 +123.139.41.55 - - [25/Feb/2026:20:59:25 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/poetry/" "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" 344903 +123.139.41.55 - - [25/Feb/2026:20:59:25 +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" 961 +123.139.41.55 - - [25/Feb/2026:20:59:25 +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" 1119 +123.139.41.55 - - [25/Feb/2026:20:59:26 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 135424 +123.139.41.55 - - [25/Feb/2026:20:59:26 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 962 +123.139.41.55 - - [25/Feb/2026:20:59:26 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 1152 +123.139.41.55 - - [25/Feb/2026:20:59:57 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 8401 "http://101.43.95.130:5002/expert_generate" "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" 29326182 +123.139.41.55 - - [25/Feb/2026:21:00:02 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 10057 "http://101.43.95.130:5002/expert_generate" "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" 34207059 +123.139.41.55 - - [25/Feb/2026:21:01:16 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/expert_generate" "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" 396832 +123.139.41.55 - - [25/Feb/2026:21:01:17 +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" 974 +123.139.41.55 - - [25/Feb/2026:21:01:17 +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" 875 +123.139.41.55 - - [25/Feb/2026:21:01:19 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 136755 +123.139.41.55 - - [25/Feb/2026:21:01:19 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1584 +123.139.41.55 - - [25/Feb/2026:21:01:19 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 894 +123.139.41.55 - - [25/Feb/2026:21:01:21 +0800] "GET /history HTTP/1.1" 200 39887 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 137706 +123.139.41.55 - - [25/Feb/2026:21:01:21 +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" 1040 +123.139.41.55 - - [25/Feb/2026:21:01:21 +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" 1125 +123.139.41.55 - - [25/Feb/2026:21:01:22 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 115704 "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" 274686 +123.139.41.55 - - [25/Feb/2026:21:05:06 +0800] "GET / HTTP/1.1" 200 215132 "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" 506549 +123.139.41.55 - - [25/Feb/2026:21:05:06 +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" 1403 +123.139.41.55 - - [25/Feb/2026:21:05:06 +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" 870 +123.139.41.55 - - [25/Feb/2026:21:05:09 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 277200 +123.139.41.55 - - [25/Feb/2026:21:05:09 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 928 +123.139.41.55 - - [25/Feb/2026:21:05:09 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 840 +54.208.119.170 - - [25/Feb/2026:21:05:51 +0800] "HEAD /smart-prompt-optimization HTTP/1.1" 200 0 "-" "got (https://github.com/sindresorhus/got)" 986 +54.208.119.170 - - [25/Feb/2026:21:05:52 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 217762 +54.208.119.170 - - [25/Feb/2026:21:05:53 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 220370 +123.139.41.55 - - [25/Feb/2026:21:10:37 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 621744 +123.139.41.55 - - [25/Feb/2026:21:10:37 +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" 1158 +123.139.41.55 - - [25/Feb/2026:21:10:38 +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" 824 +123.139.41.55 - - [25/Feb/2026:21:13:11 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 281893 +123.139.41.55 - - [25/Feb/2026:21:13:11 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1036 +123.139.41.55 - - [25/Feb/2026:21:13:11 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 961 +13.219.248.239 - - [25/Feb/2026:21:14:14 +0800] "HEAD /smart-prompt-optimization HTTP/1.1" 200 0 "-" "got (https://github.com/sindresorhus/got)" 5014 +13.219.248.239 - - [25/Feb/2026:21:14:14 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 201223 +13.219.248.239 - - [25/Feb/2026:21:14:15 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "-" "got (https://github.com/sindresorhus/got)" 447494 +123.139.41.55 - - [25/Feb/2026:21:16:44 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 549565 +123.139.41.55 - - [25/Feb/2026:21:16:44 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 6080 +123.139.41.55 - - [25/Feb/2026:21:16:44 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 5684 +123.139.41.55 - - [25/Feb/2026:21:16:46 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 842960 +123.139.41.55 - - [25/Feb/2026:21:16:46 +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" 5801 +123.139.41.55 - - [25/Feb/2026:21:16:46 +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" 1134 +123.139.41.55 - - [25/Feb/2026:21:16:55 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 146750 +123.139.41.55 - - [25/Feb/2026:21:16:55 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1247 +123.139.41.55 - - [25/Feb/2026:21:16:55 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1226 +123.139.41.55 - - [25/Feb/2026:21:17:36 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8590 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 27308923 +123.139.41.55 - - [25/Feb/2026:21:17:37 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 8448 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 28083391 +123.139.41.55 - - [25/Feb/2026:21:22:39 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 804358 +123.139.41.55 - - [25/Feb/2026:21:22:39 +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" 6076 +123.139.41.55 - - [25/Feb/2026:21:22:39 +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" 1742 +123.139.41.55 - - [25/Feb/2026:21:22:43 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 453564 +123.139.41.55 - - [25/Feb/2026:21:22:43 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 6013 +123.139.41.55 - - [25/Feb/2026:21:22:43 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1336 +123.139.41.55 - - [25/Feb/2026:21:22:59 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 1052 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 13897826 +123.139.41.55 - - [25/Feb/2026:21:23:04 +0800] "POST /api/smart-prompt-optimization/generate HTTP/1.1" 200 3133 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 18771021 +123.139.41.55 - - [25/Feb/2026:21:24:15 +0800] "GET /history HTTP/1.1" 200 39887 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 128983 +123.139.41.55 - - [25/Feb/2026:21:24:15 +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" 1649 +123.139.41.55 - - [25/Feb/2026:21:24:15 +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" 1182 +123.139.41.55 - - [25/Feb/2026:21:24:15 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 135935 "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" 276265 +123.139.41.55 - - [25/Feb/2026:21:38:59 +0800] "GET / HTTP/1.1" 200 215132 "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" 581961 +123.139.41.55 - - [25/Feb/2026:21:39:00 +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" 1265 +123.139.41.55 - - [25/Feb/2026:21:39:00 +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" 883 +123.139.41.55 - - [25/Feb/2026:21:39:01 +0800] "GET /smart-prompt-optimization HTTP/1.1" 200 31949 "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" 241695 +123.139.41.55 - - [25/Feb/2026:21:39:01 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 1064 +123.139.41.55 - - [25/Feb/2026:21:39:01 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/smart-prompt-optimization" "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" 849 +167.94.138.173 - - [25/Feb/2026:22:46:06 +0800] "GET / HTTP/1.1" 200 215132 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 9721269 +167.94.138.173 - - [25/Feb/2026:22:46:25 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 753 +167.94.138.173 - - [25/Feb/2026:22:47:46 +0800] "GET /.well-known/security.txt HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 699 +3.130.168.2 - - [26/Feb/2026:02:57:44 +0800] "GET / HTTP/1.1" 200 215132 "-" "visionheight.com/scan Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 994763 +3.130.168.2 - - [26/Feb/2026:02:59:50 +0800] "GET / HTTP/1.1" 200 215132 "-" "visionheight.com/scan Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 850944 +123.139.40.200 - - [28/Feb/2026:00:47:16 +0800] "GET / HTTP/1.1" 200 215132 "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" 785089 +123.139.40.200 - - [28/Feb/2026:00:47:16 +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" 6205 +123.139.40.200 - - [28/Feb/2026:00:47:16 +0800] "GET /api/check-login HTTP/1.1" 200 35 "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" 1051 +123.139.40.200 - - [28/Feb/2026:00:47:27 +0800] "GET /login HTTP/1.1" 200 24095 "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" 104715 +123.139.40.200 - - [28/Feb/2026:00:47:27 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/login" "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" 5766 +123.139.40.200 - - [28/Feb/2026:00:47:27 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/login" "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" 1071 +123.139.40.200 - - [28/Feb/2026:00:47:30 +0800] "POST /api/login HTTP/1.1" 200 182 "http://101.43.95.130:5002/login" "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" 593656 +123.139.40.200 - - [28/Feb/2026:00:47:33 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/login" "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" 732878 +123.139.40.200 - - [28/Feb/2026:00:47:33 +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" 1988 +123.139.40.200 - - [28/Feb/2026:00:47:33 +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" 922 +123.139.40.200 - - [28/Feb/2026:00:47:40 +0800] "GET /history HTTP/1.1" 200 39887 "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" 144336 +123.139.40.200 - - [28/Feb/2026:00:47:40 +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" 1146 +123.139.40.200 - - [28/Feb/2026:00:47:40 +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" 1119 +123.139.40.200 - - [28/Feb/2026:00:47:41 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 135935 "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" 287323 +123.139.40.200 - - [28/Feb/2026:00:49:04 +0800] "GET / HTTP/1.1" 200 215132 "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" 316020 +123.139.40.200 - - [28/Feb/2026:00:49:04 +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" 1069 +123.139.40.200 - - [28/Feb/2026:00:49:05 +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" 1312 +123.139.40.200 - - [28/Feb/2026:00:49:08 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 455272 +123.139.40.200 - - [28/Feb/2026:00:49:08 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1882 +123.139.40.200 - - [28/Feb/2026:00:49:08 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 856 +123.139.40.200 - - [28/Feb/2026:00:49:46 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 5271 "http://101.43.95.130:5002/expert_generate" "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" 25446078 +123.139.40.200 - - [28/Feb/2026:00:49:53 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 6551 "http://101.43.95.130:5002/expert_generate" "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" 32036421 +123.139.40.200 - - [28/Feb/2026:00:51:35 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 9743 "http://101.43.95.130:5002/expert_generate" "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" 45888686 +123.139.40.200 - - [28/Feb/2026:00:51:37 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 10727 "http://101.43.95.130:5002/expert_generate" "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" 47589047 +123.139.40.200 - - [28/Feb/2026:00:53:44 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 294275 +123.139.40.200 - - [28/Feb/2026:00:53:44 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1036 +123.139.40.200 - - [28/Feb/2026:00:53:44 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 849 +123.139.40.200 - - [28/Feb/2026:00:55:05 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 8203 "http://101.43.95.130:5002/expert_generate" "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" 47293116 +123.139.40.200 - - [28/Feb/2026:00:55:12 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 9224 "http://101.43.95.130:5002/expert_generate" "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" 55064848 +123.139.40.200 - - [28/Feb/2026:01:16:17 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 10503 "http://101.43.95.130:5002/expert_generate" "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" 67298887 +123.139.40.200 - - [28/Feb/2026:01:16:23 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 11346 "http://101.43.95.130:5002/expert_generate" "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" 72574485 +123.139.40.200 - - [28/Feb/2026:01:25:36 +0800] "GET / HTTP/1.1" 200 215132 "http://101.43.95.130:5002/expert_generate" "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" 466345 +123.139.40.200 - - [28/Feb/2026:01:25:37 +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" 1168 +123.139.40.200 - - [28/Feb/2026:01:25:37 +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" 5495 +123.139.40.200 - - [28/Feb/2026:01:25:41 +0800] "GET /history HTTP/1.1" 200 39887 "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" 271936 +123.139.40.200 - - [28/Feb/2026:01:25:41 +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" 1135 +123.139.40.200 - - [28/Feb/2026:01:25:41 +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" 1074 +123.139.40.200 - - [28/Feb/2026:01:25:41 +0800] "GET /api/history?per_page=100 HTTP/1.1" 200 135935 "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" 406906 +123.139.40.200 - - [28/Feb/2026:01:25:46 +0800] "GET / HTTP/1.1" 200 215132 "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" 382774 +123.139.40.200 - - [28/Feb/2026:01:25:47 +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" 963 +123.139.40.200 - - [28/Feb/2026:01:25:47 +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" 911 +123.139.40.200 - - [28/Feb/2026:01:25:49 +0800] "GET /expert_generate HTTP/1.1" 200 34041 "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" 131670 +123.139.40.200 - - [28/Feb/2026:01:25:49 +0800] "GET /static/js/interactions.js HTTP/1.1" 404 207 "http://101.43.95.130:5002/expert_generate" "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" 1057 +123.139.40.200 - - [28/Feb/2026:01:25:49 +0800] "GET /api/check-login HTTP/1.1" 200 95 "http://101.43.95.130:5002/expert_generate" "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" 806 +123.139.40.200 - - [28/Feb/2026:01:28:17 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 10042 "http://101.43.95.130:5002/expert_generate" "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" 61781255 +123.139.40.200 - - [28/Feb/2026:01:28:29 +0800] "POST /api/wx/generate/expert HTTP/1.1" 200 12073 "http://101.43.95.130:5002/expert_generate" "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" 73896570 +207.46.13.230 - - [28/Feb/2026:02:22:07 +0800] "GET /robots.txt HTTP/1.1" 404 207 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" 1075 +40.77.167.78 - - [28/Feb/2026:02:22:17 +0800] "GET /sitemap.xml HTTP/1.1" 404 207 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" 817 +52.167.144.216 - - [28/Feb/2026:03:27:35 +0800] "GET /sitemap.xml HTTP/1.1" 404 207 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" 787 +3.130.168.2 - - [28/Feb/2026:04:24:08 +0800] "GET / HTTP/1.1" 200 215132 "-" "visionheight.com/scan Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 1316306 +3.130.168.2 - - [28/Feb/2026:04:25:48 +0800] "GET / HTTP/1.1" 200 215132 "-" "visionheight.com/scan Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 1013425 +123.139.40.200 - - [28/Feb/2026:21:13:38 +0800] "GET / HTTP/1.1" 200 215132 "-" "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" 737439 +123.139.40.200 - - [28/Feb/2026:21:13:38 +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" 6156 +123.139.40.200 - - [28/Feb/2026:21:13:39 +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" 1236 +123.139.40.200 - - [28/Feb/2026:21:16:49 +0800] "GET / HTTP/1.1" 200 215706 "-" "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" 778665 +123.139.40.200 - - [28/Feb/2026:21:16:49 +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" 6111 +123.139.40.200 - - [28/Feb/2026:21:16:49 +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" 5401 +123.139.40.200 - - [28/Feb/2026:21:16:53 +0800] "GET /expert_generate_2 HTTP/1.1" 200 34048 "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" 526886 +123.139.40.200 - - [28/Feb/2026:21:16:53 +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" 1247 +123.139.40.200 - - [28/Feb/2026:21:16:53 +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" 6908 +123.139.40.200 - - [28/Feb/2026:21:17:00 +0800] "GET /expert_generate_2 HTTP/1.1" 200 34048 "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" 448188 +123.139.40.200 - - [28/Feb/2026:21:17:00 +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" 1547 +123.139.40.200 - - [28/Feb/2026:21:17:00 +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" 841 +123.139.40.200 - - [28/Feb/2026:21:25:15 +0800] "GET / HTTP/1.1" 200 215706 "-" "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" 740956 +123.139.40.200 - - [28/Feb/2026:21:25:16 +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" 6034 +123.139.40.200 - - [28/Feb/2026:21:25:16 +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" 5712 +123.139.40.200 - - [28/Feb/2026:21:25:19 +0800] "GET /expert-generate-2 HTTP/1.1" 200 31224 "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" 490185 +123.139.40.200 - - [28/Feb/2026:21:25:19 +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" 7373 +123.139.40.200 - - [28/Feb/2026:21:25:19 +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" 1153 +123.139.40.200 - - [28/Feb/2026:21:26:36 +0800] "POST /api/expert-generate-2/generate HTTP/1.1" 200 8722 "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" 39529217 +123.139.40.200 - - [28/Feb/2026:21:26:38 +0800] "POST /api/expert-generate-2/generate HTTP/1.1" 200 8648 "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" 41850743 +123.139.40.200 - - [28/Feb/2026:21:30:25 +0800] "GET /history HTTP/1.1" 200 39996 "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" 500156 +123.139.40.200 - - [28/Feb/2026:21:30:25 +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" 1121 +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 diff --git a/logs/gunicorn_error.log b/logs/gunicorn_error.log index 20339db..b7b530a 100644 --- a/logs/gunicorn_error.log +++ b/logs/gunicorn_error.log @@ -9017,3 +9017,1290 @@ OSError: [Errno 5] Input/output error [2026-02-23 17:43:34 +0800] [27026] [INFO] Booting worker with pid: 27026 [2026-02-23 17:43:34 +0800] [27026] [INFO] 工作进程 27026 已启动 [2026-02-23 17:43:34 +0800] [27026] [INFO] 工作进程 27026 初始化完成 +[2026-02-23 18:12:59,692] ERROR in app: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +[2026-02-23 18:13:02,015] ERROR in app: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +[2026-02-23 18:14:09,978] ERROR in app: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +[2026-02-23 18:14:27,798] ERROR in app: Exception on /travel-planning [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/travel_planning.py", line 59, in travel_page + user_id = session.get('user_id') + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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/travel_planning.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/travel_planning.html", line 11, 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 'travel_planning.travel_history_page'. Did you mean 'travel_planning.travel_page' instead? +[2026-02-23 18:20:46 +0800] [26873] [INFO] Handling signal: term +[2026-02-23 18:20:46 +0800] [27022] [INFO] Worker exiting (pid: 27022) +[2026-02-23 18:20:46 +0800] [27024] [INFO] Worker exiting (pid: 27024) +[2026-02-23 18:20:46 +0800] [27023] [INFO] Worker exiting (pid: 27023) +[2026-02-23 18:20:46 +0800] [27025] [INFO] Worker exiting (pid: 27025) +[2026-02-23 18:20:46 +0800] [27026] [INFO] Worker exiting (pid: 27026) +[2026-02-23 18:21:00 +0800] [26873] [INFO] Shutting down: Master +[2026-02-23 18:44:24 +0800] [19989] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 18:44:24 +0800] [19989] [INFO] Gunicorn服务器启动中... +[2026-02-23 18:44:24 +0800] [19989] [INFO] Listening at: http://0.0.0.0:5002 (19989) +[2026-02-23 18:44:24 +0800] [19989] [INFO] Using worker: sync +[2026-02-23 18:44:24 +0800] [19989] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:44:24 +0800] [20107] [INFO] Booting worker with pid: 20107 +[2026-02-23 18:44:24 +0800] [20107] [INFO] 工作进程 20107 已启动 +[2026-02-23 18:44:24 +0800] [20107] [INFO] 工作进程 20107 初始化完成 +[2026-02-23 18:44:24 +0800] [19989] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:44:25 +0800] [20108] [INFO] Booting worker with pid: 20108 +[2026-02-23 18:44:25 +0800] [20108] [INFO] 工作进程 20108 已启动 +[2026-02-23 18:44:25 +0800] [20108] [INFO] 工作进程 20108 初始化完成 +[2026-02-23 18:44:25 +0800] [19989] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:44:25 +0800] [20109] [INFO] Booting worker with pid: 20109 +[2026-02-23 18:44:25 +0800] [20109] [INFO] 工作进程 20109 已启动 +[2026-02-23 18:44:25 +0800] [20109] [INFO] 工作进程 20109 初始化完成 +[2026-02-23 18:44:25 +0800] [19989] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:44:25 +0800] [20110] [INFO] Booting worker with pid: 20110 +[2026-02-23 18:44:25 +0800] [20110] [INFO] 工作进程 20110 已启动 +[2026-02-23 18:44:25 +0800] [20110] [INFO] 工作进程 20110 初始化完成 +[2026-02-23 18:44:25 +0800] [19989] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:44:25 +0800] [20127] [INFO] Booting worker with pid: 20127 +[2026-02-23 18:44:25 +0800] [20127] [INFO] 工作进程 20127 已启动 +[2026-02-23 18:44:25 +0800] [20127] [INFO] 工作进程 20127 初始化完成 +[2026-02-23 18:50:54 +0800] [20107] [INFO] Worker exiting (pid: 20107) +[2026-02-23 18:50:54 +0800] [19989] [INFO] Handling signal: term +[2026-02-23 18:50:54 +0800] [20109] [INFO] Worker exiting (pid: 20109) +[2026-02-23 18:50:54 +0800] [20108] [INFO] Worker exiting (pid: 20108) +[2026-02-23 18:50:54 +0800] [20110] [INFO] Worker exiting (pid: 20110) +[2026-02-23 18:50:54 +0800] [20127] [INFO] Worker exiting (pid: 20127) +[2026-02-23 18:50:54 +0800] [19989] [ERROR] Worker (pid:20109) was sent SIGTERM! +[2026-02-23 18:50:55 +0800] [19989] [ERROR] Worker (pid:20107) was sent SIGTERM! +[2026-02-23 18:50:55 +0800] [19989] [INFO] Shutting down: Master +[2026-02-23 18:51:45 +0800] [6233] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 18:51:45 +0800] [6233] [INFO] Gunicorn服务器启动中... +[2026-02-23 18:51:45 +0800] [6233] [INFO] Listening at: http://0.0.0.0:5002 (6233) +[2026-02-23 18:51:45 +0800] [6233] [INFO] Using worker: sync +[2026-02-23 18:51:45 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:51:45 +0800] [6275] [INFO] Booting worker with pid: 6275 +[2026-02-23 18:51:45 +0800] [6275] [INFO] 工作进程 6275 已启动 +[2026-02-23 18:51:45 +0800] [6275] [INFO] 工作进程 6275 初始化完成 +[2026-02-23 18:51:45 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:51:45 +0800] [6276] [INFO] Booting worker with pid: 6276 +[2026-02-23 18:51:45 +0800] [6276] [INFO] 工作进程 6276 已启动 +[2026-02-23 18:51:45 +0800] [6276] [INFO] 工作进程 6276 初始化完成 +[2026-02-23 18:51:45 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:51:45 +0800] [6296] [INFO] Booting worker with pid: 6296 +[2026-02-23 18:51:45 +0800] [6296] [INFO] 工作进程 6296 已启动 +[2026-02-23 18:51:45 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:51:45 +0800] [6296] [INFO] 工作进程 6296 初始化完成 +[2026-02-23 18:51:45 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:51:45 +0800] [6297] [INFO] Booting worker with pid: 6297 +[2026-02-23 18:51:45 +0800] [6297] [INFO] 工作进程 6297 已启动 +[2026-02-23 18:51:45 +0800] [6297] [INFO] 工作进程 6297 初始化完成 +[2026-02-23 18:51:45 +0800] [6298] [INFO] Booting worker with pid: 6298 +[2026-02-23 18:51:45 +0800] [6298] [INFO] 工作进程 6298 已启动 +[2026-02-23 18:51:45 +0800] [6298] [INFO] 工作进程 6298 初始化完成 +[2026-02-23 18:57:03 +0800] [6233] [CRITICAL] WORKER TIMEOUT (pid:6296) +[2026-02-23 18:57:03 +0800] [6296] [INFO] 工作进程 6296 异常退出 +[2026-02-23 18:57:03 +0800] [6296] [INFO] Worker exiting (pid: 6296) +[2026-02-23 18:57:04 +0800] [6233] [ERROR] Worker (pid:6296) exited with code 1 +[2026-02-23 18:57:04 +0800] [6233] [ERROR] Worker (pid:6296) exited with code 1. +[2026-02-23 18:57:04 +0800] [6233] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 18:57:04 +0800] [4099] [INFO] Booting worker with pid: 4099 +[2026-02-23 18:57:04 +0800] [4099] [INFO] 工作进程 4099 已启动 +[2026-02-23 18:57:04 +0800] [4099] [INFO] 工作进程 4099 初始化完成 +[2026-02-23 19:00:30 +0800] [4099] [INFO] Worker exiting (pid: 4099) +[2026-02-23 19:00:30 +0800] [6233] [INFO] Handling signal: term +[2026-02-23 19:00:30 +0800] [6275] [INFO] Worker exiting (pid: 6275) +[2026-02-23 19:00:30 +0800] [6298] [INFO] Worker exiting (pid: 6298) +[2026-02-23 19:00:30 +0800] [6276] [INFO] Worker exiting (pid: 6276) +[2026-02-23 19:00:30 +0800] [6297] [INFO] Worker exiting (pid: 6297) +[2026-02-23 19:00:30 +0800] [6233] [ERROR] Worker (pid:4099) was sent SIGTERM! +[2026-02-23 19:00:31 +0800] [6233] [INFO] Shutting down: Master +[2026-02-23 19:00:40 +0800] [12990] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 19:00:40 +0800] [12990] [INFO] Gunicorn服务器启动中... +[2026-02-23 19:00:40 +0800] [12990] [INFO] Listening at: http://0.0.0.0:5002 (12990) +[2026-02-23 19:00:40 +0800] [12990] [INFO] Using worker: sync +[2026-02-23 19:00:40 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:00:40 +0800] [13046] [INFO] Booting worker with pid: 13046 +[2026-02-23 19:00:40 +0800] [13046] [INFO] 工作进程 13046 已启动 +[2026-02-23 19:00:40 +0800] [13046] [INFO] 工作进程 13046 初始化完成 +[2026-02-23 19:00:40 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:00:40 +0800] [13062] [INFO] Booting worker with pid: 13062 +[2026-02-23 19:00:40 +0800] [13062] [INFO] 工作进程 13062 已启动 +[2026-02-23 19:00:40 +0800] [13062] [INFO] 工作进程 13062 初始化完成 +[2026-02-23 19:00:40 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:00:40 +0800] [13065] [INFO] Booting worker with pid: 13065 +[2026-02-23 19:00:40 +0800] [13065] [INFO] 工作进程 13065 已启动 +[2026-02-23 19:00:40 +0800] [13065] [INFO] 工作进程 13065 初始化完成 +[2026-02-23 19:00:40 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:00:40 +0800] [13066] [INFO] Booting worker with pid: 13066 +[2026-02-23 19:00:40 +0800] [13066] [INFO] 工作进程 13066 已启动 +[2026-02-23 19:00:40 +0800] [13066] [INFO] 工作进程 13066 初始化完成 +[2026-02-23 19:00:40 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:00:40 +0800] [13067] [INFO] Booting worker with pid: 13067 +[2026-02-23 19:00:40 +0800] [13067] [INFO] 工作进程 13067 已启动 +[2026-02-23 19:00:40 +0800] [13067] [INFO] 工作进程 13067 初始化完成 +[2026-02-23 19:06:15 +0800] [12990] [CRITICAL] WORKER TIMEOUT (pid:13046) +[2026-02-23 19:06:15 +0800] [13046] [INFO] 工作进程 13046 异常退出 +[2026-02-23 19:06:15 +0800] [13046] [INFO] Worker exiting (pid: 13046) +[2026-02-23 19:06:16 +0800] [12990] [ERROR] Worker (pid:13046) exited with code 1 +[2026-02-23 19:06:16 +0800] [12990] [ERROR] Worker (pid:13046) exited with code 1. +[2026-02-23 19:06:16 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:06:16 +0800] [27151] [INFO] Booting worker with pid: 27151 +[2026-02-23 19:06:16 +0800] [27151] [INFO] 工作进程 27151 已启动 +[2026-02-23 19:06:16 +0800] [27151] [INFO] 工作进程 27151 初始化完成 +[2026-02-23 19:20:32 +0800] [12990] [CRITICAL] WORKER TIMEOUT (pid:13067) +[2026-02-23 19:20:32 +0800] [13067] [INFO] 工作进程 13067 异常退出 +[2026-02-23 19:20:32 +0800] [13067] [INFO] Worker exiting (pid: 13067) +[2026-02-23 19:20:32 +0800] [12990] [ERROR] Worker (pid:13067) exited with code 1 +[2026-02-23 19:20:32 +0800] [12990] [ERROR] Worker (pid:13067) exited with code 1. +[2026-02-23 19:20:32 +0800] [12990] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:20:32 +0800] [30015] [INFO] Booting worker with pid: 30015 +[2026-02-23 19:20:32 +0800] [30015] [INFO] 工作进程 30015 已启动 +[2026-02-23 19:20:32 +0800] [30015] [INFO] 工作进程 30015 初始化完成 +[2026-02-23 19:25:39 +0800] [12990] [INFO] Handling signal: term +[2026-02-23 19:25:39 +0800] [13066] [INFO] Worker exiting (pid: 13066) +[2026-02-23 19:25:39 +0800] [13062] [INFO] Worker exiting (pid: 13062) +[2026-02-23 19:25:39 +0800] [13065] [INFO] Worker exiting (pid: 13065) +[2026-02-23 19:25:39 +0800] [27151] [INFO] Worker exiting (pid: 27151) +[2026-02-23 19:25:39 +0800] [30015] [INFO] Worker exiting (pid: 30015) +[2026-02-23 19:25:41 +0800] [12990] [INFO] Shutting down: Master +[2026-02-23 19:26:01 +0800] [28657] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 19:26:01 +0800] [28657] [INFO] Gunicorn服务器启动中... +[2026-02-23 19:26:01 +0800] [28657] [INFO] Listening at: http://0.0.0.0:5002 (28657) +[2026-02-23 19:26:01 +0800] [28657] [INFO] Using worker: sync +[2026-02-23 19:26:01 +0800] [28657] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:26:01 +0800] [28749] [INFO] Booting worker with pid: 28749 +[2026-02-23 19:26:01 +0800] [28749] [INFO] 工作进程 28749 已启动 +[2026-02-23 19:26:01 +0800] [28749] [INFO] 工作进程 28749 初始化完成 +[2026-02-23 19:26:01 +0800] [28657] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:26:01 +0800] [28750] [INFO] Booting worker with pid: 28750 +[2026-02-23 19:26:01 +0800] [28750] [INFO] 工作进程 28750 已启动 +[2026-02-23 19:26:01 +0800] [28750] [INFO] 工作进程 28750 初始化完成 +[2026-02-23 19:26:02 +0800] [28657] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:26:02 +0800] [28751] [INFO] Booting worker with pid: 28751 +[2026-02-23 19:26:02 +0800] [28751] [INFO] 工作进程 28751 已启动 +[2026-02-23 19:26:02 +0800] [28751] [INFO] 工作进程 28751 初始化完成 +[2026-02-23 19:26:02 +0800] [28657] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:26:02 +0800] [28752] [INFO] Booting worker with pid: 28752 +[2026-02-23 19:26:02 +0800] [28752] [INFO] 工作进程 28752 已启动 +[2026-02-23 19:26:02 +0800] [28752] [INFO] 工作进程 28752 初始化完成 +[2026-02-23 19:26:02 +0800] [28657] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:26:02 +0800] [28753] [INFO] Booting worker with pid: 28753 +[2026-02-23 19:26:02 +0800] [28753] [INFO] 工作进程 28753 已启动 +[2026-02-23 19:26:02 +0800] [28753] [INFO] 工作进程 28753 初始化完成 +[2026-02-23 19:34:24 +0800] [28750] [INFO] Worker exiting (pid: 28750) +[2026-02-23 19:34:24 +0800] [28657] [INFO] Handling signal: term +[2026-02-23 19:34:24 +0800] [28749] [INFO] Worker exiting (pid: 28749) +[2026-02-23 19:34:24 +0800] [28751] [INFO] Worker exiting (pid: 28751) +[2026-02-23 19:34:24 +0800] [28657] [ERROR] Worker (pid:28750) was sent SIGTERM! +[2026-02-23 19:34:24 +0800] [28752] [INFO] Worker exiting (pid: 28752) +[2026-02-23 19:34:24 +0800] [28753] [INFO] Worker exiting (pid: 28753) +[2026-02-23 19:34:25 +0800] [28657] [INFO] Shutting down: Master +[2026-02-23 19:34:32 +0800] [17763] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 19:34:32 +0800] [17763] [INFO] Gunicorn服务器启动中... +[2026-02-23 19:34:32 +0800] [17763] [INFO] Listening at: http://0.0.0.0:5002 (17763) +[2026-02-23 19:34:32 +0800] [17763] [INFO] Using worker: sync +[2026-02-23 19:34:32 +0800] [17763] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:34:32 +0800] [17815] [INFO] Booting worker with pid: 17815 +[2026-02-23 19:34:32 +0800] [17815] [INFO] 工作进程 17815 已启动 +[2026-02-23 19:34:32 +0800] [17815] [INFO] 工作进程 17815 初始化完成 +[2026-02-23 19:34:32 +0800] [17763] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:34:32 +0800] [17816] [INFO] Booting worker with pid: 17816 +[2026-02-23 19:34:32 +0800] [17816] [INFO] 工作进程 17816 已启动 +[2026-02-23 19:34:32 +0800] [17816] [INFO] 工作进程 17816 初始化完成 +[2026-02-23 19:34:32 +0800] [17763] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:34:32 +0800] [17834] [INFO] Booting worker with pid: 17834 +[2026-02-23 19:34:32 +0800] [17834] [INFO] 工作进程 17834 已启动 +[2026-02-23 19:34:32 +0800] [17834] [INFO] 工作进程 17834 初始化完成 +[2026-02-23 19:34:32 +0800] [17763] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:34:32 +0800] [17838] [INFO] Booting worker with pid: 17838 +[2026-02-23 19:34:32 +0800] [17838] [INFO] 工作进程 17838 已启动 +[2026-02-23 19:34:32 +0800] [17838] [INFO] 工作进程 17838 初始化完成 +[2026-02-23 19:34:32 +0800] [17763] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:34:32 +0800] [17856] [INFO] Booting worker with pid: 17856 +[2026-02-23 19:34:32 +0800] [17856] [INFO] 工作进程 17856 已启动 +[2026-02-23 19:34:32 +0800] [17856] [INFO] 工作进程 17856 初始化完成 +[2026-02-23 19:53:47 +0800] [17763] [INFO] Handling signal: term +[2026-02-23 19:53:47 +0800] [17815] [INFO] Worker exiting (pid: 17815) +[2026-02-23 19:53:47 +0800] [17816] [INFO] Worker exiting (pid: 17816) +[2026-02-23 19:53:47 +0800] [17834] [INFO] Worker exiting (pid: 17834) +[2026-02-23 19:53:47 +0800] [17838] [INFO] Worker exiting (pid: 17838) +[2026-02-23 19:53:47 +0800] [17856] [INFO] Worker exiting (pid: 17856) +[2026-02-23 19:53:49 +0800] [17763] [INFO] Shutting down: Master +[2026-02-23 19:54:04 +0800] [19186] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 19:54:04 +0800] [19186] [INFO] Gunicorn服务器启动中... +[2026-02-23 19:54:04 +0800] [19186] [INFO] Listening at: http://0.0.0.0:5002 (19186) +[2026-02-23 19:54:04 +0800] [19186] [INFO] Using worker: sync +[2026-02-23 19:54:04 +0800] [19186] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:54:04 +0800] [19285] [INFO] Booting worker with pid: 19285 +[2026-02-23 19:54:04 +0800] [19285] [INFO] 工作进程 19285 已启动 +[2026-02-23 19:54:04 +0800] [19285] [INFO] 工作进程 19285 初始化完成 +[2026-02-23 19:54:04 +0800] [19186] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:54:04 +0800] [19295] [INFO] Booting worker with pid: 19295 +[2026-02-23 19:54:04 +0800] [19295] [INFO] 工作进程 19295 已启动 +[2026-02-23 19:54:04 +0800] [19295] [INFO] 工作进程 19295 初始化完成 +[2026-02-23 19:54:04 +0800] [19186] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:54:04 +0800] [19303] [INFO] Booting worker with pid: 19303 +[2026-02-23 19:54:04 +0800] [19303] [INFO] 工作进程 19303 已启动 +[2026-02-23 19:54:04 +0800] [19303] [INFO] 工作进程 19303 初始化完成 +[2026-02-23 19:54:04 +0800] [19186] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:54:04 +0800] [19310] [INFO] Booting worker with pid: 19310 +[2026-02-23 19:54:04 +0800] [19310] [INFO] 工作进程 19310 已启动 +[2026-02-23 19:54:04 +0800] [19310] [INFO] 工作进程 19310 初始化完成 +[2026-02-23 19:54:04 +0800] [19186] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 19:54:04 +0800] [19312] [INFO] Booting worker with pid: 19312 +[2026-02-23 19:54:04 +0800] [19312] [INFO] 工作进程 19312 已启动 +[2026-02-23 19:54:04 +0800] [19312] [INFO] 工作进程 19312 初始化完成 +[2026-02-23 20:02:09,548] 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? +[2026-02-23 20:02:09,582] 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? + +[2026-02-23 20:02:12,566] 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? +[2026-02-23 20:02:12,590] 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 176, 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 'prompt_optimization.optimization_page'. Did you mean 'resume_optimization.optimization_page' instead? + +[2026-02-23 20:02:36 +0800] [19186] [INFO] Handling signal: term +[2026-02-23 20:02:36 +0800] [19303] [INFO] Worker exiting (pid: 19303) +[2026-02-23 20:02:36 +0800] [19295] [INFO] Worker exiting (pid: 19295) +[2026-02-23 20:02:36 +0800] [19310] [INFO] Worker exiting (pid: 19310) +[2026-02-23 20:02:36 +0800] [19312] [INFO] Worker exiting (pid: 19312) +[2026-02-23 20:03:07 +0800] [9640] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 20:03:18 +0800] [19285] [INFO] Worker exiting (pid: 19285) +[2026-02-23 20:03:19 +0800] [19186] [INFO] Shutting down: Master +[2026-02-23 20:05:52 +0800] [16664] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 20:05:52 +0800] [16664] [INFO] Gunicorn服务器启动中... +[2026-02-23 20:05:52 +0800] [16664] [INFO] Listening at: http://0.0.0.0:5002 (16664) +[2026-02-23 20:05:52 +0800] [16664] [INFO] Using worker: sync +[2026-02-23 20:05:52 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:05:53 +0800] [16724] [INFO] Booting worker with pid: 16724 +[2026-02-23 20:05:53 +0800] [16724] [INFO] 工作进程 16724 已启动 +[2026-02-23 20:05:53 +0800] [16724] [INFO] 工作进程 16724 初始化完成 +[2026-02-23 20:05:53 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:05:53 +0800] [16725] [INFO] Booting worker with pid: 16725 +[2026-02-23 20:05:53 +0800] [16725] [INFO] 工作进程 16725 已启动 +[2026-02-23 20:05:53 +0800] [16725] [INFO] 工作进程 16725 初始化完成 +[2026-02-23 20:05:53 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:05:53 +0800] [16726] [INFO] Booting worker with pid: 16726 +[2026-02-23 20:05:53 +0800] [16726] [INFO] 工作进程 16726 已启动 +[2026-02-23 20:05:53 +0800] [16726] [INFO] 工作进程 16726 初始化完成 +[2026-02-23 20:05:53 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:05:53 +0800] [16749] [INFO] Booting worker with pid: 16749 +[2026-02-23 20:05:53 +0800] [16749] [INFO] 工作进程 16749 已启动 +[2026-02-23 20:05:53 +0800] [16749] [INFO] 工作进程 16749 初始化完成 +[2026-02-23 20:05:53 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:05:53 +0800] [16759] [INFO] Booting worker with pid: 16759 +[2026-02-23 20:05:53 +0800] [16759] [INFO] 工作进程 16759 已启动 +[2026-02-23 20:05:53 +0800] [16759] [INFO] 工作进程 16759 初始化完成 +[2026-02-23 20:17:41 +0800] [16664] [CRITICAL] WORKER TIMEOUT (pid:16724) +[2026-02-23 20:17:41 +0800] [16724] [INFO] 工作进程 16724 异常退出 +[2026-02-23 20:17:41 +0800] [16724] [INFO] Worker exiting (pid: 16724) +[2026-02-23 20:17:42 +0800] [16664] [ERROR] Worker (pid:16724) exited with code 1 +[2026-02-23 20:17:42 +0800] [16664] [ERROR] Worker (pid:16724) exited with code 1. +[2026-02-23 20:17:42 +0800] [16664] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:17:42 +0800] [13842] [INFO] Booting worker with pid: 13842 +[2026-02-23 20:17:42 +0800] [13842] [INFO] 工作进程 13842 已启动 +[2026-02-23 20:17:42 +0800] [13842] [INFO] 工作进程 13842 初始化完成 +[2026-02-23 20:21:07,607] 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 186, 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 'smart_prompt_optimization.optimization_page'. Did you mean 'prompt_optimization.optimization_page' instead? +[2026-02-23 20:21:07,637] 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 186, 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 'smart_prompt_optimization.optimization_page'. Did you mean 'prompt_optimization.optimization_page' instead? + +[2026-02-23 20:21:57 +0800] [13842] [INFO] Worker exiting (pid: 13842) +[2026-02-23 20:21:57 +0800] [16664] [INFO] Handling signal: term +[2026-02-23 20:21:57 +0800] [16725] [INFO] Worker exiting (pid: 16725) +[2026-02-23 20:21:57 +0800] [16749] [INFO] Worker exiting (pid: 16749) +[2026-02-23 20:21:57 +0800] [16759] [INFO] Worker exiting (pid: 16759) +[2026-02-23 20:21:58 +0800] [16664] [ERROR] Worker (pid:13842) was sent SIGTERM! +[2026-02-23 20:22:16 +0800] [4774] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 20:22:34 +0800] [16726] [INFO] Worker exiting (pid: 16726) +[2026-02-23 20:22:35 +0800] [16664] [INFO] Shutting down: Master +[2026-02-23 20:23:49 +0800] [13902] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 20:23:49 +0800] [13902] [INFO] Gunicorn服务器启动中... +[2026-02-23 20:23:49 +0800] [13902] [INFO] Listening at: http://0.0.0.0:5002 (13902) +[2026-02-23 20:23:49 +0800] [13902] [INFO] Using worker: sync +[2026-02-23 20:23:49 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:23:49 +0800] [14112] [INFO] Booting worker with pid: 14112 +[2026-02-23 20:23:49 +0800] [14112] [INFO] 工作进程 14112 已启动 +[2026-02-23 20:23:49 +0800] [14112] [INFO] 工作进程 14112 初始化完成 +[2026-02-23 20:23:50 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:23:50 +0800] [14113] [INFO] Booting worker with pid: 14113 +[2026-02-23 20:23:50 +0800] [14113] [INFO] 工作进程 14113 已启动 +[2026-02-23 20:23:50 +0800] [14113] [INFO] 工作进程 14113 初始化完成 +[2026-02-23 20:23:50 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:23:50 +0800] [14114] [INFO] Booting worker with pid: 14114 +[2026-02-23 20:23:50 +0800] [14114] [INFO] 工作进程 14114 已启动 +[2026-02-23 20:23:50 +0800] [14114] [INFO] 工作进程 14114 初始化完成 +[2026-02-23 20:23:50 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:23:50 +0800] [14115] [INFO] Booting worker with pid: 14115 +[2026-02-23 20:23:50 +0800] [14115] [INFO] 工作进程 14115 已启动 +[2026-02-23 20:23:50 +0800] [14115] [INFO] 工作进程 14115 初始化完成 +[2026-02-23 20:23:50 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:23:50 +0800] [14116] [INFO] Booting worker with pid: 14116 +[2026-02-23 20:23:50 +0800] [14116] [INFO] 工作进程 14116 已启动 +[2026-02-23 20:23:50 +0800] [14116] [INFO] 工作进程 14116 初始化完成 +[2026-02-23 20:31:56 +0800] [13902] [CRITICAL] WORKER TIMEOUT (pid:14116) +[2026-02-23 20:31:56 +0800] [14116] [INFO] 工作进程 14116 异常退出 +[2026-02-23 20:31:56 +0800] [14116] [INFO] Worker exiting (pid: 14116) +[2026-02-23 20:31:57 +0800] [13902] [ERROR] Worker (pid:14116) exited with code 1 +[2026-02-23 20:31:57 +0800] [13902] [ERROR] Worker (pid:14116) exited with code 1. +[2026-02-23 20:31:57 +0800] [13902] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:31:57 +0800] [1380] [INFO] Booting worker with pid: 1380 +[2026-02-23 20:31:57 +0800] [1380] [INFO] 工作进程 1380 已启动 +[2026-02-23 20:31:57 +0800] [1380] [INFO] 工作进程 1380 初始化完成 +[2026-02-23 20:42:53 +0800] [13902] [INFO] Handling signal: term +[2026-02-23 20:42:53 +0800] [14113] [INFO] Worker exiting (pid: 14113) +[2026-02-23 20:42:53 +0800] [1380] [INFO] Worker exiting (pid: 1380) +[2026-02-23 20:42:53 +0800] [14115] [INFO] Worker exiting (pid: 14115) +[2026-02-23 20:42:53 +0800] [14112] [INFO] Worker exiting (pid: 14112) +[2026-02-23 20:42:53 +0800] [14114] [INFO] Worker exiting (pid: 14114) +[2026-02-23 20:42:54 +0800] [13902] [INFO] Shutting down: Master +[2026-02-23 20:43:55 +0800] [31167] [INFO] Starting gunicorn 21.2.0 +[2026-02-23 20:43:55 +0800] [31167] [INFO] Gunicorn服务器启动中... +[2026-02-23 20:43:55 +0800] [31167] [INFO] Listening at: http://0.0.0.0:5002 (31167) +[2026-02-23 20:43:55 +0800] [31167] [INFO] Using worker: sync +[2026-02-23 20:43:55 +0800] [31167] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:43:55 +0800] [31252] [INFO] Booting worker with pid: 31252 +[2026-02-23 20:43:55 +0800] [31252] [INFO] 工作进程 31252 已启动 +[2026-02-23 20:43:55 +0800] [31252] [INFO] 工作进程 31252 初始化完成 +[2026-02-23 20:43:55 +0800] [31167] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:43:55 +0800] [31254] [INFO] Booting worker with pid: 31254 +[2026-02-23 20:43:55 +0800] [31254] [INFO] 工作进程 31254 已启动 +[2026-02-23 20:43:55 +0800] [31254] [INFO] 工作进程 31254 初始化完成 +[2026-02-23 20:43:55 +0800] [31167] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:43:55 +0800] [31255] [INFO] Booting worker with pid: 31255 +[2026-02-23 20:43:55 +0800] [31255] [INFO] 工作进程 31255 已启动 +[2026-02-23 20:43:55 +0800] [31255] [INFO] 工作进程 31255 初始化完成 +[2026-02-23 20:43:55 +0800] [31167] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:43:55 +0800] [31256] [INFO] Booting worker with pid: 31256 +[2026-02-23 20:43:55 +0800] [31256] [INFO] 工作进程 31256 已启动 +[2026-02-23 20:43:55 +0800] [31256] [INFO] 工作进程 31256 初始化完成 +[2026-02-23 20:43:55 +0800] [31167] [INFO] 工作进程 [booting] 即将启动 +[2026-02-23 20:43:55 +0800] [31257] [INFO] Booting worker with pid: 31257 +[2026-02-23 20:43:55 +0800] [31257] [INFO] 工作进程 31257 已启动 +[2026-02-23 20:43:55 +0800] [31257] [INFO] 工作进程 31257 初始化完成 +[2026-02-24 02:10:27 +0800] [31252] [INFO] Worker exiting (pid: 31252) +[2026-02-24 02:10:27 +0800] [31254] [INFO] Worker exiting (pid: 31254) +[2026-02-24 02:10:27 +0800] [31257] [INFO] Worker exiting (pid: 31257) +[2026-02-24 02:10:27 +0800] [31256] [INFO] Worker exiting (pid: 31256) +[2026-02-24 02:10:27 +0800] [31255] [INFO] Worker exiting (pid: 31255) +[2026-02-24 02:10:27 +0800] [31167] [INFO] Handling signal: term +[2026-02-24 02:10:27 +0800] [31167] [ERROR] Worker (pid:31252) was sent SIGTERM! +[2026-02-24 02:10:27 +0800] [31167] [ERROR] Worker (pid:31254) was sent SIGTERM! +[2026-02-24 02:10:27 +0800] [31167] [ERROR] Worker (pid:31257) was sent SIGTERM! +[2026-02-24 02:10:27 +0800] [31167] [ERROR] Worker (pid:31255) was sent SIGTERM! +[2026-02-24 02:10:27 +0800] [31167] [ERROR] Worker (pid:31256) was sent SIGTERM! +[2026-02-24 02:10:27 +0800] [31167] [INFO] Shutting down: Master +[2026-02-24 23:29:23 +0800] [4032] [INFO] Starting gunicorn 21.2.0 +[2026-02-24 23:29:23 +0800] [4032] [INFO] Gunicorn服务器启动中... +[2026-02-24 23:29:23 +0800] [4032] [INFO] Listening at: http://0.0.0.0:5002 (4032) +[2026-02-24 23:29:23 +0800] [4032] [INFO] Using worker: sync +[2026-02-24 23:29:23 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:29:23 +0800] [4211] [INFO] Booting worker with pid: 4211 +[2026-02-24 23:29:23 +0800] [4211] [INFO] 工作进程 4211 已启动 +[2026-02-24 23:29:23 +0800] [4211] [INFO] 工作进程 4211 初始化完成 +[2026-02-24 23:29:23 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:29:23 +0800] [4212] [INFO] Booting worker with pid: 4212 +[2026-02-24 23:29:23 +0800] [4212] [INFO] 工作进程 4212 已启动 +[2026-02-24 23:29:23 +0800] [4212] [INFO] 工作进程 4212 初始化完成 +[2026-02-24 23:29:23 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:29:23 +0800] [4214] [INFO] Booting worker with pid: 4214 +[2026-02-24 23:29:23 +0800] [4214] [INFO] 工作进程 4214 已启动 +[2026-02-24 23:29:23 +0800] [4214] [INFO] 工作进程 4214 初始化完成 +[2026-02-24 23:29:23 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:29:23 +0800] [4216] [INFO] Booting worker with pid: 4216 +[2026-02-24 23:29:23 +0800] [4216] [INFO] 工作进程 4216 已启动 +[2026-02-24 23:29:23 +0800] [4216] [INFO] 工作进程 4216 初始化完成 +[2026-02-24 23:29:23 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:29:23 +0800] [4217] [INFO] Booting worker with pid: 4217 +[2026-02-24 23:29:23 +0800] [4217] [INFO] 工作进程 4217 已启动 +[2026-02-24 23:29:23 +0800] [4217] [INFO] 工作进程 4217 初始化完成 +[2026-02-24 23:36:06 +0800] [4032] [CRITICAL] WORKER TIMEOUT (pid:4212) +[2026-02-24 23:36:06 +0800] [4212] [INFO] 工作进程 4212 异常退出 +[2026-02-24 23:36:06 +0800] [4212] [INFO] Worker exiting (pid: 4212) +[2026-02-24 23:36:06 +0800] [4032] [ERROR] Worker (pid:4212) exited with code 1 +[2026-02-24 23:36:06 +0800] [4032] [ERROR] Worker (pid:4212) exited with code 1. +[2026-02-24 23:36:06 +0800] [4032] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:36:06 +0800] [21081] [INFO] Booting worker with pid: 21081 +[2026-02-24 23:36:06 +0800] [21081] [INFO] 工作进程 21081 已启动 +[2026-02-24 23:36:06 +0800] [21081] [INFO] 工作进程 21081 初始化完成 +[2026-02-24 23:38:00 +0800] [4214] [INFO] Worker exiting (pid: 4214) +[2026-02-24 23:38:00 +0800] [4032] [INFO] Handling signal: term +[2026-02-24 23:38:00 +0800] [4211] [INFO] Worker exiting (pid: 4211) +[2026-02-24 23:38:00 +0800] [4217] [INFO] Worker exiting (pid: 4217) +[2026-02-24 23:38:00 +0800] [4216] [INFO] Worker exiting (pid: 4216) +[2026-02-24 23:38:00 +0800] [21081] [INFO] Worker exiting (pid: 21081) +[2026-02-24 23:38:00 +0800] [4032] [ERROR] Worker (pid:4214) was sent SIGTERM! +[2026-02-24 23:38:01 +0800] [4032] [INFO] Shutting down: Master +[2026-02-24 23:38:10 +0800] [26083] [INFO] Starting gunicorn 21.2.0 +[2026-02-24 23:38:10 +0800] [26083] [INFO] Gunicorn服务器启动中... +[2026-02-24 23:38:10 +0800] [26083] [INFO] Listening at: http://0.0.0.0:5002 (26083) +[2026-02-24 23:38:10 +0800] [26083] [INFO] Using worker: sync +[2026-02-24 23:38:10 +0800] [26083] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:38:10 +0800] [26196] [INFO] Booting worker with pid: 26196 +[2026-02-24 23:38:10 +0800] [26196] [INFO] 工作进程 26196 已启动 +[2026-02-24 23:38:10 +0800] [26196] [INFO] 工作进程 26196 初始化完成 +[2026-02-24 23:38:10 +0800] [26083] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:38:10 +0800] [26199] [INFO] Booting worker with pid: 26199 +[2026-02-24 23:38:10 +0800] [26199] [INFO] 工作进程 26199 已启动 +[2026-02-24 23:38:10 +0800] [26199] [INFO] 工作进程 26199 初始化完成 +[2026-02-24 23:38:10 +0800] [26083] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:38:10 +0800] [26200] [INFO] Booting worker with pid: 26200 +[2026-02-24 23:38:10 +0800] [26200] [INFO] 工作进程 26200 已启动 +[2026-02-24 23:38:10 +0800] [26200] [INFO] 工作进程 26200 初始化完成 +[2026-02-24 23:38:10 +0800] [26083] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:38:10 +0800] [26201] [INFO] Booting worker with pid: 26201 +[2026-02-24 23:38:10 +0800] [26201] [INFO] 工作进程 26201 已启动 +[2026-02-24 23:38:10 +0800] [26201] [INFO] 工作进程 26201 初始化完成 +[2026-02-24 23:38:10 +0800] [26083] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:38:10 +0800] [26202] [INFO] Booting worker with pid: 26202 +[2026-02-24 23:38:10 +0800] [26202] [INFO] 工作进程 26202 已启动 +[2026-02-24 23:38:10 +0800] [26202] [INFO] 工作进程 26202 初始化完成 +[2026-02-24 23:44:06 +0800] [26196] [INFO] Worker exiting (pid: 26196) +[2026-02-24 23:44:06 +0800] [26083] [INFO] Handling signal: term +[2026-02-24 23:44:06 +0800] [26202] [INFO] Worker exiting (pid: 26202) +[2026-02-24 23:44:06 +0800] [26199] [INFO] Worker exiting (pid: 26199) +[2026-02-24 23:44:06 +0800] [26200] [INFO] Worker exiting (pid: 26200) +[2026-02-24 23:44:06 +0800] [26083] [ERROR] Worker (pid:26196) was sent SIGTERM! +[2026-02-24 23:44:17 +0800] [9626] [INFO] Starting gunicorn 21.2.0 +[2026-02-24 23:44:29 +0800] [26201] [INFO] Worker exiting (pid: 26201) +[2026-02-24 23:44:29 +0800] [26083] [INFO] Shutting down: Master +[2026-02-24 23:45:19 +0800] [12403] [INFO] Starting gunicorn 21.2.0 +[2026-02-24 23:45:19 +0800] [12403] [INFO] Gunicorn服务器启动中... +[2026-02-24 23:45:19 +0800] [12403] [INFO] Listening at: http://0.0.0.0:5002 (12403) +[2026-02-24 23:45:19 +0800] [12403] [INFO] Using worker: sync +[2026-02-24 23:45:19 +0800] [12403] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:45:19 +0800] [12484] [INFO] Booting worker with pid: 12484 +[2026-02-24 23:45:19 +0800] [12484] [INFO] 工作进程 12484 已启动 +[2026-02-24 23:45:19 +0800] [12484] [INFO] 工作进程 12484 初始化完成 +[2026-02-24 23:45:19 +0800] [12403] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:45:19 +0800] [12485] [INFO] Booting worker with pid: 12485 +[2026-02-24 23:45:19 +0800] [12485] [INFO] 工作进程 12485 已启动 +[2026-02-24 23:45:19 +0800] [12485] [INFO] 工作进程 12485 初始化完成 +[2026-02-24 23:45:19 +0800] [12403] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:45:19 +0800] [12490] [INFO] Booting worker with pid: 12490 +[2026-02-24 23:45:19 +0800] [12490] [INFO] 工作进程 12490 已启动 +[2026-02-24 23:45:19 +0800] [12490] [INFO] 工作进程 12490 初始化完成 +[2026-02-24 23:45:19 +0800] [12403] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:45:19 +0800] [12491] [INFO] Booting worker with pid: 12491 +[2026-02-24 23:45:19 +0800] [12491] [INFO] 工作进程 12491 已启动 +[2026-02-24 23:45:19 +0800] [12491] [INFO] 工作进程 12491 初始化完成 +[2026-02-24 23:45:19 +0800] [12403] [INFO] 工作进程 [booting] 即将启动 +[2026-02-24 23:45:19 +0800] [12492] [INFO] Booting worker with pid: 12492 +[2026-02-24 23:45:19 +0800] [12492] [INFO] 工作进程 12492 已启动 +[2026-02-24 23:45:19 +0800] [12492] [INFO] 工作进程 12492 初始化完成 +[2026-02-25 00:29:00 +0800] [12484] [INFO] Worker exiting (pid: 12484) +[2026-02-25 00:29:00 +0800] [12403] [INFO] Handling signal: term +[2026-02-25 00:29:00 +0800] [12491] [INFO] Worker exiting (pid: 12491) +[2026-02-25 00:29:00 +0800] [12485] [INFO] Worker exiting (pid: 12485) +[2026-02-25 00:29:00 +0800] [12492] [INFO] Worker exiting (pid: 12492) +[2026-02-25 00:29:00 +0800] [12490] [INFO] Worker exiting (pid: 12490) +[2026-02-25 00:29:00 +0800] [12403] [ERROR] Worker (pid:12484) was sent SIGTERM! +[2026-02-25 00:29:01 +0800] [12403] [INFO] Shutting down: Master +[2026-02-25 00:33:03 +0800] [4283] [INFO] Starting gunicorn 21.2.0 +[2026-02-25 00:33:03 +0800] [4283] [INFO] Gunicorn服务器启动中... +[2026-02-25 00:33:03 +0800] [4283] [INFO] Listening at: http://0.0.0.0:5002 (4283) +[2026-02-25 00:33:03 +0800] [4283] [INFO] Using worker: sync +[2026-02-25 00:33:03 +0800] [4283] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 00:33:03 +0800] [4373] [INFO] Booting worker with pid: 4373 +[2026-02-25 00:33:03 +0800] [4373] [INFO] 工作进程 4373 已启动 +[2026-02-25 00:33:03 +0800] [4373] [INFO] 工作进程 4373 初始化完成 +[2026-02-25 00:33:03 +0800] [4283] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 00:33:03 +0800] [4374] [INFO] Booting worker with pid: 4374 +[2026-02-25 00:33:03 +0800] [4374] [INFO] 工作进程 4374 已启动 +[2026-02-25 00:33:03 +0800] [4374] [INFO] 工作进程 4374 初始化完成 +[2026-02-25 00:33:03 +0800] [4283] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 00:33:03 +0800] [4375] [INFO] Booting worker with pid: 4375 +[2026-02-25 00:33:03 +0800] [4375] [INFO] 工作进程 4375 已启动 +[2026-02-25 00:33:03 +0800] [4375] [INFO] 工作进程 4375 初始化完成 +[2026-02-25 00:33:03 +0800] [4283] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 00:33:03 +0800] [4376] [INFO] Booting worker with pid: 4376 +[2026-02-25 00:33:03 +0800] [4376] [INFO] 工作进程 4376 已启动 +[2026-02-25 00:33:03 +0800] [4376] [INFO] 工作进程 4376 初始化完成 +[2026-02-25 00:33:03 +0800] [4283] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 00:33:03 +0800] [4377] [INFO] Booting worker with pid: 4377 +[2026-02-25 00:33:03 +0800] [4377] [INFO] 工作进程 4377 已启动 +[2026-02-25 00:33:03 +0800] [4377] [INFO] 工作进程 4377 初始化完成 +[2026-02-25 02:38:25 +0800] [4373] [WARNING] Invalid request from ip=193.32.162.25: Invalid HTTP request line: 'SSH-2.0-Go' +[2026-02-25 04:21:26 +0800] [4283] [INFO] Handling signal: term +[2026-02-25 04:21:26 +0800] [4374] [INFO] Worker exiting (pid: 4374) +[2026-02-25 04:21:26 +0800] [4375] [INFO] Worker exiting (pid: 4375) +[2026-02-25 04:21:26 +0800] [4373] [INFO] Worker exiting (pid: 4373) +[2026-02-25 04:21:26 +0800] [4376] [INFO] Worker exiting (pid: 4376) +[2026-02-25 04:21:26 +0800] [4377] [INFO] Worker exiting (pid: 4377) +[2026-02-25 04:21:27 +0800] [4283] [INFO] Shutting down: Master +[2026-02-25 20:48:04 +0800] [5993] [INFO] Starting gunicorn 21.2.0 +[2026-02-25 20:48:04 +0800] [5993] [INFO] Gunicorn服务器启动中... +[2026-02-25 20:48:04 +0800] [5993] [INFO] Listening at: http://0.0.0.0:5002 (5993) +[2026-02-25 20:48:04 +0800] [5993] [INFO] Using worker: sync +[2026-02-25 20:48:04 +0800] [5993] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 20:48:04 +0800] [6157] [INFO] Booting worker with pid: 6157 +[2026-02-25 20:48:04 +0800] [6157] [INFO] 工作进程 6157 已启动 +[2026-02-25 20:48:04 +0800] [6157] [INFO] 工作进程 6157 初始化完成 +[2026-02-25 20:48:04 +0800] [5993] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 20:48:04 +0800] [6160] [INFO] Booting worker with pid: 6160 +[2026-02-25 20:48:04 +0800] [6160] [INFO] 工作进程 6160 已启动 +[2026-02-25 20:48:04 +0800] [6160] [INFO] 工作进程 6160 初始化完成 +[2026-02-25 20:48:04 +0800] [5993] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 20:48:04 +0800] [6161] [INFO] Booting worker with pid: 6161 +[2026-02-25 20:48:04 +0800] [6161] [INFO] 工作进程 6161 已启动 +[2026-02-25 20:48:04 +0800] [6161] [INFO] 工作进程 6161 初始化完成 +[2026-02-25 20:48:04 +0800] [5993] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 20:48:04 +0800] [6162] [INFO] Booting worker with pid: 6162 +[2026-02-25 20:48:04 +0800] [6162] [INFO] 工作进程 6162 已启动 +[2026-02-25 20:48:04 +0800] [6162] [INFO] 工作进程 6162 初始化完成 +[2026-02-25 20:48:04 +0800] [5993] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 20:48:04 +0800] [6163] [INFO] Booting worker with pid: 6163 +[2026-02-25 20:48:04 +0800] [6163] [INFO] 工作进程 6163 已启动 +[2026-02-25 20:48:04 +0800] [6163] [INFO] 工作进程 6163 初始化完成 +[2026-02-25 21:16:22 +0800] [5993] [INFO] Handling signal: term +[2026-02-25 21:16:22 +0800] [6162] [INFO] Worker exiting (pid: 6162) +[2026-02-25 21:16:22 +0800] [6157] [INFO] Worker exiting (pid: 6157) +[2026-02-25 21:16:22 +0800] [6160] [INFO] Worker exiting (pid: 6160) +[2026-02-25 21:16:22 +0800] [6161] [INFO] Worker exiting (pid: 6161) +[2026-02-25 21:16:22 +0800] [6163] [INFO] Worker exiting (pid: 6163) +[2026-02-25 21:16:24 +0800] [5993] [INFO] Shutting down: Master +[2026-02-25 21:16:31 +0800] [28666] [INFO] Starting gunicorn 21.2.0 +[2026-02-25 21:16:31 +0800] [28666] [INFO] Gunicorn服务器启动中... +[2026-02-25 21:16:31 +0800] [28666] [INFO] Listening at: http://0.0.0.0:5002 (28666) +[2026-02-25 21:16:31 +0800] [28666] [INFO] Using worker: sync +[2026-02-25 21:16:31 +0800] [28666] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:16:31 +0800] [28747] [INFO] Booting worker with pid: 28747 +[2026-02-25 21:16:31 +0800] [28747] [INFO] 工作进程 28747 已启动 +[2026-02-25 21:16:31 +0800] [28747] [INFO] 工作进程 28747 初始化完成 +[2026-02-25 21:16:31 +0800] [28666] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:16:31 +0800] [28748] [INFO] Booting worker with pid: 28748 +[2026-02-25 21:16:31 +0800] [28748] [INFO] 工作进程 28748 已启动 +[2026-02-25 21:16:31 +0800] [28748] [INFO] 工作进程 28748 初始化完成 +[2026-02-25 21:16:31 +0800] [28666] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:16:31 +0800] [28758] [INFO] Booting worker with pid: 28758 +[2026-02-25 21:16:31 +0800] [28758] [INFO] 工作进程 28758 已启动 +[2026-02-25 21:16:31 +0800] [28758] [INFO] 工作进程 28758 初始化完成 +[2026-02-25 21:16:31 +0800] [28666] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:16:31 +0800] [28759] [INFO] Booting worker with pid: 28759 +[2026-02-25 21:16:31 +0800] [28759] [INFO] 工作进程 28759 已启动 +[2026-02-25 21:16:31 +0800] [28759] [INFO] 工作进程 28759 初始化完成 +[2026-02-25 21:16:31 +0800] [28666] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:16:31 +0800] [28767] [INFO] Booting worker with pid: 28767 +[2026-02-25 21:16:31 +0800] [28767] [INFO] 工作进程 28767 已启动 +[2026-02-25 21:16:31 +0800] [28767] [INFO] 工作进程 28767 初始化完成 +[2026-02-25 21:22:24 +0800] [28666] [INFO] Handling signal: term +[2026-02-25 21:22:24 +0800] [28747] [INFO] Worker exiting (pid: 28747) +[2026-02-25 21:22:24 +0800] [28758] [INFO] Worker exiting (pid: 28758) +[2026-02-25 21:22:24 +0800] [28748] [INFO] Worker exiting (pid: 28748) +[2026-02-25 21:22:24 +0800] [28767] [INFO] Worker exiting (pid: 28767) +[2026-02-25 21:22:24 +0800] [28759] [INFO] Worker exiting (pid: 28759) +[2026-02-25 21:22:26 +0800] [28666] [INFO] Shutting down: Master +[2026-02-25 21:22:36 +0800] [28628] [INFO] Starting gunicorn 21.2.0 +[2026-02-25 21:22:36 +0800] [28628] [INFO] Gunicorn服务器启动中... +[2026-02-25 21:22:36 +0800] [28628] [INFO] Listening at: http://0.0.0.0:5002 (28628) +[2026-02-25 21:22:36 +0800] [28628] [INFO] Using worker: sync +[2026-02-25 21:22:36 +0800] [28628] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:22:36 +0800] [28717] [INFO] Booting worker with pid: 28717 +[2026-02-25 21:22:36 +0800] [28717] [INFO] 工作进程 28717 已启动 +[2026-02-25 21:22:36 +0800] [28628] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:22:36 +0800] [28717] [INFO] 工作进程 28717 初始化完成 +[2026-02-25 21:22:36 +0800] [28718] [INFO] Booting worker with pid: 28718 +[2026-02-25 21:22:36 +0800] [28718] [INFO] 工作进程 28718 已启动 +[2026-02-25 21:22:36 +0800] [28718] [INFO] 工作进程 28718 初始化完成 +[2026-02-25 21:22:36 +0800] [28628] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:22:36 +0800] [28719] [INFO] Booting worker with pid: 28719 +[2026-02-25 21:22:36 +0800] [28719] [INFO] 工作进程 28719 已启动 +[2026-02-25 21:22:36 +0800] [28719] [INFO] 工作进程 28719 初始化完成 +[2026-02-25 21:22:36 +0800] [28628] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:22:36 +0800] [28720] [INFO] Booting worker with pid: 28720 +[2026-02-25 21:22:36 +0800] [28720] [INFO] 工作进程 28720 已启动 +[2026-02-25 21:22:36 +0800] [28720] [INFO] 工作进程 28720 初始化完成 +[2026-02-25 21:22:36 +0800] [28628] [INFO] 工作进程 [booting] 即将启动 +[2026-02-25 21:22:36 +0800] [28721] [INFO] Booting worker with pid: 28721 +[2026-02-25 21:22:36 +0800] [28721] [INFO] 工作进程 28721 已启动 +[2026-02-25 21:22:36 +0800] [28721] [INFO] 工作进程 28721 初始化完成 +[2026-02-26 03:03:43 +0800] [28717] [WARNING] Invalid request from ip=3.130.168.2: Invalid HTTP request line: 'SSH-2.0-Go' +[2026-02-26 03:34:15 +0800] [28721] [INFO] Worker exiting (pid: 28721) +[2026-02-26 03:34:15 +0800] [28720] [INFO] Worker exiting (pid: 28720) +[2026-02-26 03:34:15 +0800] [28717] [INFO] Worker exiting (pid: 28717) +[2026-02-26 03:34:15 +0800] [28719] [INFO] Worker exiting (pid: 28719) +[2026-02-26 03:34:15 +0800] [28718] [INFO] Worker exiting (pid: 28718) +[2026-02-26 03:34:15 +0800] [28628] [INFO] Handling signal: term +[2026-02-26 03:34:15 +0800] [28628] [ERROR] Worker (pid:28717) was sent SIGTERM! +[2026-02-26 03:34:15 +0800] [28628] [ERROR] Worker (pid:28721) was sent SIGTERM! +[2026-02-26 03:34:15 +0800] [28628] [ERROR] Worker (pid:28718) was sent SIGTERM! +[2026-02-26 03:34:15 +0800] [28628] [ERROR] Worker (pid:28720) was sent SIGTERM! +[2026-02-26 03:34:15 +0800] [28628] [ERROR] Worker (pid:28719) was sent SIGTERM! +[2026-02-26 03:34:15 +0800] [28628] [INFO] Shutting down: Master +[2026-02-28 00:46:57 +0800] [16890] [INFO] Starting gunicorn 21.2.0 +[2026-02-28 00:46:57 +0800] [16890] [INFO] Gunicorn服务器启动中... +[2026-02-28 00:46:57 +0800] [16890] [INFO] Listening at: http://0.0.0.0:5002 (16890) +[2026-02-28 00:46:57 +0800] [16890] [INFO] Using worker: sync +[2026-02-28 00:46:57 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 00:46:57 +0800] [17030] [INFO] Booting worker with pid: 17030 +[2026-02-28 00:46:57 +0800] [17030] [INFO] 工作进程 17030 已启动 +[2026-02-28 00:46:57 +0800] [17030] [INFO] 工作进程 17030 初始化完成 +[2026-02-28 00:46:57 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 00:46:57 +0800] [17031] [INFO] Booting worker with pid: 17031 +[2026-02-28 00:46:57 +0800] [17031] [INFO] 工作进程 17031 已启动 +[2026-02-28 00:46:57 +0800] [17031] [INFO] 工作进程 17031 初始化完成 +[2026-02-28 00:46:57 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 00:46:57 +0800] [17032] [INFO] Booting worker with pid: 17032 +[2026-02-28 00:46:57 +0800] [17032] [INFO] 工作进程 17032 已启动 +[2026-02-28 00:46:57 +0800] [17032] [INFO] 工作进程 17032 初始化完成 +[2026-02-28 00:46:57 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 00:46:57 +0800] [17039] [INFO] Booting worker with pid: 17039 +[2026-02-28 00:46:57 +0800] [17039] [INFO] 工作进程 17039 已启动 +[2026-02-28 00:46:57 +0800] [17039] [INFO] 工作进程 17039 初始化完成 +[2026-02-28 00:46:57 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 00:46:57 +0800] [17040] [INFO] Booting worker with pid: 17040 +[2026-02-28 00:46:57 +0800] [17040] [INFO] 工作进程 17040 已启动 +[2026-02-28 00:46:57 +0800] [17040] [INFO] 工作进程 17040 初始化完成 +[2026-02-28 01:04:17 +0800] [16890] [CRITICAL] WORKER TIMEOUT (pid:17039) +[2026-02-28 01:04:17 +0800] [17039] [INFO] 工作进程 17039 异常退出 +[2026-02-28 01:04:17 +0800] [17039] [INFO] Worker exiting (pid: 17039) +[2026-02-28 01:04:18 +0800] [16890] [ERROR] Worker (pid:17039) exited with code 1 +[2026-02-28 01:04:18 +0800] [16890] [ERROR] Worker (pid:17039) exited with code 1. +[2026-02-28 01:04:18 +0800] [16890] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 01:04:18 +0800] [12192] [INFO] Booting worker with pid: 12192 +[2026-02-28 01:04:18 +0800] [12192] [INFO] 工作进程 12192 已启动 +[2026-02-28 01:04:18 +0800] [12192] [INFO] 工作进程 12192 初始化完成 +[2026-02-28 04:29:07 +0800] [17032] [WARNING] Invalid request from ip=3.130.168.2: Invalid HTTP request line: 'SSH-2.0-Go' +[2026-02-28 05:20:36 +0800] [12192] [INFO] Worker exiting (pid: 12192) +[2026-02-28 05:20:36 +0800] [17032] [INFO] Worker exiting (pid: 17032) +[2026-02-28 05:20:36 +0800] [17031] [INFO] Worker exiting (pid: 17031) +[2026-02-28 05:20:36 +0800] [17030] [INFO] Worker exiting (pid: 17030) +[2026-02-28 05:20:36 +0800] [16890] [INFO] Handling signal: term +[2026-02-28 05:20:36 +0800] [17040] [INFO] Worker exiting (pid: 17040) +[2026-02-28 05:20:37 +0800] [16890] [INFO] Shutting down: Master +[2026-02-28 21:12:54 +0800] [7417] [INFO] Starting gunicorn 21.2.0 +[2026-02-28 21:12:54 +0800] [7417] [INFO] Gunicorn服务器启动中... +[2026-02-28 21:12:54 +0800] [7417] [INFO] Listening at: http://0.0.0.0:5002 (7417) +[2026-02-28 21:12:54 +0800] [7417] [INFO] Using worker: sync +[2026-02-28 21:12:54 +0800] [7417] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:12:54 +0800] [7531] [INFO] Booting worker with pid: 7531 +[2026-02-28 21:12:54 +0800] [7531] [INFO] 工作进程 7531 已启动 +[2026-02-28 21:12:54 +0800] [7531] [INFO] 工作进程 7531 初始化完成 +[2026-02-28 21:12:54 +0800] [7417] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:12:54 +0800] [7532] [INFO] Booting worker with pid: 7532 +[2026-02-28 21:12:54 +0800] [7532] [INFO] 工作进程 7532 已启动 +[2026-02-28 21:12:54 +0800] [7532] [INFO] 工作进程 7532 初始化完成 +[2026-02-28 21:12:54 +0800] [7417] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:12:54 +0800] [7533] [INFO] Booting worker with pid: 7533 +[2026-02-28 21:12:54 +0800] [7533] [INFO] 工作进程 7533 已启动 +[2026-02-28 21:12:54 +0800] [7533] [INFO] 工作进程 7533 初始化完成 +[2026-02-28 21:12:54 +0800] [7417] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:12:54 +0800] [7534] [INFO] Booting worker with pid: 7534 +[2026-02-28 21:12:54 +0800] [7534] [INFO] 工作进程 7534 已启动 +[2026-02-28 21:12:54 +0800] [7534] [INFO] 工作进程 7534 初始化完成 +[2026-02-28 21:12:54 +0800] [7417] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:12:54 +0800] [7535] [INFO] Booting worker with pid: 7535 +[2026-02-28 21:12:54 +0800] [7535] [INFO] 工作进程 7535 已启动 +[2026-02-28 21:12:54 +0800] [7535] [INFO] 工作进程 7535 初始化完成 +[2026-02-28 21:16:35 +0800] [7417] [INFO] Handling signal: term +[2026-02-28 21:16:35 +0800] [7533] [INFO] Worker exiting (pid: 7533) +[2026-02-28 21:16:35 +0800] [7531] [INFO] Worker exiting (pid: 7531) +[2026-02-28 21:16:35 +0800] [7532] [INFO] Worker exiting (pid: 7532) +[2026-02-28 21:16:35 +0800] [7534] [INFO] Worker exiting (pid: 7534) +[2026-02-28 21:16:35 +0800] [7535] [INFO] Worker exiting (pid: 7535) +[2026-02-28 21:16:35 +0800] [7417] [ERROR] Worker (pid:7533) was sent SIGTERM! +[2026-02-28 21:16:35 +0800] [7417] [ERROR] Worker (pid:7535) was sent SIGTERM! +[2026-02-28 21:16:35 +0800] [7417] [ERROR] Worker (pid:7534) was sent SIGTERM! +[2026-02-28 21:16:36 +0800] [7417] [INFO] Shutting down: Master +[2026-02-28 21:16:48 +0800] [17158] [INFO] Starting gunicorn 21.2.0 +[2026-02-28 21:16:48 +0800] [17158] [INFO] Gunicorn服务器启动中... +[2026-02-28 21:16:48 +0800] [17158] [INFO] Listening at: http://0.0.0.0:5002 (17158) +[2026-02-28 21:16:48 +0800] [17158] [INFO] Using worker: sync +[2026-02-28 21:16:48 +0800] [17158] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:16:48 +0800] [17232] [INFO] Booting worker with pid: 17232 +[2026-02-28 21:16:48 +0800] [17232] [INFO] 工作进程 17232 已启动 +[2026-02-28 21:16:48 +0800] [17232] [INFO] 工作进程 17232 初始化完成 +[2026-02-28 21:16:48 +0800] [17158] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:16:48 +0800] [17233] [INFO] Booting worker with pid: 17233 +[2026-02-28 21:16:48 +0800] [17233] [INFO] 工作进程 17233 已启动 +[2026-02-28 21:16:48 +0800] [17233] [INFO] 工作进程 17233 初始化完成 +[2026-02-28 21:16:48 +0800] [17158] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:16:48 +0800] [17234] [INFO] Booting worker with pid: 17234 +[2026-02-28 21:16:48 +0800] [17234] [INFO] 工作进程 17234 已启动 +[2026-02-28 21:16:48 +0800] [17234] [INFO] 工作进程 17234 初始化完成 +[2026-02-28 21:16:48 +0800] [17158] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:16:48 +0800] [17235] [INFO] Booting worker with pid: 17235 +[2026-02-28 21:16:48 +0800] [17235] [INFO] 工作进程 17235 已启动 +[2026-02-28 21:16:48 +0800] [17235] [INFO] 工作进程 17235 初始化完成 +[2026-02-28 21:16:48 +0800] [17158] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:16:48 +0800] [17244] [INFO] Booting worker with pid: 17244 +[2026-02-28 21:16:48 +0800] [17244] [INFO] 工作进程 17244 已启动 +[2026-02-28 21:16:48 +0800] [17244] [INFO] 工作进程 17244 初始化完成 +[2026-02-28 21:23:07 +0800] [17158] [INFO] Handling signal: term +[2026-02-28 21:23:07 +0800] [17235] [INFO] Worker exiting (pid: 17235) +[2026-02-28 21:23:07 +0800] [17232] [INFO] Worker exiting (pid: 17232) +[2026-02-28 21:23:07 +0800] [17233] [INFO] Worker exiting (pid: 17233) +[2026-02-28 21:23:07 +0800] [17234] [INFO] Worker exiting (pid: 17234) +[2026-02-28 21:23:07 +0800] [17244] [INFO] Worker exiting (pid: 17244) +[2026-02-28 21:23:09 +0800] [17158] [INFO] Shutting down: Master +[2026-02-28 21:25:09 +0800] [22948] [INFO] Starting gunicorn 21.2.0 +[2026-02-28 21:25:09 +0800] [22948] [INFO] Gunicorn服务器启动中... +[2026-02-28 21:25:09 +0800] [22948] [INFO] Listening at: http://0.0.0.0:5002 (22948) +[2026-02-28 21:25:09 +0800] [22948] [INFO] Using worker: sync +[2026-02-28 21:25:09 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:25:09 +0800] [23002] [INFO] Booting worker with pid: 23002 +[2026-02-28 21:25:09 +0800] [23002] [INFO] 工作进程 23002 已启动 +[2026-02-28 21:25:09 +0800] [23002] [INFO] 工作进程 23002 初始化完成 +[2026-02-28 21:25:09 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:25:10 +0800] [23019] [INFO] Booting worker with pid: 23019 +[2026-02-28 21:25:10 +0800] [23019] [INFO] 工作进程 23019 已启动 +[2026-02-28 21:25:10 +0800] [23019] [INFO] 工作进程 23019 初始化完成 +[2026-02-28 21:25:10 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:25:10 +0800] [23037] [INFO] Booting worker with pid: 23037 +[2026-02-28 21:25:10 +0800] [23037] [INFO] 工作进程 23037 已启动 +[2026-02-28 21:25:10 +0800] [23037] [INFO] 工作进程 23037 初始化完成 +[2026-02-28 21:25:10 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:25:10 +0800] [23048] [INFO] Booting worker with pid: 23048 +[2026-02-28 21:25:10 +0800] [23048] [INFO] 工作进程 23048 已启动 +[2026-02-28 21:25:10 +0800] [23048] [INFO] 工作进程 23048 初始化完成 +[2026-02-28 21:25:10 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[2026-02-28 21:25:10 +0800] [23049] [INFO] Booting worker with pid: 23049 +[2026-02-28 21:25:10 +0800] [23049] [INFO] 工作进程 23049 已启动 +[2026-02-28 21:25:10 +0800] [23049] [INFO] 工作进程 23049 初始化完成 +[2026-02-28 21:35:52,847] 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 21:35:52,893] 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 21:37:53 +0800] [22948] [CRITICAL] WORKER TIMEOUT (pid:23037) +[2026-02-28 21:37:53 +0800] [23037] [INFO] 工作进程 23037 异常退出 +[2026-02-28 21:37:53 +0800] [23037] [INFO] Worker exiting (pid: 23037) +[2026-02-28 21:37:53 +0800] [22948] [ERROR] Worker (pid:23037) exited with code 1 +[2026-02-28 21:37:53 +0800] [22948] [ERROR] Worker (pid:23037) exited with code 1. +[2026-02-28 21:37:53 +0800] [22948] [INFO] 工作进程 [booting] 即将启动 +[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 初始化完成 diff --git a/migrations/__pycache__/env.cpython-312.pyc b/migrations/__pycache__/env.cpython-312.pyc index 75d85dc..223a63e 100644 Binary files a/migrations/__pycache__/env.cpython-312.pyc and b/migrations/__pycache__/env.cpython-312.pyc differ diff --git a/migrations/versions/2e2460729315_add_meeting_minutes_and_resume_.py b/migrations/versions/2e2460729315_add_meeting_minutes_and_resume_.py new file mode 100644 index 0000000..8615446 --- /dev/null +++ b/migrations/versions/2e2460729315_add_meeting_minutes_and_resume_.py @@ -0,0 +1,45 @@ +"""add meeting_minutes and resume_optimization tables + +Revision ID: 2e2460729315 +Revises: 68b9d490d70c +Create Date: 2026-02-23 19:24:03.228837 + +""" +from alembic import op +import sqlalchemy as sa + +revision = '2e2460729315' +down_revision = '68b9d490d70c' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table('meeting_minutes', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('title', sa.String(length=200), nullable=True), + sa.Column('raw_content', sa.Text(), nullable=False), + sa.Column('summary_content', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['user.uid'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('resume_optimization', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('opt_type', sa.String(length=20), nullable=False), + sa.Column('original_content', sa.Text(), nullable=False), + sa.Column('job_description', sa.Text(), nullable=True), + sa.Column('optimized_content', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['user.uid'], ), + sa.PrimaryKeyConstraint('id') + ) + + +def downgrade(): + op.drop_table('resume_optimization') + op.drop_table('meeting_minutes') diff --git a/migrations/versions/68b9d490d70c_add_weeklyreport_and_travelplan_tables.py b/migrations/versions/68b9d490d70c_add_weeklyreport_and_travelplan_tables.py new file mode 100644 index 0000000..b7c5044 --- /dev/null +++ b/migrations/versions/68b9d490d70c_add_weeklyreport_and_travelplan_tables.py @@ -0,0 +1,47 @@ +"""add WeeklyReport and TravelPlan tables + +Revision ID: 68b9d490d70c +Revises: 89df165acd11 +Create Date: 2026-02-23 18:01:32.674136 + +""" +from alembic import op +import sqlalchemy as sa + +revision = '68b9d490d70c' +down_revision = '89df165acd11' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table('travel_plan', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('destination', sa.String(length=200), nullable=False), + sa.Column('days', sa.String(length=20), nullable=True), + sa.Column('people', sa.String(length=20), nullable=True), + sa.Column('preferences', sa.Text(), nullable=True), + sa.Column('budget', sa.String(length=50), nullable=True), + sa.Column('plan_content', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['user.uid'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('weekly_report', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('report_type', sa.String(length=20), nullable=False), + sa.Column('content_input', sa.Text(), nullable=True), + sa.Column('report_content', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['user.uid'], ), + sa.PrimaryKeyConstraint('id') + ) + + +def downgrade(): + op.drop_table('weekly_report') + op.drop_table('travel_plan') diff --git a/migrations/versions/__pycache__/2e2460729315_add_meeting_minutes_and_resume_.cpython-312.pyc b/migrations/versions/__pycache__/2e2460729315_add_meeting_minutes_and_resume_.cpython-312.pyc new file mode 100644 index 0000000..116404c Binary files /dev/null and b/migrations/versions/__pycache__/2e2460729315_add_meeting_minutes_and_resume_.cpython-312.pyc differ diff --git a/migrations/versions/__pycache__/68b9d490d70c_add_weeklyreport_and_travelplan_tables.cpython-312.pyc b/migrations/versions/__pycache__/68b9d490d70c_add_weeklyreport_and_travelplan_tables.cpython-312.pyc new file mode 100644 index 0000000..7f02139 Binary files /dev/null and b/migrations/versions/__pycache__/68b9d490d70c_add_weeklyreport_and_travelplan_tables.cpython-312.pyc differ diff --git a/migrations/versions/__pycache__/89df165acd11_add_admin_user_table.cpython-312.pyc b/migrations/versions/__pycache__/89df165acd11_add_admin_user_table.cpython-312.pyc index bb469e1..a005c56 100644 Binary files a/migrations/versions/__pycache__/89df165acd11_add_admin_user_table.cpython-312.pyc and b/migrations/versions/__pycache__/89df165acd11_add_admin_user_table.cpython-312.pyc differ diff --git a/migrations/versions/__pycache__/e1ec7bb6c8ec_add_favorites_table.cpython-312.pyc b/migrations/versions/__pycache__/e1ec7bb6c8ec_add_favorites_table.cpython-312.pyc index bfcc5bd..3580915 100644 Binary files a/migrations/versions/__pycache__/e1ec7bb6c8ec_add_favorites_table.cpython-312.pyc and b/migrations/versions/__pycache__/e1ec7bb6c8ec_add_favorites_table.cpython-312.pyc differ diff --git a/src/flask_prompt_master/__init__.py b/src/flask_prompt_master/__init__.py index 671e963..ea303a4 100644 --- a/src/flask_prompt_master/__init__.py +++ b/src/flask_prompt_master/__init__.py @@ -1,10 +1,14 @@ -from flask import Flask +from flask import Flask, render_template_string from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_cors import CORS import os +import traceback +import logging from dotenv import load_dotenv +logger = logging.getLogger(__name__) + # 加载环境变量 load_dotenv() @@ -72,6 +76,38 @@ def create_app(config_class=None): from src.flask_prompt_master.routes.travel_planning import travel_planning_bp app.register_blueprint(travel_planning_bp) + # 注册会议纪要整理蓝图 + from src.flask_prompt_master.routes.meeting_minutes import meeting_minutes_bp + app.register_blueprint(meeting_minutes_bp) + + # 注册简历/求职信优化蓝图 + from src.flask_prompt_master.routes.resume_optimization import resume_optimization_bp + app.register_blueprint(resume_optimization_bp) + + # 注册提示词优化应用(使用默认通用提示词优化模板) + from src.flask_prompt_master.routes.prompt_optimization import prompt_optimization_bp + app.register_blueprint(prompt_optimization_bp) + + # 注册智能提示词优化应用(需求描述→生成优化模板→根据模板优化提示词) + from src.flask_prompt_master.routes.smart_prompt_optimization import smart_prompt_optimization_bp + app.register_blueprint(smart_prompt_optimization_bp) + + # 注册智能提示词优化2号专家(与专家模式功能一致,独立代码便于对比优化) + from src.flask_prompt_master.routes.expert_generate_2 import expert_generate_2_bp + app.register_blueprint(expert_generate_2_bp) + + # 注册智能提示词优化3号专家(独立实现,含历史记录) + from src.flask_prompt_master.routes.expert_generate_3 import expert_generate_3_bp + app.register_blueprint(expert_generate_3_bp) + + # 注册 Android 工程师专区(Crash 解读、依赖冲突分析等) + from src.flask_prompt_master.routes.android_tools import android_tools_bp + app.register_blueprint(android_tools_bp) + + # 注册即将上线应用占位蓝图 + from src.flask_prompt_master.routes.placeholder_apps import placeholder_bp + app.register_blueprint(placeholder_bp) + # 初始化后台管理 from src.flask_prompt_master.admin import init_admin init_admin(app) @@ -81,4 +117,21 @@ def create_app(config_class=None): app.logger.info(f"调试模式: {app.config.get('DEBUG', False)}") app.logger.info(f"数据库: {app.config.get('SQLALCHEMY_DATABASE_URI', 'Not set')}") + # 全局 500 错误处理:记录完整堆栈并返回友好页 + @app.errorhandler(500) + def handle_500(err): + tb = traceback.format_exc() + app.logger.error(f"Internal Server Error: {err}\n{tb}") + debug = app.config.get('DEBUG', False) + msg = str(err) if debug else "服务器内部错误,请查看服务端日志。若刚部署新功能,请执行: flask db upgrade" + return render_template_string( + """服务器错误 + +

Internal Server Error

+

{{ msg }}

+

返回首页

+ """, + msg=msg + ), 500 + return app \ No newline at end of file diff --git a/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc b/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc index 76e0ddf..d4b41ac 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/models/__pycache__/models.cpython-312.pyc b/src/flask_prompt_master/models/__pycache__/models.cpython-312.pyc index a5e6c3b..ff1ca86 100644 Binary files a/src/flask_prompt_master/models/__pycache__/models.cpython-312.pyc and b/src/flask_prompt_master/models/__pycache__/models.cpython-312.pyc differ diff --git a/src/flask_prompt_master/models/models.py b/src/flask_prompt_master/models/models.py index 3ba59a3..3427eea 100644 --- a/src/flask_prompt_master/models/models.py +++ b/src/flask_prompt_master/models/models.py @@ -109,4 +109,60 @@ class MealPlan(db.Model): # 关联关系 user = db.relationship('User', backref='meal_plans') - wx_user = db.relationship('WxUser', backref='meal_plans') \ No newline at end of file + wx_user = db.relationship('WxUser', backref='meal_plans') + + +class WeeklyReport(db.Model): + """智能周报/日报保存表""" + __tablename__ = 'weekly_report' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.uid'), nullable=True) + report_type = db.Column(db.String(20), nullable=False) # weekly | daily + content_input = db.Column(db.Text) # 用户输入的工作要点 + report_content = db.Column(db.Text, nullable=False) # 生成的报告内容(Markdown) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + user = db.relationship('User', backref='weekly_reports') + + +class TravelPlan(db.Model): + """旅行攻略保存表""" + __tablename__ = 'travel_plan' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.uid'), nullable=True) + destination = db.Column(db.String(200), nullable=False) + days = db.Column(db.String(20), default='3') + people = db.Column(db.String(20), default='2') + preferences = db.Column(db.Text) + budget = db.Column(db.String(50), default='中等') + plan_content = db.Column(db.Text, nullable=False) # 生成的攻略内容(Markdown) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + user = db.relationship('User', backref='travel_plans') + + +class MeetingMinutes(db.Model): + """会议纪要保存表""" + __tablename__ = 'meeting_minutes' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.uid'), nullable=True) + title = db.Column(db.String(200)) # 会议主题/标题 + raw_content = db.Column(db.Text, nullable=False) # 用户输入的原始内容(转写或要点) + summary_content = db.Column(db.Text, nullable=False) # 生成的纪要内容(Markdown) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + user = db.relationship('User', backref='meeting_minutes') + + +class ResumeOptimization(db.Model): + """简历/求职信优化保存表""" + __tablename__ = 'resume_optimization' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.uid'), nullable=True) + opt_type = db.Column(db.String(20), nullable=False) # resume | cover_letter + original_content = db.Column(db.Text, nullable=False) # 原始简历或求职信内容 + job_description = db.Column(db.Text) # 岗位描述(可选,用于针对性优化) + optimized_content = db.Column(db.Text, nullable=False) # 优化后内容(Markdown) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + user = db.relationship('User', backref='resume_optimizations') \ No newline at end of file diff --git a/src/flask_prompt_master/routes/__pycache__/android_tools.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/android_tools.cpython-312.pyc new file mode 100644 index 0000000..3131791 Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/android_tools.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 new file mode 100644 index 0000000..a32b0ac Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/meeting_minutes.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/meeting_minutes.cpython-312.pyc new file mode 100644 index 0000000..5d27117 Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/meeting_minutes.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/placeholder_apps.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/placeholder_apps.cpython-312.pyc new file mode 100644 index 0000000..171b81d Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/placeholder_apps.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/prompt_optimization.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/prompt_optimization.cpython-312.pyc new file mode 100644 index 0000000..09cddd3 Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/prompt_optimization.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/resume_optimization.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/resume_optimization.cpython-312.pyc new file mode 100644 index 0000000..a8770b6 Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/resume_optimization.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc index e27f57c..cfb41e5 100644 Binary files a/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc and b/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/smart_prompt_optimization.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/smart_prompt_optimization.cpython-312.pyc new file mode 100644 index 0000000..9bcbfab Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/smart_prompt_optimization.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/travel_planning.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/travel_planning.cpython-312.pyc index d67b2a8..1c66248 100644 Binary files a/src/flask_prompt_master/routes/__pycache__/travel_planning.cpython-312.pyc and b/src/flask_prompt_master/routes/__pycache__/travel_planning.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/weekly_report.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/weekly_report.cpython-312.pyc index d65d3c2..70898c5 100644 Binary files a/src/flask_prompt_master/routes/__pycache__/weekly_report.cpython-312.pyc and b/src/flask_prompt_master/routes/__pycache__/weekly_report.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/android_tools.py b/src/flask_prompt_master/routes/android_tools.py new file mode 100644 index 0000000..06a64c5 --- /dev/null +++ b/src/flask_prompt_master/routes/android_tools.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +""" +Android 工程师专区:Crash/异常日志解读、依赖冲突分析 等 +""" +from flask import Blueprint, render_template, request, jsonify +from openai import OpenAI +import logging +import os +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User +from src.flask_prompt_master.models.history_models import PromptHistory, UserStatistics + +logger = logging.getLogger(__name__) +android_tools_bp = Blueprint('android_tools', __name__) + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + +# Crash/异常日志解读 系统提示词 +CRASH_ANALYST_SYSTEM = """你是一位资深的 Android 开发专家,擅长分析崩溃堆栈和 Logcat 日志。 + +用户会粘贴一段 Android 崩溃堆栈(Stack Trace)或 Logcat 异常输出。请: +1. 用简洁的中文说明「发生了什么」(异常类型、发生位置、直接原因) +2. 分析可能的根本原因(如空指针、线程、权限、版本兼容等) +3. 给出 3~5 条具体可操作的排查或修复建议,按优先级排序 +4. 若涉及第三方库或系统 API,可简要说明版本或替代方案 + +输出格式清晰,使用小标题和分点,便于开发者快速定位问题。不要编造不存在的类名或行号。""" + +# 依赖冲突分析 系统提示词 +GRADLE_CONFLICT_SYSTEM = """你是一位资深的 Android/Gradle 构建专家,擅长解决依赖冲突与构建错误。 + +用户会粘贴 Gradle 同步失败的错误信息、依赖冲突报错、或 `./gradlew :app:dependencies` 相关输出。请: +1. 用简洁的中文说明「错误类型」与「冲突/失败的直接原因」 +2. 指出涉及冲突的依赖或模块(group:artifact:version) +3. 给出 3~5 条具体可操作的解决思路,例如:排除传递依赖、统一版本、使用 resolutionStrategy、替换库等,并给出示例代码片段(build.gradle) when 有用 +4. 若涉及 Android Gradle Plugin 或 Kotlin 版本,可提醒兼容性矩阵 + +输出格式清晰,代码块用 markdown 标注,便于开发者直接复制修改。""" + +# 性能优化建议 系统提示词 +PERF_OPTIMIZE_SYSTEM = """你是一位资深的 Android 性能优化专家,熟悉启动、内存、卡顿、包体、电量等优化场景。 + +用户会描述当前遇到的性能问题或优化目标(如:启动慢、内存占用高、列表卡顿、APK 体积大、耗电等),或只给出场景关键词。请: +1. 简要确认用户关注的优化方向 +2. 给出该场景下的优化思路框架(分大类,如:启动可拆为 Application、首屏、多线程等) +3. 列出 5~10 条具体可执行的 Checklist(每条一句话,便于逐项排查或落地) +4. 视情况推荐工具(如 Profiler、LeakCanary、Baseline Profile)或官方文档要点 + +输出格式清晰,使用小标题和分点,便于开发者按清单执行。""" + +# 技术方案评审要点 系统提示词 +TECH_REVIEW_SYSTEM = """你是一位资深的 Android 架构师,擅长技术方案评审与风险识别。 + +用户会粘贴或描述一段技术方案(如:选型说明、架构设计、改造方案、技术调研结论等)。请: +1. 提炼该方案的核心目标与关键决策 +2. 从「可行性、可维护性、性能、兼容性、安全、工期/成本」等维度列出评审要点(每维度 2~5 条具体问题或检查项) +3. 指出该方案下 Android 开发中常见的坑点或易遗漏项(如版本适配、进程/线程、依赖关系、测试覆盖等) +4. 给出 2~4 条改进或补充建议(可选) + +输出格式清晰,使用小标题和分点,便于评审会议或自检。""" + +# Code Review 清单 系统提示词 +CODE_REVIEW_SYSTEM = """你是一位资深的 Android 开发专家,擅长代码规范与 Code Review。 + +用户会说明当前要审查的模块或代码类型(如:Activity/Fragment、网络层、数据库、自定义 View、Jetpack 使用、多线程等),或粘贴一段代码片段。请: +1. 针对该模块/类型,列出 8~15 条 Code Review 检查要点(每条一句话,涵盖:规范、安全、性能、可读性、可测试性、Android 特有问题等) +2. 若用户粘贴了代码,则针对该代码逐条对照检查并给出具体修改建议;若未粘贴代码,则输出通用清单便于 Reviewer 使用 +3. 适当区分「必须项」与「建议项」 + +输出格式清晰,使用小标题和分点,便于 Reviewer 逐项打勾或评论。""" + + +def _get_user_id(): + try: + from flask_login import current_user + if current_user.is_authenticated: + return getattr(current_user, 'id', None) or getattr(current_user, 'uid', None) + except Exception: + pass + from flask import session + uid = session.get('user_id') + if uid is not None: + return uid + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning("获取默认用户失败: %s", e) + return 1 + + +def _call_llm(system_prompt: str, user_content: str, max_tokens: int = 1200) -> str: + try: + resp = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_content} + ], + temperature=0.3, + max_tokens=max_tokens, + timeout=60 + ) + return (resp.choices[0].message.content or "").strip() + except Exception as e: + logger.exception("LLM 调用失败: %s", e) + return "" + + +def _save_to_history(user_id: int, original_input: str, generated_prompt: str, template_name: str): + try: + PromptHistory.add_history( + user_id=user_id, + original_input=original_input, + generated_prompt=generated_prompt, + template_name=template_name + ) + UserStatistics.update_statistics(user_id) + except Exception as e: + logger.warning("保存到历史失败: %s", e) + + +# ---------- Crash/异常日志解读 ---------- +@android_tools_bp.route('/android/crash-log', methods=['GET']) +def crash_log_page(): + return render_template('android_crash_log.html') + + +@android_tools_bp.route('/api/android/crash-log/analyze', methods=['POST']) +def crash_log_analyze_api(): + try: + data = request.get_json() or {} + raw_log = (data.get('input_text') or data.get('raw_log') or '').strip() + if not raw_log: + return jsonify({'success': False, 'message': '请粘贴崩溃堆栈或 Logcat 日志'}) + result = _call_llm(CRASH_ANALYST_SYSTEM, raw_log) + if not result: + return jsonify({'success': False, 'message': '分析失败,请重试'}) + user_id = _get_user_id() + _save_to_history(user_id, raw_log, result, 'Crash/异常日志解读') + return jsonify({'success': True, 'data': {'result': result}}) + except Exception as e: + logger.exception("Crash 解读失败") + return jsonify({'success': False, 'message': str(e) or '分析失败,请重试'}) + + +# ---------- 依赖冲突分析 ---------- +@android_tools_bp.route('/android/gradle-conflict', methods=['GET']) +def gradle_conflict_page(): + return render_template('android_gradle_conflict.html') + + +@android_tools_bp.route('/api/android/gradle-conflict/analyze', methods=['POST']) +def gradle_conflict_analyze_api(): + try: + data = request.get_json() or {} + raw_error = (data.get('input_text') or data.get('raw_error') or '').strip() + if not raw_error: + return jsonify({'success': False, 'message': '请粘贴 Gradle 报错或依赖树片段'}) + result = _call_llm(GRADLE_CONFLICT_SYSTEM, raw_error) + if not result: + return jsonify({'success': False, 'message': '分析失败,请重试'}) + user_id = _get_user_id() + _save_to_history(user_id, raw_error, result, '依赖冲突分析') + return jsonify({'success': True, 'data': {'result': result}}) + except Exception as e: + logger.exception("依赖冲突分析失败") + return jsonify({'success': False, 'message': str(e) or '分析失败,请重试'}) + + +# ---------- 性能优化建议 ---------- +@android_tools_bp.route('/android/perf-optimize', methods=['GET']) +def perf_optimize_page(): + return render_template('android_perf_optimize.html') + + +@android_tools_bp.route('/api/android/perf-optimize/generate', methods=['POST']) +def perf_optimize_api(): + try: + data = request.get_json() or {} + user_input = (data.get('input_text') or '').strip() + if not user_input: + return jsonify({'success': False, 'message': '请描述性能问题或优化场景'}) + result = _call_llm(PERF_OPTIMIZE_SYSTEM, user_input, max_tokens=1400) + if not result: + return jsonify({'success': False, 'message': '生成失败,请重试'}) + user_id = _get_user_id() + _save_to_history(user_id, user_input, result, '性能优化建议') + return jsonify({'success': True, 'data': {'result': result}}) + except Exception as e: + logger.exception("性能优化建议失败") + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +# ---------- 技术方案评审要点 ---------- +@android_tools_bp.route('/android/tech-review', methods=['GET']) +def tech_review_page(): + return render_template('android_tech_review.html') + + +@android_tools_bp.route('/api/android/tech-review/generate', methods=['POST']) +def tech_review_api(): + try: + data = request.get_json() or {} + user_input = (data.get('input_text') or '').strip() + if not user_input: + return jsonify({'success': False, 'message': '请粘贴或描述技术方案内容'}) + result = _call_llm(TECH_REVIEW_SYSTEM, user_input, max_tokens=1400) + if not result: + return jsonify({'success': False, 'message': '生成失败,请重试'}) + user_id = _get_user_id() + _save_to_history(user_id, user_input, result, '技术方案评审要点') + return jsonify({'success': True, 'data': {'result': result}}) + except Exception as e: + logger.exception("技术方案评审失败") + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +# ---------- Code Review 清单 ---------- +@android_tools_bp.route('/android/code-review', methods=['GET']) +def code_review_page(): + return render_template('android_code_review.html') + + +@android_tools_bp.route('/api/android/code-review/generate', methods=['POST']) +def code_review_api(): + try: + data = request.get_json() or {} + user_input = (data.get('input_text') or '').strip() + if not user_input: + return jsonify({'success': False, 'message': '请说明待审查的模块/类型或粘贴代码片段'}) + result = _call_llm(CODE_REVIEW_SYSTEM, user_input, max_tokens=1400) + if not result: + return jsonify({'success': False, 'message': '生成失败,请重试'}) + user_id = _get_user_id() + _save_to_history(user_id, user_input, result, 'Code Review 清单') + return jsonify({'success': True, 'data': {'result': result}}) + except Exception as e: + logger.exception("Code Review 清单失败") + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) diff --git a/src/flask_prompt_master/routes/expert_generate_2.py b/src/flask_prompt_master/routes/expert_generate_2.py new file mode 100644 index 0000000..3543b01 --- /dev/null +++ b/src/flask_prompt_master/routes/expert_generate_2.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- +""" +智能提示词优化2号专家 - 独立实现,与专家模式功能一致但代码完全分离。 +便于后续与专家模式做对比优化,不复用任何专家模式代码。 +""" +from flask import Blueprint, render_template, request, jsonify +from openai import OpenAI +import json +import logging +import os +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__) + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + +# 第一阶段:意图分析提示词(独立写一份) +INTENT_ANALYST_PROMPT = """你是一位资深的意图分析专家,请分析用户输入的意图和需求。 + +你必须严格按照以下JSON格式返回,不要添加任何其他内容: +{ + "core_intent": "技术", + "domain": "具体专业领域", + "key_requirements": ["需求1", "需求2"], + "expected_output": "期望输出的具体形式", + "constraints": ["约束1", "约束2"], + "keywords": ["关键词1", "关键词2"] +} + +注意: +1. 严格遵守JSON格式 +2. core_intent必须是以下之一:技术、创意、分析、咨询 +3. 数组至少包含1个元素 +4. 所有字段都必须存在 +5. 不要包含注释 +6. 不要添加任何额外的文本""" + +# 第二阶段:领域专家模板(独立写一份) +DOMAIN_EXPERT_TEMPLATES = { + "技术": """你是一位专业的技术领域提示工程师。基于以下意图分析,生成一个专业的技术任务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的技术背景和上下文 +2. 具体的技术要求和规范 +3. 性能和质量标准 +4. 技术约束条件 +5. 预期交付成果 +6. 评估标准 + +使用专业技术术语,确保提示词的可执行性和可验证性。""", + "创意": """你是一位专业的创意领域提示工程师。基于以下意图分析,生成一个创意设计提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 创意方向和灵感来源 +2. 风格和氛围要求 +3. 目标受众定义 +4. 设计元素规范 +5. 创意表现形式 +6. 评估标准 + +使用专业创意术语,确保提示词的创新性和可执行性。""", + "分析": """你是一位专业的数据分析提示工程师。基于以下意图分析,生成一个数据分析提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 分析目标和范围 +2. 数据要求和规范 +3. 分析方法和工具 +4. 输出格式要求 +5. 关键指标定义 +6. 质量控制标准 + +使用专业分析术语,确保提示词的科学性和可操作性。""", + "咨询": """你是一位专业的咨询领域提示工程师。基于以下意图分析,生成一个咨询服务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 咨询问题界定 +2. 背景信息要求 +3. 分析框架设定 +4. 建议输出格式 +5. 实施考虑因素 +6. 效果评估标准 + +使用专业咨询术语,确保提示词的专业性和实用性。""" +} + +DEFAULT_EXPERT_TEMPLATE = """你是一位专业的通用领域提示工程师。基于以下意图分析,生成一个专业的提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的目标定义 +2. 具体要求和规范 +3. 质量标准 +4. 约束条件 +5. 预期输出 +6. 评估标准 + +确保提示词的清晰性和可执行性。""" + + +def _get_user_id(): + try: + from flask_login import current_user + if current_user.is_authenticated: + return getattr(current_user, 'id', None) or getattr(current_user, 'uid', None) + except Exception: + pass + from flask import session + uid = session.get('user_id') + if uid is not None: + return uid + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning("获取默认用户失败: %s", e) + return 1 + + +@expert_generate_2_bp.route('/expert-generate-2', methods=['GET']) +def expert_generate_2_page(): + """智能提示词优化2号专家 - 页面""" + return render_template('expert_generate_2.html') + + +@expert_generate_2_bp.route('/api/expert-generate-2/generate', methods=['POST']) +def expert_generate_2_api(): + """智能提示词优化2号专家 - 两阶段生成 API(独立实现,不复用专家模式)""" + try: + if not request.is_json: + return jsonify({'code': 400, 'message': '请求必须是JSON格式', 'data': None}) + + data = request.get_json() or {} + user_input = (data.get('input_text') or '').strip() + if not user_input: + return jsonify({'code': 400, 'message': '请输入您的需求', 'data': None}) + + # 第一阶段:意图分析 + intent_response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": INTENT_ANALYST_PROMPT}, + {"role": "user", "content": user_input} + ], + temperature=0.1, + timeout=60 + ) + intent_analysis_text = intent_response.choices[0].message.content.strip() + intent_analysis_text = intent_analysis_text.replace('```json', '').replace('```', '').strip() + + try: + intent_analysis = json.loads(intent_analysis_text) + required_fields = ['core_intent', 'domain', 'key_requirements', 'expected_output', 'constraints', 'keywords'] + for f in required_fields: + if f not in intent_analysis: + raise ValueError(f"缺少字段: {f}") + if intent_analysis['core_intent'] not in ('技术', '创意', '分析', '咨询'): + intent_analysis['core_intent'] = '技术' + for f in ['key_requirements', 'constraints', 'keywords']: + if not isinstance(intent_analysis.get(f), list) or len(intent_analysis[f]) == 0: + intent_analysis[f] = ['未指定'] + except json.JSONDecodeError as e: + logger.error("2号专家 JSON解析失败: %s", e) + return jsonify({'code': 500, 'message': '意图分析格式有误,请重试', 'data': None}) + except ValueError as e: + logger.error("2号专家 数据验证失败: %s", e) + return jsonify({'code': 500, 'message': str(e), 'data': None}) + + # 第二阶段:领域专家提示生成 + expert_prompt = DOMAIN_EXPERT_TEMPLATES.get( + intent_analysis['core_intent'], + DEFAULT_EXPERT_TEMPLATE + ) + final_response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": expert_prompt.format( + analysis=json.dumps(intent_analysis, ensure_ascii=False, indent=2) + )}, + {"role": "user", "content": user_input} + ], + temperature=0.7, + max_tokens=1000, + timeout=60 + ) + generated_prompt = (final_response.choices[0].message.content or "").strip() + if not generated_prompt: + return jsonify({'code': 500, 'message': '生成失败,请重试', 'data': None}) + + user_id = _get_user_id() + try: + p = Prompt(input_text=user_input, generated_text=generated_prompt, user_id=user_id) + db.session.add(p) + db.session.commit() + except Exception as e: + db.session.rollback() + logger.warning("2号专家 保存 Prompt 失败: %s", e) + try: + PromptHistory.add_history( + user_id=user_id, + original_input=user_input, + generated_prompt=generated_prompt, + template_name='智能提示词优化2号专家' + ) + UserStatistics.update_statistics(user_id) + except Exception as e: + logger.warning("2号专家 保存历史失败: %s", e) + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'intent_analysis': intent_analysis, + 'generated_prompt': generated_prompt + } + }) + except Exception as e: + logger.exception("智能提示词优化2号专家失败") + return jsonify({'code': 500, 'message': str(e) or '生成失败,请重试', 'data': None}) diff --git a/src/flask_prompt_master/routes/expert_generate_3.py b/src/flask_prompt_master/routes/expert_generate_3.py new file mode 100644 index 0000000..cf5b662 --- /dev/null +++ b/src/flask_prompt_master/routes/expert_generate_3.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +""" +智能提示词优化3号专家 - 独立实现,与专家模式/2号专家功能一致但代码完全分离。 +便于后续对比优化,不复用任何其他专家代码。 +含提示词生成历史记录功能。 +""" +from flask import Blueprint, render_template, request, jsonify +from openai import OpenAI +import json +import logging +import os +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__) + +_llm_client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + +INTENT_PROMPT_3 = """你是一位资深的意图分析专家,请分析用户输入的意图和需求。 + +你必须严格按照以下JSON格式返回,不要添加任何其他内容: +{ + "core_intent": "技术", + "domain": "具体专业领域", + "key_requirements": ["需求1", "需求2"], + "expected_output": "期望输出的具体形式", + "constraints": ["约束1", "约束2"], + "keywords": ["关键词1", "关键词2"] +} + +注意: +1. 严格遵守JSON格式 +2. core_intent必须是以下之一:技术、创意、分析、咨询 +3. 数组至少包含1个元素 +4. 所有字段都必须存在 +5. 不要包含注释 +6. 不要添加任何额外的文本""" + +EXPERT_TEMPLATES_3 = { + "技术": """你是一位专业的技术领域提示工程师。基于以下意图分析,生成一个专业的技术任务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的技术背景和上下文 +2. 具体的技术要求和规范 +3. 性能和质量标准 +4. 技术约束条件 +5. 预期交付成果 +6. 评估标准 + +使用专业技术术语,确保提示词的可执行性和可验证性。""", + "创意": """你是一位专业的创意领域提示工程师。基于以下意图分析,生成一个创意设计提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 创意方向和灵感来源 +2. 风格和氛围要求 +3. 目标受众定义 +4. 设计元素规范 +5. 创意表现形式 +6. 评估标准 + +使用专业创意术语,确保提示词的创新性和可执行性。""", + "分析": """你是一位专业的数据分析提示工程师。基于以下意图分析,生成一个数据分析提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 分析目标和范围 +2. 数据要求和规范 +3. 分析方法和工具 +4. 输出格式要求 +5. 关键指标定义 +6. 质量控制标准 + +使用专业分析术语,确保提示词的科学性和可操作性。""", + "咨询": """你是一位专业的咨询领域提示工程师。基于以下意图分析,生成一个咨询服务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 咨询问题界定 +2. 背景信息要求 +3. 分析框架设定 +4. 建议输出格式 +5. 实施考虑因素 +6. 效果评估标准 + +使用专业咨询术语,确保提示词的专业性和实用性。""" +} + +FALLBACK_TEMPLATE_3 = """你是一位专业的通用领域提示工程师。基于以下意图分析,生成一个专业的提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的目标定义 +2. 具体要求和规范 +3. 质量标准 +4. 约束条件 +5. 预期输出 +6. 评估标准 + +确保提示词的清晰性和可执行性。""" + +TEMPLATE_NAME_3 = '智能提示词优化3号专家' + + +def _resolve_user_id(): + try: + from flask_login import current_user + if current_user.is_authenticated: + return getattr(current_user, 'id', None) or getattr(current_user, 'uid', None) + except Exception: + pass + from flask import session + sid = session.get('user_id') + if sid is not None: + return sid + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as ex: + logger.warning("3号专家 获取默认用户失败: %s", ex) + return 1 + + +@expert_generate_3_bp.route('/expert-generate-3', methods=['GET']) +def expert_generate_3_page(): + """智能提示词优化3号专家 - 页面""" + return render_template('expert_generate_3.html') + + +@expert_generate_3_bp.route('/api/expert-generate-3/generate', methods=['POST']) +def expert_generate_3_api(): + """智能提示词优化3号专家 - 两阶段生成 API,含历史记录""" + try: + if not request.is_json: + return jsonify({'code': 400, 'message': '请求必须是JSON格式', 'data': None}) + payload = request.get_json() or {} + raw_input = (payload.get('input_text') or '').strip() + if not raw_input: + return jsonify({'code': 400, 'message': '请输入您的需求', 'data': None}) + resp1 = _llm_client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": INTENT_PROMPT_3}, + {"role": "user", "content": raw_input} + ], + temperature=0.1, + timeout=60 + ) + intent_raw = (resp1.choices[0].message.content or "").strip() + intent_raw = intent_raw.replace('```json', '').replace('```', '').strip() + try: + intent_data = json.loads(intent_raw) + for field in ['core_intent', 'domain', 'key_requirements', 'expected_output', 'constraints', 'keywords']: + if field not in intent_data: + raise ValueError("缺少字段: " + field) + if intent_data['core_intent'] not in ('技术', '创意', '分析', '咨询'): + intent_data['core_intent'] = '技术' + for arr_field in ['key_requirements', 'constraints', 'keywords']: + v = intent_data.get(arr_field) + if not isinstance(v, list) or len(v) == 0: + intent_data[arr_field] = ['未指定'] + except json.JSONDecodeError as e: + logger.error("3号专家 JSON解析失败: %s", e) + return jsonify({'code': 500, 'message': '意图分析格式有误,请重试', 'data': None}) + except ValueError as e: + logger.error("3号专家 数据验证失败: %s", e) + return jsonify({'code': 500, 'message': str(e), 'data': None}) + tpl = EXPERT_TEMPLATES_3.get(intent_data['core_intent'], FALLBACK_TEMPLATE_3) + analysis_str = json.dumps(intent_data, ensure_ascii=False, indent=2) + resp2 = _llm_client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": tpl.format(analysis=analysis_str)}, + {"role": "user", "content": raw_input} + ], + temperature=0.7, + max_tokens=1000, + timeout=60 + ) + 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() + except Exception as e: + db.session.rollback() + logger.warning("3号专家 保存 Prompt 失败: %s", e) + try: + PromptHistory.add_history( + user_id=uid, + original_input=raw_input, + generated_prompt=result_prompt, + template_name=TEMPLATE_NAME_3 + ) + UserStatistics.update_statistics(uid) + except Exception as e: + logger.warning("3号专家 保存历史失败: %s", e) + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': {'intent_analysis': intent_data, 'generated_prompt': result_prompt} + }) + except Exception as e: + logger.exception("智能提示词优化3号专家失败") + return jsonify({'code': 500, 'message': str(e) or '生成失败,请重试', 'data': None}) diff --git a/src/flask_prompt_master/routes/meeting_minutes.py b/src/flask_prompt_master/routes/meeting_minutes.py new file mode 100644 index 0000000..b21d91c --- /dev/null +++ b/src/flask_prompt_master/routes/meeting_minutes.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +""" +会议纪要整理功能路由 +""" +from flask import Blueprint, render_template, request, jsonify, session +from openai import OpenAI +import logging +import os +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User, MeetingMinutes + +logger = logging.getLogger(__name__) +meeting_minutes_bp = Blueprint('meeting_minutes', __name__) + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + + +def _generate_minutes(raw_content: str, title: str) -> str: + """调用 LLM 生成会议纪要。""" + system_prompt = """你是一位专业的会议记录助手,擅长将零散的会议转写或要点整理成结构清晰的会议纪要。 + +要求: +1. 从用户输入中提炼:会议主题、时间/参与人(如有)、讨论要点、结论与决议、待办事项(含责任人/截止时间若可推断)。 +2. 使用 Markdown 格式:一级标题为「一、会议概要」「二、讨论要点」「三、结论与决议」「四、待办事项」等,二级标题和列表项简明扼要。 +3. 语气正式、条理清楚,便于归档和分享。若信息不足可合理归纳,不要编造具体人名与数据。""" + user_prompt = f"""请将以下会议内容整理成会议纪要:\n\n{f'会议主题:{title}\n\n' if title else ''}{raw_content}""" + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ] + response = client.chat.completions.create( + model="deepseek-chat", + messages=messages, + temperature=0.4, + max_tokens=2000, + timeout=50 + ) + return response.choices[0].message.content + + +def _get_meeting_user_id(): + user_id = session.get('user_id') + if user_id is not None: + return user_id + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning(f"获取默认用户失败: {e}") + return 1 + + +@meeting_minutes_bp.route('/meeting-minutes', methods=['GET']) +def minutes_page(): + return render_template('meeting_minutes.html') + + +@meeting_minutes_bp.route('/meeting-minutes/history', methods=['GET']) +def minutes_history_page(): + return render_template('meeting_minutes_history.html') + + +@meeting_minutes_bp.route('/api/meeting-minutes/generate', methods=['POST']) +def generate_minutes_api(): + try: + data = request.get_json() or {} + raw_content = (data.get('raw_content') or '').strip() + title = (data.get('title') or '').strip() + if not raw_content: + return jsonify({'success': False, 'message': '请粘贴或输入会议内容'}) + result = _generate_minutes(raw_content, title) + return jsonify({'success': True, 'data': {'summary': result, 'title': title}}) + except Exception as e: + logger.exception('会议纪要生成失败') + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +@meeting_minutes_bp.route('/api/meeting-minutes/save', methods=['POST']) +def save_minutes_api(): + try: + data = request.get_json() or {} + title = (data.get('title') or '').strip() + raw_content = (data.get('raw_content') or '').strip() + summary_content = (data.get('summary_content') or '').strip() + if not summary_content: + return jsonify({'success': False, 'message': '纪要内容不能为空'}) + user_id = _get_meeting_user_id() + m = MeetingMinutes(user_id=user_id, title=title or None, raw_content=raw_content or '', summary_content=summary_content) + db.session.add(m) + db.session.commit() + return jsonify({'success': True, 'message': '保存成功', 'data': {'id': m.id, 'created_at': m.created_at.isoformat()}}) + except Exception as e: + db.session.rollback() + logger.exception('保存会议纪要失败') + return jsonify({'success': False, 'message': str(e) or '保存失败'}) + + +@meeting_minutes_bp.route('/api/meeting-minutes/list', methods=['GET']) +def list_minutes_api(): + try: + user_id = _get_meeting_user_id() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + pag = MeetingMinutes.query.filter_by(user_id=user_id).order_by(MeetingMinutes.created_at.desc()).paginate(page=page, per_page=per_page, error_out=False) + items = [{'id': x.id, 'title': x.title or '未命名', 'raw_content': (x.raw_content or '')[:200], 'summary_content': x.summary_content, 'created_at': x.created_at.isoformat()} for x in pag.items] + return jsonify({'success': True, 'data': {'plans': items, 'pagination': {'page': pag.page, 'pages': pag.pages, 'per_page': pag.per_page, 'total': pag.total, 'has_next': pag.has_next, 'has_prev': pag.has_prev}}}) + except Exception as e: + logger.exception('列表会议纪要失败') + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@meeting_minutes_bp.route('/api/meeting-minutes/', methods=['GET']) +def get_minutes_api(mid): + try: + user_id = _get_meeting_user_id() + m = MeetingMinutes.query.filter_by(id=mid, user_id=user_id).first() + if not m: + return jsonify({'success': False, 'message': '记录不存在'}) + return jsonify({'success': True, 'data': {'id': m.id, 'title': m.title, 'raw_content': m.raw_content, 'summary_content': m.summary_content, 'created_at': m.created_at.isoformat()}}) + except Exception as e: + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@meeting_minutes_bp.route('/api/meeting-minutes/', methods=['DELETE']) +def delete_minutes_api(mid): + try: + user_id = _get_meeting_user_id() + m = MeetingMinutes.query.filter_by(id=mid, user_id=user_id).first() + if not m: + return jsonify({'success': False, 'message': '记录不存在'}) + db.session.delete(m) + db.session.commit() + return jsonify({'success': True, 'message': '删除成功'}) + except Exception as e: + db.session.rollback() + return jsonify({'success': False, 'message': str(e) or '删除失败'}) diff --git a/src/flask_prompt_master/routes/placeholder_apps.py b/src/flask_prompt_master/routes/placeholder_apps.py new file mode 100644 index 0000000..d34302d --- /dev/null +++ b/src/flask_prompt_master/routes/placeholder_apps.py @@ -0,0 +1,300 @@ +# -*- coding: utf-8 -*- +""" +即将上线应用的占位路由(功能暂未开发,仅展示入口) +""" +from flask import Blueprint, render_template + +placeholder_bp = Blueprint('placeholder', __name__) + +_FEATURES = { + 'book_notes': ('读书笔记/摘要', '输入书名与要点或长文,生成摘要、金句、思维导图式大纲或读后感。', '文化'), + 'parenting': ('育儿/教育助手', '按年龄、主题生成育儿建议、睡前故事、简单科普或习题讲解。', '教育'), + 'fitness': ('健身/运动计划', '根据目标、天数、场地生成一周训练计划与动作要点。', '健康'), + 'contract': ('合同/条款解读', '粘贴合同/条款原文,生成人话版要点、风险提示与建议关注条款。', '法律'), + 'xiaohongshu': ('小红书/短视频脚本', '输入产品或主题与风格,生成标题、分镜文案、口播稿。', '创作'), + 'interview': ('面试模拟/问答准备', '选择岗位类型,AI 出题并给参考答案与点评,支持多轮模拟。', '求职'), + 'holiday': ('节日/祝福语生成', '选择节日或场合,生成祝福语、贺卡文案、红包配文。', '生活'), + 'retrospective': ('个人复盘/周复盘', '输入本周大事与感受,生成结构化复盘与下周重点。', '成长'), + # 以下 20 个为新增占位 + 'todo_schedule': ('待办/日程整理', '输入零散待办,生成按优先级与日期的日程清单。', '效率'), + 'email_polish': ('邮件润色/回复建议', '输入草稿或要点,生成得体、专业的邮件回复。', '办公'), + 'speech_draft': ('演讲稿/汇报稿', '根据主题与场合生成演讲稿或汇报大纲。', '办公'), + 'naming': ('取名/品牌名', '根据行业、风格生成公司名、产品名或宝宝取名建议。', '创意'), + 'recipe': ('菜谱/做法', '根据食材或菜名生成详细做法与 tips。', '生活'), + 'study_plan': ('学习计划/备考规划', '根据考试或目标生成学习计划与复习建议。', '教育'), + 'mood_journal': ('情绪日记/心理疏导', '输入当日感受,生成结构化记录或轻疏导建议。', '成长'), + 'english_learn': ('英语学习/改错', '输入句子或作文,润色、改错并给学习建议。', '教育'), + 'code_comment': ('代码注释/解释', '粘贴代码片段,生成注释或通俗解释。', '技术'), + 'prd_doc': ('产品/需求文档', '根据要点生成 PRD 或需求描述。', '办公'), + 'social_copy': ('朋友圈/微博文案', '根据场景生成短文案、配文。', '生活'), + 'story_outline': ('剧本/故事大纲', '根据题材生成故事梗概或分集大纲。', '创作'), + 'data_insight': ('数据分析解读', '粘贴数据或结论,生成通俗解读与建议。', '办公'), + 'competitor_analysis': ('竞品分析框架', '根据产品类型生成竞品分析维度与模板。', '办公'), + 'news_summary': ('新闻/资讯摘要', '粘贴长文生成摘要与要点。', '效率'), + 'translate_polish': ('翻译润色', '中英互译并润色,适合邮件、文档。', '办公'), + 'contract_draft': ('合同/协议起草', '根据类型生成合同模板或条款建议。', '法律'), + 'event_planning': ('活动策划方案', '根据活动类型生成策划框架与执行清单。', '办公'), + 'year_summary': ('个人年度总结', '输入年度大事与数据,生成总结报告。', '成长'), + 'flash_cards': ('知识卡片/闪卡', '根据主题生成问答式学习卡片。', '教育'), + # 以下 60 个为新增占位 + 'meeting_agenda': ('会议议程生成', '根据议题生成会议议程与时间分配。', '办公'), + 'todo_calendar': ('待办转日历', '将待办转为日历事件描述。', '效率'), + 'email_templates': ('邮件模板库', '常用场景的邮件模板与改写。', '办公'), + 'weekly_template': ('周报模板', '按岗位生成周报结构模板。', '办公'), + 'daily_template': ('日报模板', '按岗位生成日报结构模板。', '办公'), + 'work_log': ('工作日志', '流水记录转结构化工作日志。', '办公'), + 'project_retro': ('项目复盘', '根据项目经过生成复盘框架。', '办公'), + 'okr_draft': ('OKR 起草', '根据方向生成 OKR 草案。', '办公'), + 'meeting_invite': ('会议邀请函', '生成会议邀请内容与议程摘要。', '办公'), + 'leave_request': ('请假条/报销单', '生成请假条或报销说明文案。', '办公'), + 'wrong_questions': ('错题本整理', '错题录入后生成分类与复习建议。', '教育'), + 'knowledge_summary': ('知识点总结', '按章节或主题生成知识点总结。', '教育'), + 'essay_correction': ('作文批改', '作文批改与修改建议。', '教育'), + 'math_steps': ('数学解题步骤', '题目生成解题步骤与思路。', '教育'), + 'word_plan': ('单词记忆计划', '根据词书或目标生成记忆计划。', '教育'), + 'reading_questions': ('阅读理解题生成', '根据文章生成阅读题。', '教育'), + 'speaking_topics': ('口语练习话题', '生成口语话题与参考表达。', '教育'), + 'thesis_outline': ('论文大纲', '根据题目生成论文大纲。', '教育'), + 'class_notes': ('课堂笔记整理', '零散笔记整理成结构化笔记。', '教育'), + 'exam_tips': ('考试押题建议', '根据考纲生成复习与押题建议。', '教育'), + 'wechat_title': ('公众号标题', '根据正文生成多组标题建议。', '创作'), + 'zhihu_answer': ('知乎回答', '根据问题生成回答大纲或草稿。', '创作'), + 'douyin_copy': ('抖音文案', '根据视频内容生成文案与话题。', '创作'), + 'bilibili_desc': ('B站视频简介', '生成视频简介与标签建议。', '创作'), + 'podcast_outline': ('播客大纲', '根据主题生成播客大纲与话题。', '创作'), + 'novel_start': ('小说开篇', '根据设定生成开篇段落或大纲。', '创作'), + 'poem_create': ('诗歌创作', '根据主题或风格生成短诗。', '创作'), + 'couplet': ('对联生成', '根据上联或主题生成对联。', '文化'), + 'joke': ('段子/笑话', '根据场景生成轻松段子。', '生活'), + 'slogan': ('广告语', '根据产品卖点生成广告语。', '创意'), + 'moving_list': ('搬家清单', '生成搬家待办与打包清单。', '生活'), + 'packing_list': ('旅行 packing 清单', '根据目的地与天数生成清单。', '生活'), + 'wedding_list': ('婚礼筹备清单', '生成婚礼筹备事项与时间线。', '生活'), + 'renovation_budget': ('装修预算表', '根据户型生成预算分类表。', '生活'), + 'pet_plan': ('宠物喂养计划', '根据宠物类型生成喂养与护理建议。', '生活'), + 'plant_care': ('植物养护指南', '根据植物品种生成养护要点。', '生活'), + 'appliance_guide': ('家电选购建议', '根据需求生成选购维度与建议。', '生活'), + 'insurance_compare': ('保险对比解读', '条款对比与人话解读。', '生活'), + 'finance_plan': ('理财规划建议', '根据目标生成理财建议框架。', '生活'), + 'expense_category': ('记账分类建议', '流水描述生成分类与标签。', '生活'), + 'diet_tips': ('饮食建议', '根据体质或目标生成饮食建议。', '健康'), + 'sleep_tips': ('睡眠改善建议', '根据情况生成睡眠改善建议。', '健康'), + 'stretch_reminder': ('久坐提醒/拉伸建议', '生成拉伸动作与提醒话术。', '健康'), + 'checkup_read': ('体检报告解读', '指标解读与随访建议。', '健康'), + 'medicine_reminder': ('用药提醒说明', '药品说明转简明提醒与注意。', '健康'), + 'symptom_guide': ('症状自查引导', '症状描述生成就医与自查建议。', '健康'), + 'mental_self_test': ('心理健康自测', '生成自测题与解读框架。', '健康'), + 'quit_plan': ('戒烟/戒糖计划', '生成阶段性计划与替代建议。', '健康'), + 'labor_contract': ('劳动合同要点', '合同要点提炼与风险提示。', '法律'), + 'rent_contract': ('租房合同要点', '租房合同要点与注意项。', '法律'), + 'iou_template': ('借条/欠条模板', '根据金额与关系生成借条模板。', '法律'), + 'disclaimer': ('免责声明生成', '根据场景生成免责声明文案。', '法律'), + 'sql_helper': ('SQL 生成/优化', '根据需求描述生成或优化 SQL。', '技术'), + 'api_doc': ('API 文档生成', '根据接口信息生成文档草稿。', '技术'), + 'regex_gen': ('正则表达式生成', '根据描述生成正则表达式。', '技术'), + 'cli_help': ('命令行帮助', '命令或报错生成使用说明。', '技术'), + 'error_decode': ('错误信息解读', '报错信息转通俗解释与解决思路。', '技术'), + 'git_commit': ('Git 提交信息', '根据变更生成 commit message。', '技术'), + 'tech_blog': ('技术博客大纲', '根据主题生成技术文章大纲。', '技术'), + 'user_story': ('需求转用户故事', '需求描述转用户故事与验收点。', '技术'), + # Android 工程师专区(10 个占位,功能暂不开发) + 'android_crash_log': ('Crash/异常日志解读', '粘贴堆栈或 Logcat,生成通俗解释与可能原因、排查建议。', 'Android'), + 'android_perf_optimize': ('性能优化建议', '根据场景(启动、内存、卡顿等)生成优化思路与 Checklist。', 'Android'), + 'android_tech_review': ('技术方案评审要点', '根据方案描述生成评审维度与常见坑点。', 'Android'), + 'android_code_review': ('Code Review 清单', '根据模块类型生成 Android 代码审查要点。', 'Android'), + 'android_release_notes': ('版本发布说明', '根据 commit 或需求生成 Release Notes。', 'Android'), + 'android_gradle_conflict': ('依赖冲突分析', '根据 Gradle 报错或依赖树生成解决思路。', 'Android'), + 'android_jetpack_choice': ('Jetpack/新 API 选型', '根据需求推荐组件与迁移建议。', 'Android'), + 'android_interview_qa': ('Android 面试题/技术问答', 'Android 岗位面试题与参考答案。', 'Android'), + 'android_arch_design': ('架构/模块划分建议', '根据项目描述生成架构思路与模块划分。', 'Android'), + 'android_doc_translate': ('英文技术文档翻译润色', '官方文档或邮件翻译、润色。', 'Android'), +} + + +def _placeholder_page(feature_key: str): + if feature_key not in _FEATURES: + return render_template('placeholder.html', title='功能', desc='', badge=''), 404 + title, desc, badge = _FEATURES[feature_key] + return render_template('placeholder.html', title=title, desc=desc, badge=badge) + + +@placeholder_bp.route('/app/book-notes') +def book_notes(): + return _placeholder_page('book_notes') + + +@placeholder_bp.route('/app/parenting') +def parenting(): + return _placeholder_page('parenting') + + +@placeholder_bp.route('/app/fitness') +def fitness(): + return _placeholder_page('fitness') + + +@placeholder_bp.route('/app/contract') +def contract(): + return _placeholder_page('contract') + + +@placeholder_bp.route('/app/xiaohongshu') +def xiaohongshu(): + return _placeholder_page('xiaohongshu') + + +@placeholder_bp.route('/app/interview') +def interview(): + return _placeholder_page('interview') + + +@placeholder_bp.route('/app/holiday') +def holiday(): + return _placeholder_page('holiday') + + +@placeholder_bp.route('/app/retrospective') +def retrospective(): + return _placeholder_page('retrospective') + + +@placeholder_bp.route('/app/todo-schedule') +def todo_schedule(): + return _placeholder_page('todo_schedule') + + +@placeholder_bp.route('/app/email-polish') +def email_polish(): + return _placeholder_page('email_polish') + + +@placeholder_bp.route('/app/speech-draft') +def speech_draft(): + return _placeholder_page('speech_draft') + + +@placeholder_bp.route('/app/naming') +def naming(): + return _placeholder_page('naming') + + +@placeholder_bp.route('/app/recipe') +def recipe(): + return _placeholder_page('recipe') + + +@placeholder_bp.route('/app/study-plan') +def study_plan(): + return _placeholder_page('study_plan') + + +@placeholder_bp.route('/app/mood-journal') +def mood_journal(): + return _placeholder_page('mood_journal') + + +@placeholder_bp.route('/app/english-learn') +def english_learn(): + return _placeholder_page('english_learn') + + +@placeholder_bp.route('/app/code-comment') +def code_comment(): + return _placeholder_page('code_comment') + + +@placeholder_bp.route('/app/prd-doc') +def prd_doc(): + return _placeholder_page('prd_doc') + + +@placeholder_bp.route('/app/social-copy') +def social_copy(): + return _placeholder_page('social_copy') + + +@placeholder_bp.route('/app/story-outline') +def story_outline(): + return _placeholder_page('story_outline') + + +@placeholder_bp.route('/app/data-insight') +def data_insight(): + return _placeholder_page('data_insight') + + +@placeholder_bp.route('/app/competitor-analysis') +def competitor_analysis(): + return _placeholder_page('competitor_analysis') + + +@placeholder_bp.route('/app/news-summary') +def news_summary(): + return _placeholder_page('news_summary') + + +@placeholder_bp.route('/app/translate-polish') +def translate_polish(): + return _placeholder_page('translate_polish') + + +@placeholder_bp.route('/app/contract-draft') +def contract_draft(): + return _placeholder_page('contract_draft') + + +@placeholder_bp.route('/app/event-planning') +def event_planning(): + return _placeholder_page('event_planning') + + +@placeholder_bp.route('/app/year-summary') +def year_summary(): + return _placeholder_page('year_summary') + + +@placeholder_bp.route('/app/flash-cards') +def flash_cards(): + return _placeholder_page('flash_cards') + + +def _make_placeholder_view(key): + def view(): + return _placeholder_page(key) + view.__name__ = f'placeholder_{key}' + return view + +_EXTRA_ROUTES = [ + ('meeting_agenda', 'meeting-agenda'), ('todo_calendar', 'todo-calendar'), ('email_templates', 'email-templates'), + ('weekly_template', 'weekly-template'), ('daily_template', 'daily-template'), ('work_log', 'work-log'), + ('project_retro', 'project-retro'), ('okr_draft', 'okr-draft'), ('meeting_invite', 'meeting-invite'), + ('leave_request', 'leave-request'), ('wrong_questions', 'wrong-questions'), ('knowledge_summary', 'knowledge-summary'), + ('essay_correction', 'essay-correction'), ('math_steps', 'math-steps'), ('word_plan', 'word-plan'), + ('reading_questions', 'reading-questions'), ('speaking_topics', 'speaking-topics'), ('thesis_outline', 'thesis-outline'), + ('class_notes', 'class-notes'), ('exam_tips', 'exam-tips'), ('wechat_title', 'wechat-title'), + ('zhihu_answer', 'zhihu-answer'), ('douyin_copy', 'douyin-copy'), ('bilibili_desc', 'bilibili-desc'), + ('podcast_outline', 'podcast-outline'), ('novel_start', 'novel-start'), ('poem_create', 'poem-create'), + ('couplet', 'couplet'), ('joke', 'joke'), ('slogan', 'slogan'), ('moving_list', 'moving-list'), + ('packing_list', 'packing-list'), ('wedding_list', 'wedding-list'), ('renovation_budget', 'renovation-budget'), + ('pet_plan', 'pet-plan'), ('plant_care', 'plant-care'), ('appliance_guide', 'appliance-guide'), + ('insurance_compare', 'insurance-compare'), ('finance_plan', 'finance-plan'), ('expense_category', 'expense-category'), + ('diet_tips', 'diet-tips'), ('sleep_tips', 'sleep-tips'), ('stretch_reminder', 'stretch-reminder'), + ('checkup_read', 'checkup-read'), ('medicine_reminder', 'medicine-reminder'), ('symptom_guide', 'symptom-guide'), + ('mental_self_test', 'mental-self-test'), ('quit_plan', 'quit-plan'), ('labor_contract', 'labor-contract'), + ('rent_contract', 'rent-contract'), ('iou_template', 'iou-template'), ('disclaimer', 'disclaimer'), + ('sql_helper', 'sql-helper'), ('api_doc', 'api-doc'), ('regex_gen', 'regex-gen'), ('cli_help', 'cli-help'), + ('error_decode', 'error-decode'), ('git_commit', 'git-commit'), ('tech_blog', 'tech-blog'), ('user_story', 'user-story'), + # Android 工程师专区(10 个占位) + ('android_crash_log', 'android-crash-log'), + ('android_perf_optimize', 'android-perf-optimize'), + ('android_tech_review', 'android-tech-review'), + ('android_code_review', 'android-code-review'), + ('android_release_notes', 'android-release-notes'), + ('android_gradle_conflict', 'android-gradle-conflict'), + ('android_jetpack_choice', 'android-jetpack-choice'), + ('android_interview_qa', 'android-interview-qa'), + ('android_arch_design', 'android-arch-design'), + ('android_doc_translate', 'android-doc-translate'), +] +for _key, _path in _EXTRA_ROUTES: + placeholder_bp.add_url_rule(f'/app/{_path}', f'placeholder_{_key}', _make_placeholder_view(_key)) diff --git a/src/flask_prompt_master/routes/prompt_optimization.py b/src/flask_prompt_master/routes/prompt_optimization.py new file mode 100644 index 0000000..cfe3a62 --- /dev/null +++ b/src/flask_prompt_master/routes/prompt_optimization.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +""" +提示词优化 AI 应用:使用项目默认的「通用提示词优化」模板 +""" +from flask import Blueprint, render_template, request, jsonify, session +from openai import OpenAI +import logging +import os +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User, Prompt, PromptTemplate + +logger = logging.getLogger(__name__) +prompt_optimization_bp = Blueprint('prompt_optimization', __name__) + +# 与 promptsTemplates.py 中「通用提示词优化」一致的默认系统提示词(DB 无模板时使用) +DEFAULT_SYSTEM_PROMPT = """你是一个专业的提示词工程师,擅长将普通的描述转换为结构化、专业的 Prompt。 + +你需要: +1. 分析用户的需求和意图 +2. 将其转换为清晰、详细的提示词 +3. 添加必要的上下文和约束条件 +4. 使用专业的术语和格式 +5. 确保生成的提示词能够获得最佳的 AI 响应 + +请直接返回优化后的提示词,不要添加任何解释或其他内容。""" + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + + +def _get_default_system_prompt(): + """获取默认的通用提示词优化模板:优先 DB 中 is_default 或名为「通用提示词优化」的模板。""" + t = PromptTemplate.query.filter_by(is_default=True).first() + if t and t.system_prompt: + return t.system_prompt + t = PromptTemplate.query.filter_by(name='通用提示词优化').first() + if t and t.system_prompt: + return t.system_prompt + return DEFAULT_SYSTEM_PROMPT + + +def _generate_optimized_prompt(input_text: str) -> str: + """使用默认通用提示词优化模板调用 LLM 生成优化后的提示词。""" + system_prompt = _get_default_system_prompt() + response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": input_text} + ], + temperature=0.7, + max_tokens=500, + timeout=60 + ) + return response.choices[0].message.content.strip() + + +def _get_user_id(): + user_id = session.get('user_id') + if user_id is not None: + return user_id + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning(f"获取默认用户失败: {e}") + return 1 + + +@prompt_optimization_bp.route('/prompt-optimization', methods=['GET']) +def optimization_page(): + """提示词优化应用页""" + return render_template('prompt_optimization.html') + + +@prompt_optimization_bp.route('/api/prompt-optimization/generate', methods=['POST']) +def generate_api(): + """生成优化后的提示词(使用默认通用提示词优化模板)""" + try: + data = request.get_json() or {} + input_text = (data.get('input_text') or '').strip() + if not input_text: + return jsonify({'success': False, 'message': '请输入您的需求描述'}) + generated_text = _generate_optimized_prompt(input_text) + if not generated_text or generated_text.startswith('提示词生成失败'): + return jsonify({'success': False, 'message': generated_text or '生成失败,请重试'}) + # 保存到 Prompt 表,便于在首页历史中查看 + try: + user_id = _get_user_id() + p = Prompt(input_text=input_text, generated_text=generated_text, user_id=user_id) + db.session.add(p) + db.session.commit() + except Exception as e: + db.session.rollback() + logger.warning(f"保存 Prompt 失败: {e}") + return jsonify({'success': True, 'data': {'generated_text': generated_text}}) + except Exception as e: + logger.exception('提示词优化生成失败') + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) diff --git a/src/flask_prompt_master/routes/resume_optimization.py b/src/flask_prompt_master/routes/resume_optimization.py new file mode 100644 index 0000000..59e9748 --- /dev/null +++ b/src/flask_prompt_master/routes/resume_optimization.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +""" +简历/求职信优化功能路由 +""" +from flask import Blueprint, render_template, request, jsonify, session +from openai import OpenAI +import logging +import os +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User, ResumeOptimization + +logger = logging.getLogger(__name__) +resume_optimization_bp = Blueprint('resume_optimization', __name__) + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + + +def _generate_optimization(opt_type: str, original: str, job_description: str) -> str: + """调用 LLM 优化简历或生成求职信。""" + if opt_type == 'cover_letter': + system_prompt = """你是一位专业的求职顾问,擅长根据简历和岗位描述撰写针对性的求职信。 + +要求: +1. 根据用户提供的简历要点和岗位描述(如有),写一封简洁、得体的求职信。 +2. 结构建议:开头称呼与应聘意向、与岗位匹配的经历与能力、结尾表达意愿与感谢。 +3. 语气专业、诚恳,篇幅适中(一般 300~500 字),便于直接使用或微调。""" + user_prompt = f"""请根据以下内容撰写求职信:\n\n【简历/个人要点】\n{original}\n\n{f'【岗位描述】\n{job_description}' if job_description else ''}""" + else: + system_prompt = """你是一位专业的简历优化师,擅长在保持真实的前提下提升简历的呈现效果。 + +要求: +1. 根据用户提供的简历内容进行优化:润色表述、突出成果与关键词、调整结构层次。 +2. 若用户提供了岗位描述,请使经历与能力描述更贴合该岗位。 +3. 输出使用 Markdown 格式,保持条理清晰。不要编造经历或数据,仅做表述优化。""" + user_prompt = f"""请优化以下简历内容:\n\n{original}\n\n{f'【岗位描述(供针对性优化)】\n{job_description}' if job_description else ''}""" + + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ] + response = client.chat.completions.create( + model="deepseek-chat", + messages=messages, + temperature=0.5, + max_tokens=2000, + timeout=50 + ) + return response.choices[0].message.content + + +def _get_resume_user_id(): + user_id = session.get('user_id') + if user_id is not None: + return user_id + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning(f"获取默认用户失败: {e}") + return 1 + + +@resume_optimization_bp.route('/resume-optimization', methods=['GET']) +def optimization_page(): + """简历/求职信优化页面""" + return render_template('resume_optimization.html') + + +@resume_optimization_bp.route('/resume-optimization/history', methods=['GET']) +def optimization_history_page(): + return render_template('resume_optimization_history.html') + + +@resume_optimization_bp.route('/api/resume-optimization/generate', methods=['POST']) +def generate_optimization_api(): + try: + data = request.get_json() or {} + opt_type = data.get('opt_type', 'resume') # resume | cover_letter + original = (data.get('original_content') or '').strip() + job_description = (data.get('job_description') or '').strip() + if not original: + return jsonify({'success': False, 'message': '请填写简历内容或求职信要点'}) + result = _generate_optimization(opt_type, original, job_description) + return jsonify({'success': True, 'data': {'optimized': result, 'opt_type': opt_type}}) + except Exception as e: + logger.exception('简历/求职信优化失败') + return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +@resume_optimization_bp.route('/api/resume-optimization/save', methods=['POST']) +def save_optimization_api(): + try: + data = request.get_json() or {} + opt_type = data.get('opt_type', 'resume') + original_content = (data.get('original_content') or '').strip() + job_description = (data.get('job_description') or '').strip() + optimized_content = (data.get('optimized_content') or '').strip() + if not optimized_content: + return jsonify({'success': False, 'message': '优化内容不能为空'}) + user_id = _get_resume_user_id() + r = ResumeOptimization(user_id=user_id, opt_type=opt_type, original_content=original_content, job_description=job_description or None, optimized_content=optimized_content) + db.session.add(r) + db.session.commit() + return jsonify({'success': True, 'message': '保存成功', 'data': {'id': r.id, 'created_at': r.created_at.isoformat()}}) + except Exception as e: + db.session.rollback() + logger.exception('保存简历优化失败') + return jsonify({'success': False, 'message': str(e) or '保存失败'}) + + +@resume_optimization_bp.route('/api/resume-optimization/list', methods=['GET']) +def list_optimization_api(): + try: + user_id = _get_resume_user_id() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + pag = ResumeOptimization.query.filter_by(user_id=user_id).order_by(ResumeOptimization.created_at.desc()).paginate(page=page, per_page=per_page, error_out=False) + items = [{'id': x.id, 'opt_type': x.opt_type, 'original_content': (x.original_content or '')[:200], 'optimized_content': x.optimized_content, 'created_at': x.created_at.isoformat()} for x in pag.items] + return jsonify({'success': True, 'data': {'plans': items, 'pagination': {'page': pag.page, 'pages': pag.pages, 'per_page': pag.per_page, 'total': pag.total, 'has_next': pag.has_next, 'has_prev': pag.has_prev}}}) + except Exception as e: + logger.exception('列表简历优化失败') + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@resume_optimization_bp.route('/api/resume-optimization/', methods=['GET']) +def get_optimization_api(rid): + try: + user_id = _get_resume_user_id() + r = ResumeOptimization.query.filter_by(id=rid, user_id=user_id).first() + if not r: + return jsonify({'success': False, 'message': '记录不存在'}) + return jsonify({'success': True, 'data': {'id': r.id, 'opt_type': r.opt_type, 'original_content': r.original_content, 'job_description': r.job_description, 'optimized_content': r.optimized_content, 'created_at': r.created_at.isoformat()}}) + except Exception as e: + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@resume_optimization_bp.route('/api/resume-optimization/', methods=['DELETE']) +def delete_optimization_api(rid): + try: + user_id = _get_resume_user_id() + r = ResumeOptimization.query.filter_by(id=rid, user_id=user_id).first() + if not r: + return jsonify({'success': False, 'message': '记录不存在'}) + db.session.delete(r) + db.session.commit() + return jsonify({'success': True, 'message': '删除成功'}) + except Exception as e: + db.session.rollback() + return jsonify({'success': False, 'message': str(e) or '删除失败'}) diff --git a/src/flask_prompt_master/routes/routes.py b/src/flask_prompt_master/routes/routes.py index 975588e..ed8a9fd 100644 --- a/src/flask_prompt_master/routes/routes.py +++ b/src/flask_prompt_master/routes/routes.py @@ -1323,4 +1323,3 @@ def expert_generate(): """专家提示词生成页面""" return render_template('expert_generate.html') -# ... 其他路由保持不变,但要把 @app 改成 @main_bp ... \ No newline at end of file diff --git a/src/flask_prompt_master/routes/smart_prompt_optimization.py b/src/flask_prompt_master/routes/smart_prompt_optimization.py new file mode 100644 index 0000000..8fb25e2 --- /dev/null +++ b/src/flask_prompt_master/routes/smart_prompt_optimization.py @@ -0,0 +1,188 @@ +# -*- coding: utf-8 -*- +""" +智能提示词优化:根据用户需求描述先生成对应的优化模板,再根据模板优化用户提示词。 +复用项目默认的专家提示词生成器逻辑(意图分析 + 领域)来生成「优化师模板」。 +""" +from flask import Blueprint, render_template, request, jsonify, session +from openai import OpenAI +import json +import logging +import os +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__) +smart_prompt_optimization_bp = Blueprint('smart_prompt_optimization', __name__) + +client = OpenAI( + api_key=os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc', + base_url=os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +) + +# 与 routes.py 中专家提示词生成器一致的意图分析提示词 +INTENT_ANALYST_PROMPT = """你是一位资深的意图分析专家,请分析用户输入的意图和需求。 + +你必须严格按照以下JSON格式返回,不要添加任何其他内容: +{ + "core_intent": "技术", + "domain": "具体专业领域", + "key_requirements": ["需求1", "需求2"], + "expected_output": "期望输出的具体形式", + "constraints": ["约束1", "约束2"], + "keywords": ["关键词1", "关键词2"] +} + +注意:core_intent 必须是以下之一:技术、创意、分析、咨询。严格遵守JSON格式,不要包含注释。""" + +# 根据意图分析生成「优化师系统提示词」的提示 +OPTIMIZER_TEMPLATE_GENERATOR = """你是一位元提示工程师。用户将提供一段「希望如何优化提示词」的需求描述,以及系统已分析出的意图与领域信息。 + +请根据该需求与意图分析,生成一段「提示词优化师」的系统提示词(即优化准则)。这段系统提示词将用于指导 AI:当用户随后给出一段待优化的提示词时,应如何按照这些准则进行优化。 + +要求: +1. 只输出这一段优化师系统提示词,不要任何解释、标题或前后缀。 +2. 内容应体现用户需求中的领域、关键要求和约束。 +3. 语言简洁专业,可直接作为 LLM 的 system 使用。""" + + +def _analyze_intent(requirement_desc: str): + """第一阶段:意图分析(与专家提示词生成器一致)。返回解析后的 dict 或 None。""" + try: + resp = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": INTENT_ANALYST_PROMPT}, + {"role": "user", "content": requirement_desc} + ], + temperature=0.1, + timeout=60 + ) + text = resp.choices[0].message.content.strip() + text = text.replace('```json', '').replace('```', '').strip() + data = json.loads(text) + required = ['core_intent', 'domain', 'key_requirements', 'expected_output', 'constraints', 'keywords'] + for f in required: + if f not in data: + raise ValueError(f"缺少字段: {f}") + if data['core_intent'] not in ('技术', '创意', '分析', '咨询'): + data['core_intent'] = '技术' + for f in ['key_requirements', 'constraints', 'keywords']: + if not isinstance(data.get(f), list) or len(data[f]) == 0: + data[f] = ['未指定'] + return data + except Exception as e: + logger.warning("意图分析失败: %s", e) + return None + + +def _generate_optimizer_template(requirement_desc: str, intent_analysis: dict) -> str: + """根据需求描述与意图分析,生成优化师系统提示词(模板)。""" + user_msg = f"""用户需求描述:\n{requirement_desc}\n\n意图分析:\n{json.dumps(intent_analysis, ensure_ascii=False, indent=2)}""" + resp = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": OPTIMIZER_TEMPLATE_GENERATOR}, + {"role": "user", "content": user_msg} + ], + temperature=0.5, + max_tokens=800, + timeout=60 + ) + return resp.choices[0].message.content.strip() + + +def _optimize_with_template(optimizer_system: str, prompt_to_optimize: str) -> str: + """使用生成的优化师模板,对用户提示词进行优化。""" + resp = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": optimizer_system}, + {"role": "user", "content": prompt_to_optimize} + ], + temperature=0.7, + max_tokens=1000, + timeout=60 + ) + return resp.choices[0].message.content.strip() + + +def _get_user_id(): + """与历史页 get_current_user_id 完全一致,未登录统一用 1,保证历史列表能查到""" + try: + from flask_login import current_user + if current_user.is_authenticated: + return getattr(current_user, 'id', None) or getattr(current_user, 'uid', None) + except Exception: + pass + return 1 + + +@smart_prompt_optimization_bp.route('/smart-prompt-optimization', methods=['GET']) +def optimization_page(): + """智能提示词优化应用页""" + return render_template('smart_prompt_optimization.html') + + +@smart_prompt_optimization_bp.route('/api/smart-prompt-optimization/generate', methods=['POST']) +def generate_api(): + """ + 与专家提示词生成器一致的逻辑:仅一个输入「需求描述」。 + 两阶段:1)意图分析 2)根据需求生成优化模板,再用模板将用户需求优化成专家级提示词。 + 请求体:input_text(请描述您的需求) + """ + try: + if not request.is_json: + return jsonify({'code': 400, 'message': '请求必须是JSON格式', 'data': None}) + data = request.get_json() or {} + user_input = (data.get('input_text') or '').strip() + if not user_input: + return jsonify({'code': 400, 'message': '请输入您的需求', 'data': None}) + + # 第一阶段:意图分析(与专家提示词生成器一致) + intent_analysis = _analyze_intent(user_input) + if not intent_analysis: + return jsonify({'code': 500, 'message': '意图分析失败,请重试', 'data': None}) + + # 第二阶段:根据需求与意图生成「优化师模板」,再用该模板将用户需求优化成专家级提示词 + optimizer_template = _generate_optimizer_template(user_input, intent_analysis) + if not optimizer_template: + return jsonify({'code': 500, 'message': '生成优化模板失败,请重试', 'data': None}) + # 用户输入即「待优化内容」,用模板优化后得到最终专家提示词 + generated_prompt = _optimize_with_template(optimizer_template, user_input) + if not generated_prompt: + return jsonify({'code': 500, 'message': '优化失败,请重试', 'data': None}) + + user_id = _get_user_id() + # 保存到 Prompt 表 + try: + p = Prompt(input_text=user_input, generated_text=generated_prompt, user_id=user_id) + db.session.add(p) + db.session.commit() + except Exception as e: + db.session.rollback() + logger.warning("保存 Prompt 失败: %s", e) + # 同时保存到 PromptHistory,以便在「历史」中查看 + try: + PromptHistory.add_history( + user_id=user_id, + original_input=user_input, + generated_prompt=generated_prompt, + template_name='智能提示词优化' + ) + UserStatistics.update_statistics(user_id) + except Exception as e: + logger.warning("保存到历史失败: %s", e) + + # 返回格式与专家提示词生成器一致,便于前端统一展示 + return jsonify({ + 'code': 200, + 'message': 'ok', + 'data': { + 'intent_analysis': intent_analysis, + 'generated_prompt': generated_prompt, + } + }) + except Exception as e: + logger.exception("智能提示词优化失败") + return jsonify({'code': 500, 'message': str(e) or '生成失败,请重试', 'data': None}) diff --git a/src/flask_prompt_master/routes/travel_planning.py b/src/flask_prompt_master/routes/travel_planning.py index a510c5f..de36bdf 100644 --- a/src/flask_prompt_master/routes/travel_planning.py +++ b/src/flask_prompt_master/routes/travel_planning.py @@ -2,10 +2,13 @@ """ 旅行攻略规划功能路由 """ -from flask import Blueprint, render_template, request, jsonify +from flask import Blueprint, render_template, request, jsonify, session from openai import OpenAI import logging import os +from sqlalchemy.exc import OperationalError +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User, TravelPlan logger = logging.getLogger(__name__) travel_planning_bp = Blueprint('travel_planning', __name__) @@ -53,10 +56,32 @@ def _generate_travel_plan(destination: str, days: str, people: str, preferences: return response.choices[0].message.content +def _get_travel_user_id(): + user_id = session.get('user_id') + if user_id is not None: + return user_id + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning(f"获取默认用户失败: {e}") + return 1 + + +def _is_table_missing(e): + """判断是否为表不存在类错误""" + msg = (e.orig or e).args[0] if hasattr(e, 'orig') and e.orig else str(e) + return 'exist' in msg.lower() or '1146' in str(msg) or 'no such table' in msg.lower() + + @travel_planning_bp.route('/travel-planning', methods=['GET']) def travel_page(): """旅行攻略规划页面""" - return render_template('travel_planning.html') + try: + return render_template('travel_planning.html') + except Exception as e: + logger.exception('旅行攻略页面渲染失败') + raise @travel_planning_bp.route('/api/travel-planning/generate', methods=['POST']) @@ -76,3 +101,91 @@ def generate_travel_api(): except Exception as e: logger.exception('旅行攻略生成失败') return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +@travel_planning_bp.route('/travel-planning/history', methods=['GET']) +def travel_history_page(): + return render_template('travel_planning_history.html') + + +@travel_planning_bp.route('/api/travel-planning/save', methods=['POST']) +def save_travel_api(): + try: + data = request.get_json() or {} + destination = (data.get('destination') or '').strip() + plan_content = (data.get('plan_content') or '').strip() + if not plan_content: + return jsonify({'success': False, 'message': '攻略内容不能为空'}) + user_id = _get_travel_user_id() + t = TravelPlan(user_id=user_id, destination=destination or '未填写', + days=data.get('days', '3'), people=data.get('people', '2'), + preferences=(data.get('preferences') or '').strip(), + budget=(data.get('budget') or '中等').strip(), plan_content=plan_content) + db.session.add(t) + db.session.commit() + return jsonify({'success': True, 'message': '保存成功', 'data': {'id': t.id, 'created_at': t.created_at.isoformat()}}) + except OperationalError as e: + db.session.rollback() + if _is_table_missing(e): + return jsonify({'success': False, 'message': '数据库表未创建,请先在项目目录执行: FLASK_APP=run_dev.py flask db upgrade'}) + logger.exception('保存旅行攻略失败') + return jsonify({'success': False, 'message': str(e) or '保存失败'}) + except Exception as e: + db.session.rollback() + logger.exception('保存旅行攻略失败') + return jsonify({'success': False, 'message': str(e) or '保存失败'}) + + +@travel_planning_bp.route('/api/travel-planning/list', methods=['GET']) +def list_travel_api(): + try: + user_id = _get_travel_user_id() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + pag = TravelPlan.query.filter_by(user_id=user_id).order_by(TravelPlan.created_at.desc()).paginate(page=page, per_page=per_page, error_out=False) + items = [{'id': x.id, 'destination': x.destination, 'days': x.days, 'people': x.people, 'plan_content': x.plan_content, 'created_at': x.created_at.isoformat()} for x in pag.items] + return jsonify({'success': True, 'data': {'plans': items, 'pagination': {'page': pag.page, 'pages': pag.pages, 'per_page': pag.per_page, 'total': pag.total, 'has_next': pag.has_next, 'has_prev': pag.has_prev}}}) + except OperationalError as e: + if _is_table_missing(e): + return jsonify({'success': False, 'message': '数据库表未创建,请先在项目目录执行: FLASK_APP=run_dev.py flask db upgrade'}) + logger.exception('列表旅行攻略失败') + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + except Exception as e: + logger.exception('列表旅行攻略失败') + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@travel_planning_bp.route('/api/travel-planning/', methods=['GET']) +def get_travel_api(tid): + try: + user_id = _get_travel_user_id() + t = TravelPlan.query.filter_by(id=tid, user_id=user_id).first() + if not t: + return jsonify({'success': False, 'message': '记录不存在'}) + return jsonify({'success': True, 'data': {'id': t.id, 'destination': t.destination, 'days': t.days, 'people': t.people, 'preferences': t.preferences, 'budget': t.budget, 'plan_content': t.plan_content, 'created_at': t.created_at.isoformat()}}) + except OperationalError as e: + if _is_table_missing(e): + return jsonify({'success': False, 'message': '数据库表未创建,请先执行: FLASK_APP=run_dev.py flask db upgrade'}) + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + except Exception as e: + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@travel_planning_bp.route('/api/travel-planning/', methods=['DELETE']) +def delete_travel_api(tid): + try: + user_id = _get_travel_user_id() + t = TravelPlan.query.filter_by(id=tid, user_id=user_id).first() + if not t: + return jsonify({'success': False, 'message': '记录不存在'}) + db.session.delete(t) + db.session.commit() + return jsonify({'success': True, 'message': '删除成功'}) + except OperationalError as e: + db.session.rollback() + if _is_table_missing(e): + return jsonify({'success': False, 'message': '数据库表未创建,请先执行: FLASK_APP=run_dev.py flask db upgrade'}) + return jsonify({'success': False, 'message': str(e) or '删除失败'}) + except Exception as e: + db.session.rollback() + return jsonify({'success': False, 'message': str(e) or '删除失败'}) diff --git a/src/flask_prompt_master/routes/weekly_report.py b/src/flask_prompt_master/routes/weekly_report.py index 31d3a03..9e18624 100644 --- a/src/flask_prompt_master/routes/weekly_report.py +++ b/src/flask_prompt_master/routes/weekly_report.py @@ -2,10 +2,12 @@ """ 智能周报/日报生成功能路由 """ -from flask import Blueprint, render_template, request, jsonify +from flask import Blueprint, render_template, request, jsonify, session from openai import OpenAI import logging import os +from src.flask_prompt_master import db +from src.flask_prompt_master.models.models import User, WeeklyReport logger = logging.getLogger(__name__) weekly_report_bp = Blueprint('weekly_report', __name__) @@ -41,6 +43,18 @@ def _generate_report(report_type: str, content: str) -> str: return response.choices[0].message.content +def _get_report_user_id(): + user_id = session.get('user_id') + if user_id is not None: + return user_id + try: + u = User.query.filter_by(login_name='admin').first() + return u.uid if u else 1 + except Exception as e: + logger.warning(f"获取默认用户失败: {e}") + return 1 + + @weekly_report_bp.route('/weekly-report', methods=['GET']) def report_page(): """智能周报生成页面""" @@ -61,3 +75,69 @@ def generate_report_api(): except Exception as e: logger.exception('周报生成失败') return jsonify({'success': False, 'message': str(e) or '生成失败,请重试'}) + + +@weekly_report_bp.route('/weekly-report/history', methods=['GET']) +def report_history_page(): + return render_template('weekly_report_history.html') + + +@weekly_report_bp.route('/api/weekly-report/save', methods=['POST']) +def save_report_api(): + try: + data = request.get_json() or {} + report_type = data.get('report_type', 'weekly') + content_input = (data.get('content_input') or '').strip() + report_content = (data.get('report_content') or '').strip() + if not report_content: + return jsonify({'success': False, 'message': '报告内容不能为空'}) + user_id = _get_report_user_id() + r = WeeklyReport(user_id=user_id, report_type=report_type, content_input=content_input, report_content=report_content) + db.session.add(r) + db.session.commit() + return jsonify({'success': True, 'message': '保存成功', 'data': {'id': r.id, 'created_at': r.created_at.isoformat()}}) + except Exception as e: + db.session.rollback() + logger.exception('保存周报失败') + return jsonify({'success': False, 'message': str(e) or '保存失败'}) + + +@weekly_report_bp.route('/api/weekly-report/list', methods=['GET']) +def list_reports_api(): + try: + user_id = _get_report_user_id() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + pag = WeeklyReport.query.filter_by(user_id=user_id).order_by(WeeklyReport.created_at.desc()).paginate(page=page, per_page=per_page, error_out=False) + items = [{'id': x.id, 'report_type': x.report_type, 'content_input': (x.content_input or '')[:200], 'report_content': x.report_content, 'created_at': x.created_at.isoformat()} for x in pag.items] + return jsonify({'success': True, 'data': {'plans': items, 'pagination': {'page': pag.page, 'pages': pag.pages, 'per_page': pag.per_page, 'total': pag.total, 'has_next': pag.has_next, 'has_prev': pag.has_prev}}}) + except Exception as e: + logger.exception('列表周报失败') + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@weekly_report_bp.route('/api/weekly-report/', methods=['GET']) +def get_report_api(rid): + try: + user_id = _get_report_user_id() + r = WeeklyReport.query.filter_by(id=rid, user_id=user_id).first() + if not r: + return jsonify({'success': False, 'message': '记录不存在'}) + return jsonify({'success': True, 'data': {'id': r.id, 'report_type': r.report_type, 'content_input': r.content_input, 'report_content': r.report_content, 'created_at': r.created_at.isoformat()}}) + except Exception as e: + return jsonify({'success': False, 'message': str(e) or '获取失败'}) + + +@weekly_report_bp.route('/api/weekly-report/', methods=['DELETE']) +def delete_report_api(rid): + try: + user_id = _get_report_user_id() + r = WeeklyReport.query.filter_by(id=rid, user_id=user_id).first() + if not r: + return jsonify({'success': False, 'message': '记录不存在'}) + db.session.delete(r) + db.session.commit() + return jsonify({'success': True, 'message': '删除成功'}) + except Exception as e: + db.session.rollback() + return jsonify({'success': False, 'message': str(e) or '删除失败'}) diff --git a/src/flask_prompt_master/templates/android_code_review.html b/src/flask_prompt_master/templates/android_code_review.html new file mode 100644 index 0000000..b1fc269 --- /dev/null +++ b/src/flask_prompt_master/templates/android_code_review.html @@ -0,0 +1,112 @@ +{% extends "base.html" %} +{% block title %}Code Review 清单 - 提示词大师{% endblock %} +{% block content %} +
+
+
+ + 查看历史 +
+
+
+
+
+
模块或代码
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
审查要点
+ +
+
+
+
+ +

说明模块类型或粘贴代码后,点击「生成清单」

+

结果将自动保存到历史记录

+
+
+
+
+
+
+
+ + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/android_crash_log.html b/src/flask_prompt_master/templates/android_crash_log.html new file mode 100644 index 0000000..856f02a --- /dev/null +++ b/src/flask_prompt_master/templates/android_crash_log.html @@ -0,0 +1,113 @@ +{% extends "base.html" %} +{% block title %}Crash/异常日志解读 - 提示词大师{% endblock %} +{% block content %} +
+
+
+ + 查看历史 +
+
+
+
+
+
粘贴日志
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
解读结果
+ +
+
+
+
+ +

粘贴崩溃堆栈或 Logcat 后,点击「分析解读」

+

结果将自动保存到历史记录

+
+
+
+
+
+
+
+ + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/android_gradle_conflict.html b/src/flask_prompt_master/templates/android_gradle_conflict.html new file mode 100644 index 0000000..ea6069e --- /dev/null +++ b/src/flask_prompt_master/templates/android_gradle_conflict.html @@ -0,0 +1,116 @@ +{% extends "base.html" %} +{% block title %}依赖冲突分析 - 提示词大师{% endblock %} +{% block content %} +
+
+
+ + 查看历史 +
+
+
+
+
+
粘贴报错
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
分析结果
+ +
+
+
+
+ +

粘贴 Gradle 报错或依赖树后,点击「分析解读」

+

结果将自动保存到历史记录

+
+
+
+
+
+
+
+ + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/android_perf_optimize.html b/src/flask_prompt_master/templates/android_perf_optimize.html new file mode 100644 index 0000000..327f3e7 --- /dev/null +++ b/src/flask_prompt_master/templates/android_perf_optimize.html @@ -0,0 +1,111 @@ +{% extends "base.html" %} +{% block title %}性能优化建议 - 提示词大师{% endblock %} +{% block content %} +
+
+
+ + 查看历史 +
+
+
+
+
+
描述场景
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
优化建议
+ +
+
+
+
+ +

描述性能问题或优化场景后,点击「生成建议」

+

结果将自动保存到历史记录

+
+
+
+
+
+
+
+ + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/android_tech_review.html b/src/flask_prompt_master/templates/android_tech_review.html new file mode 100644 index 0000000..ed30dc1 --- /dev/null +++ b/src/flask_prompt_master/templates/android_tech_review.html @@ -0,0 +1,111 @@ +{% extends "base.html" %} +{% block title %}技术方案评审要点 - 提示词大师{% endblock %} +{% block content %} +
+
+
+ + 查看历史 +
+
+
+
+
+
方案内容
+
+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
评审要点
+ +
+
+
+
+ +

粘贴或描述技术方案后,点击「生成评审要点」

+

结果将自动保存到历史记录

+
+
+
+
+
+
+
+ + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/expert_generate.html b/src/flask_prompt_master/templates/expert_generate.html index f464f3e..2560e44 100644 --- a/src/flask_prompt_master/templates/expert_generate.html +++ b/src/flask_prompt_master/templates/expert_generate.html @@ -5,7 +5,7 @@
-

专家提示词生成器

+

{{ page_title | default('专家提示词生成器') }}

返回基础模式 diff --git a/src/flask_prompt_master/templates/expert_generate_2.html b/src/flask_prompt_master/templates/expert_generate_2.html new file mode 100644 index 0000000..3e2ea75 --- /dev/null +++ b/src/flask_prompt_master/templates/expert_generate_2.html @@ -0,0 +1,157 @@ +{% extends "base.html" %} +{% block title %}智能提示词优化2号专家 - 提示词大师{% endblock %} +{% block content %} +
+
+
+
+

智能提示词优化2号专家

+ +
+ +
+
+
+
+ + +
详细描述您的需求,系统将进行专业分析并生成高质量提示词
+
+ +
+
+
+ +
+
+ 生成中... +
+

正在分析需求并生成专业提示词...

+
+ +
+
+
生成结果
+
+
需求分析
+
+
+
+

核心意图:

+

专业领域:

+
+
+

预期输出:

+
+
+
+

关键需求:

+
    +
    +
    +

    约束条件:

    +
      +
      +
      +
      +
      +
      生成的专家提示词
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      + +{% block scripts %} + + +{% endblock %} +{% endblock %} diff --git a/src/flask_prompt_master/templates/expert_generate_3.html b/src/flask_prompt_master/templates/expert_generate_3.html new file mode 100644 index 0000000..41d5a8f --- /dev/null +++ b/src/flask_prompt_master/templates/expert_generate_3.html @@ -0,0 +1,157 @@ +{% extends "base.html" %} +{% block title %}智能提示词优化3号专家 - 提示词大师{% endblock %} +{% block content %} +
      +
      +
      +
      +

      智能提示词优化3号专家

      + +
      + +
      +
      +
      +
      + + +
      详细描述您的需求,系统将进行专业分析并生成高质量提示词
      +
      + +
      +
      +
      + +
      +
      + 生成中... +
      +

      正在分析需求并生成专业提示词...

      +
      + +
      +
      +
      生成结果
      +
      +
      需求分析
      +
      +
      +
      +

      核心意图:

      +

      专业领域:

      +
      +
      +

      预期输出:

      +
      +
      +
      +

      关键需求:

      +
        +
        +
        +

        约束条件:

        +
          +
          +
          +
          +
          +
          生成的专家提示词
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          + +{% block scripts %} + + +{% endblock %} +{% endblock %} diff --git a/src/flask_prompt_master/templates/generate.html b/src/flask_prompt_master/templates/generate.html index 7b64c21..ccee360 100644 --- a/src/flask_prompt_master/templates/generate.html +++ b/src/flask_prompt_master/templates/generate.html @@ -151,6 +151,306 @@
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          +
          +
          +
          +
          生成结果
          +
          + + +
          +
          +
          +
          +
          + +

          填写会议内容,点击「生成纪要」开始

          +
          +
          +
          +
          +
          + + + + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/meeting_minutes_history.html b/src/flask_prompt_master/templates/meeting_minutes_history.html new file mode 100644 index 0000000..691342e --- /dev/null +++ b/src/flask_prompt_master/templates/meeting_minutes_history.html @@ -0,0 +1,77 @@ +{% extends "base.html" %} +{% block title %}我的会议纪要历史{% endblock %} +{% block extra_css %} + +{% endblock %} +{% block content %} + +
          + +

          加载中...

          + + + +
          + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/placeholder.html b/src/flask_prompt_master/templates/placeholder.html new file mode 100644 index 0000000..4a91508 --- /dev/null +++ b/src/flask_prompt_master/templates/placeholder.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% block title %}{{ title }} - 即将上线{% endblock %} +{% block content %} +
          +
          +
          +
          +
          + +
          +

          {{ title }}

          +

          {{ desc }}

          + {{ badge }} +

          该功能即将上线,敬请期待

          + 返回首页 +
          +
          +
          +
          + +{% endblock %} diff --git a/src/flask_prompt_master/templates/prompt_optimization.html b/src/flask_prompt_master/templates/prompt_optimization.html new file mode 100644 index 0000000..960f44e --- /dev/null +++ b/src/flask_prompt_master/templates/prompt_optimization.html @@ -0,0 +1,116 @@ +{% extends "base.html" %} +{% block title %}提示词优化 - 提示词大师{% endblock %} +{% block content %} +
          +
          +
          + + 查看历史 +
          +
          +
          +
          +
          +
          输入描述
          +
          +
          +
          + + +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          +
          优化结果
          + +
          +
          +
          +
          + +

          输入您的需求描述,点击「生成优化提示词」开始

          +

          生成结果将自动保存到历史记录

          +
          +
          +
          +
          +
          +
          +
          + + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/resume_optimization.html b/src/flask_prompt_master/templates/resume_optimization.html new file mode 100644 index 0000000..4cd3382 --- /dev/null +++ b/src/flask_prompt_master/templates/resume_optimization.html @@ -0,0 +1,158 @@ +{% extends "base.html" %} +{% block title %}简历/求职信优化 - 提示词大师{% endblock %} +{% block content %} +
          +
          +
          + + 查看历史 +
          +
          +
          +
          +
          +
          输入内容
          +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          +
          生成结果
          +
          + + +
          +
          +
          +
          +
          + +

          填写简历内容或要点,可选填岗位描述,点击「生成」开始

          +
          +
          +
          +
          +
          +
          +
          + + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/resume_optimization_history.html b/src/flask_prompt_master/templates/resume_optimization_history.html new file mode 100644 index 0000000..cd40187 --- /dev/null +++ b/src/flask_prompt_master/templates/resume_optimization_history.html @@ -0,0 +1,78 @@ +{% extends "base.html" %} +{% block title %}我的简历优化历史{% endblock %} +{% block extra_css %} + +{% endblock %} +{% block content %} + +
          + +

          加载中...

          + + + +
          + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/smart_prompt_optimization.html b/src/flask_prompt_master/templates/smart_prompt_optimization.html new file mode 100644 index 0000000..563e41f --- /dev/null +++ b/src/flask_prompt_master/templates/smart_prompt_optimization.html @@ -0,0 +1,182 @@ +{% extends "base.html" %} +{% block content %} +
          +
          +
          +
          +

          智能提示词优化

          + +
          + +
          +
          +
          +
          + + +
          详细描述您的需求,系统将进行专业分析并生成高质量提示词
          +
          + +
          +
          +
          + +
          +
          + 生成中... +
          +

          正在分析需求并生成专业提示词...

          +
          + +
          +
          +
          生成结果
          + +
          +
          需求分析
          +
          +
          +
          +

          核心意图:

          +

          专业领域:

          +
          +
          +

          预期输出:

          +
          +
          +
          +

          关键需求:

          +
            +
            +
            +

            约束条件:

            +
              +
              +
              +
              + +
              +
              生成的专家提示词
              +
              +
              + + 已保存到历史 + + 查看历史 + +
              +
              +
              +
              +
              +
              +
              + +{% block scripts %} + + +{% endblock %} +{% endblock %} diff --git a/src/flask_prompt_master/templates/travel_planning.html b/src/flask_prompt_master/templates/travel_planning.html index 25808bb..21ccb0a 100644 --- a/src/flask_prompt_master/templates/travel_planning.html +++ b/src/flask_prompt_master/templates/travel_planning.html @@ -3,11 +3,12 @@ {% block content %}
              -
              -
              @@ -66,7 +67,10 @@
              攻略结果
              - +
              + + +
              @@ -91,9 +95,12 @@
              +{% endblock %} +{% block content %} + +
              + +

              加载中...

              + + + +
              + + +{% endblock %} diff --git a/src/flask_prompt_master/templates/weekly_report.html b/src/flask_prompt_master/templates/weekly_report.html index 3c10082..fa9bb28 100644 --- a/src/flask_prompt_master/templates/weekly_report.html +++ b/src/flask_prompt_master/templates/weekly_report.html @@ -3,11 +3,12 @@ {% block content %}
              -
              -
              @@ -41,7 +42,10 @@
              生成结果
              - +
              + + +
              @@ -66,9 +70,12 @@
              +{% endblock %} +{% block content %} + +
              + +

              加载中...

              + + + +
              + + +{% endblock %}