From db43954dd59fe4aad03f557e9077ef2f1ff4d4f9 Mon Sep 17 00:00:00 2001 From: rjb <263303411@qq.com> Date: Sat, 28 Feb 2026 22:11:35 +0800 Subject: [PATCH] aaa --- (红头)启动和停止.txt | 31 + __pycache__/gunicorn.conf.cpython-312.pyc | Bin 2894 -> 2894 bytes logs/app.log | 591 ++++++++ logs/gunicorn.pid | 2 +- logs/gunicorn_access.log | 593 ++++++++ logs/gunicorn_error.log | 1287 +++++++++++++++++ migrations/__pycache__/env.cpython-312.pyc | Bin 4485 -> 4485 bytes ...0729315_add_meeting_minutes_and_resume_.py | 45 + ..._add_weeklyreport_and_travelplan_tables.py | 47 + ...eeting_minutes_and_resume_.cpython-312.pyc | Bin 0 -> 3123 bytes ...port_and_travelplan_tables.cpython-312.pyc | Bin 0 -> 3340 bytes ...acd11_add_admin_user_table.cpython-312.pyc | Bin 2371 -> 2371 bytes ...b6c8ec_add_favorites_table.cpython-312.pyc | Bin 55957 -> 55957 bytes src/flask_prompt_master/__init__.py | 55 +- .../__pycache__/__init__.cpython-312.pyc | Bin 3151 -> 5491 bytes .../models/__pycache__/models.cpython-312.pyc | Bin 9610 -> 14831 bytes src/flask_prompt_master/models/models.py | 58 +- .../__pycache__/android_tools.cpython-312.pyc | Bin 0 -> 14609 bytes .../expert_generate_2.cpython-312.pyc | Bin 0 -> 10406 bytes .../meeting_minutes.cpython-312.pyc | Bin 0 -> 10754 bytes .../placeholder_apps.cpython-312.pyc | Bin 0 -> 20120 bytes .../prompt_optimization.cpython-312.pyc | Bin 0 -> 5924 bytes .../resume_optimization.cpython-312.pyc | Bin 0 -> 11692 bytes .../routes/__pycache__/routes.cpython-312.pyc | Bin 52053 -> 52053 bytes .../smart_prompt_optimization.cpython-312.pyc | Bin 0 -> 9853 bytes .../travel_planning.cpython-312.pyc | Bin 4498 -> 14073 bytes .../__pycache__/weekly_report.cpython-312.pyc | Bin 3799 -> 10627 bytes .../routes/android_tools.py | 243 ++++ .../routes/expert_generate_2.py | 238 +++ .../routes/expert_generate_3.py | 223 +++ .../routes/meeting_minutes.py | 139 ++ .../routes/placeholder_apps.py | 300 ++++ .../routes/prompt_optimization.py | 101 ++ .../routes/resume_optimization.py | 152 ++ src/flask_prompt_master/routes/routes.py | 1 - .../routes/smart_prompt_optimization.py | 188 +++ .../routes/travel_planning.py | 117 +- .../routes/weekly_report.py | 82 +- .../templates/android_code_review.html | 112 ++ .../templates/android_crash_log.html | 113 ++ .../templates/android_gradle_conflict.html | 116 ++ .../templates/android_perf_optimize.html | 111 ++ .../templates/android_tech_review.html | 111 ++ .../templates/expert_generate.html | 2 +- .../templates/expert_generate_2.html | 157 ++ .../templates/expert_generate_3.html | 157 ++ .../templates/generate.html | 377 +++++ .../templates/history.html | 102 +- .../templates/meal_planning.html | 24 +- .../templates/meeting_minutes.html | 148 ++ .../templates/meeting_minutes_history.html | 77 + .../templates/placeholder.html | 24 + .../templates/prompt_optimization.html | 116 ++ .../templates/resume_optimization.html | 158 ++ .../resume_optimization_history.html | 78 + .../templates/smart_prompt_optimization.html | 182 +++ .../templates/travel_planning.html | 39 +- .../templates/travel_planning_history.html | 83 ++ .../templates/weekly_report.html | 34 +- .../templates/weekly_report_history.html | 78 + 60 files changed, 6824 insertions(+), 68 deletions(-) create mode 100644 migrations/versions/2e2460729315_add_meeting_minutes_and_resume_.py create mode 100644 migrations/versions/68b9d490d70c_add_weeklyreport_and_travelplan_tables.py create mode 100644 migrations/versions/__pycache__/2e2460729315_add_meeting_minutes_and_resume_.cpython-312.pyc create mode 100644 migrations/versions/__pycache__/68b9d490d70c_add_weeklyreport_and_travelplan_tables.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/android_tools.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/expert_generate_2.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/meeting_minutes.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/placeholder_apps.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/prompt_optimization.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/resume_optimization.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/__pycache__/smart_prompt_optimization.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/android_tools.py create mode 100644 src/flask_prompt_master/routes/expert_generate_2.py create mode 100644 src/flask_prompt_master/routes/expert_generate_3.py create mode 100644 src/flask_prompt_master/routes/meeting_minutes.py create mode 100644 src/flask_prompt_master/routes/placeholder_apps.py create mode 100644 src/flask_prompt_master/routes/prompt_optimization.py create mode 100644 src/flask_prompt_master/routes/resume_optimization.py create mode 100644 src/flask_prompt_master/routes/smart_prompt_optimization.py create mode 100644 src/flask_prompt_master/templates/android_code_review.html create mode 100644 src/flask_prompt_master/templates/android_crash_log.html create mode 100644 src/flask_prompt_master/templates/android_gradle_conflict.html create mode 100644 src/flask_prompt_master/templates/android_perf_optimize.html create mode 100644 src/flask_prompt_master/templates/android_tech_review.html create mode 100644 src/flask_prompt_master/templates/expert_generate_2.html create mode 100644 src/flask_prompt_master/templates/expert_generate_3.html create mode 100644 src/flask_prompt_master/templates/meeting_minutes.html create mode 100644 src/flask_prompt_master/templates/meeting_minutes_history.html create mode 100644 src/flask_prompt_master/templates/placeholder.html create mode 100644 src/flask_prompt_master/templates/prompt_optimization.html create mode 100644 src/flask_prompt_master/templates/resume_optimization.html create mode 100644 src/flask_prompt_master/templates/resume_optimization_history.html create mode 100644 src/flask_prompt_master/templates/smart_prompt_optimization.html create mode 100644 src/flask_prompt_master/templates/travel_planning_history.html create mode 100644 src/flask_prompt_master/templates/weekly_report_history.html 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 35c6452e480fccda0a90565337f774db4756e72e..28ba2655aad40e26daccf3ac0da3a436b77d1616 100644 GIT binary patch delta 21 bcmX>nc211vG%qg~0}yQbF)wo?j}tclNRS49 delta 21 bcmX>nc211vG%qg~0}vF>+nceG$B7#NM8^gK 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 75d85dc4cda48cda8bb32516da71529c7cd1e270..223a63e43c4eb85eb1f288c8d0b3bef15cef36d0 100644 GIT binary patch delta 20 acmZowZdK+!&CAQh00gO1_ip5_5(EG>1_em~ delta 20 acmZowZdK+!&CAQh00brTHg4pu5(EG>X$4gP 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 0000000000000000000000000000000000000000..116404ccc8727c83eb256711b21903d9d77571df GIT binary patch literal 3123 zcmds3&2Jk;6yIIj>&ZIKhvN`Mpw^H?!9Zfy`E)1+l&DgLnxYU?YE@dTJ%cmRewf*H zgL6tHB*X#14MmNVMv0W5^w6WlUx36Vs76#n4@jIMaRAa@I5A`ICfg_w1G&IR^JezF z=ij_H^TxmVCK^=))_$H`!|%(2@Du;=n&eInCfVc*0SY+*icr!;L&`}ap9l0nE(n9U z5DevH7|4ZL2T=Y<$hE*QlS(C!1k0al5GD+S9BdX<1DjA05GBcIPpv>radLok@xiHqSAbTn?KAF$L(QFz{qzlS4L7IaS zGfXi5bY^@gof*oEBras9GNV)Jk>N~ca&lxsQTBOONs&rcX_mJ7k!hjo;Lneh&1krC{%=G_bhEc##B_o@G|2IV3u{AlM@Y>ZA4TI z=V{2nj*j-fW(dqf){$9s7HEWMOKQO~9b`JRol%^jk;2Qs*oBmVi=FR(6C%Oko|3GR>*>(@RoOE_1y!YCO-Du^7u?nC4|Gj0 zEFhyodiffFxDQ|&<*Tu(Z@h5h!p>9*D1d1jZC+{tFacuMK zbY!PiLPBt1x2amCE^4I~b%!2%+;NBtFe9eN4oIBJ3Fvm=#C!hJdR5nk0tc|<&(GiY z{QLgA@ALP4ok)lbxxPESpnSzM%+K`2zc_EPH9{757{C-6zyeNXt6Y&|={lr_ieV5g zMnI&4SQW^z=qggPVExQtE7E&Xl;6{IbNG^l^e(?f=vISEY2`Qv< z*<8Lio9oRDr20n++5W;nt}j14*gudL#ZBr-n#G)MT*2`mGL8ok%bv&1;|QT4a&LW3 z0&|D4SYJ5p2gYZRCt$6J|2j?f@4f&RkPEw|47293KrD$5T3XHEyOlo^Uf1QDl9l!Vb{F+3*fi!?DAKD^K*4A;qusn zYPchSxL3vf7i#!ez=yr^Em&>MXUEF{)cx|U`MT(A60vz3|IZohog~ZDne;1HaLjU= zr(}@si8%#aBE3z}YN|>bDUQ}mh$IC};uwIYrD(E6n(F35QUzomuR^V2P2n(*>*i($ zVPf8ZxXUdqrpsTg2 zhNEM|iV8%Sf7e2aR>9#(__2irItENCRfsz-=?E$n?HyRZplc?Hl|qc}xQ3LfjOx#E zzht(EGUksDGE;gLW{B(4ima9NjI3B@Ia5_C$O)dAnSqFoCT1o$JxFA-kz7|jFUVvg zxrgIK%$;odj5;|KgJ1!OdWb$cTA06(RyxZ(3G<&`ox6H_{D~lb(ehc#?NbZfqBt+! zjjz^hVaVsE7bX^q^ToT@*Du<_sL$=CvBnNb6>c8Hs=gnxR1iA0^q zT=j7d6Pa$iYv@757B2Z9ndRKdaASCBbluu9{G0af=s0y-&!&^QGU-4(wvveb4z@gsz}Yf{&tvq&c^?M1XX|tt@nk3aM@A z3?aA$=r=VtQQsi%z2r8J6XGW7_}uvIj2-T#NlVwg--lDq$LSc3N)ph^l7yqO3acfh z?CCN;Qf0L~1*>&*f@%b zZLV;(s)L#e&msDoqO+-)CFIu-%d)?5JR5%2%CMb3GMzuglC#3&wpV8pkJ~y3NgSCK Qf9I1dzcs?KU5*cb0x~RQT>t<8 literal 0 HcmV?d00001 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 bb469e1954bb50a70c30811120526477ee36d322..a005c5644992576e03267eacc0703dabde4b7652 100644 GIT binary patch delta 20 acmX>sbXbV{G%qg~0}!N6-Mf+7f)fBcN(ET} delta 20 acmX>sbXbV{G%qg~0}xcK-?)+6f)fBdF9mu4 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 bfcc5bddd014cb6bcd0c9bb00e1ffc8152d40085..3580915b1bf723d919b2de68aa016b6c859771f1 100644 GIT binary patch delta 22 ccmbQbm3it`X71Cxyj%=GkUDkmM((a#08u6fYybcN delta 22 ccmbQbm3it`X71Cxyj%=GP%>}hM((a#08xntcmMzZ 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 76e0ddfea1c55ee50011fbfce76ff5735c901410..d4b41ac2a8c8551fcd80bbbc7b39b78a63318a46 100644 GIT binary patch literal 5491 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 O1Gc-AM3QBi$^QXwa-M+z delta 1104 zcmaiz&ui2`6vt+P+egerjX(wY} zLW-?0Rz@mL*(nGF;H9>^$1>tNaFa;GX*(UK#9qqQ87Lh_hO4^DV`!TjQaSa5Z!g10 zx`8Uq6>7n|i8BcR=n5PcLP(#(lF)+G6!LT*&J48RHtc*4fmH=8p_~o$SUtrPnniRIoub@huR*~ zbd<-1kaZ>I#xw&JaVb=KOuuq;O*iS9s2>l6YA<_Q{VQvsL3}KXyV*+pSzrq;U!oZy zH#*xZ^yuwog1KI_e2q~PV%E*kPf{V#+gAM7wmx=YQz(mhxA1?s*o8}OKZoTOyaUPu zyLxgO(r?PMtL0H5vP(pY<1{MRa~z`ZP_Fuo#dln&Y%#T5^#i#~D(}R$N?fkP;VUDf}1c$L75OPFElEPI+eY#MieWhNlq$vxWqtQik)9x$B^^zE`0 zNsD}@J3X>u-)XL)3aT!7c!RJh2a(>9alJ;^;Y8wEs-snX(u|u$&T&%+ zmezC%Iop73rX`uml$shJwm28Jmu1Obnw2b!rwmUiYtVDBQTLhO7NA?S7D#R zc{TJI?8~sPfj*1;YC5R3=pGy(Qzr6@2hW=3MBsCV6&(?QGY#L@hzPFwJPV$Q)Zl|U ziP&D7ssV!%vlvG8;H<^~ewEaddYETqshYbYbUlJNtpHCX2GRtSjcQT}Cd7<5CAljC z&x|J2SP~a;IIT)a?^fk|8GPgm=*Y{IU6!JYyRt#KMUj=AD)tlQ^qBr5s(&HP;bFsBVGD}~=_(;r znyftEBN3W>yc1k7us~tn^kO5*Q$pP44|+L%2u0{okK50={Wgc&8}Mi4LIJpA-m+yY z+IAZ<9mrfP7$02teum}>@r$@E!!(EbGhklJf`;a1FwtDEW*WkMQES8+J2x{HA6sPF zLj8bYUIK$HMtz3TPj+74JGD2qV`1~IG_`x;fN;h|kYMUWrmBAdubpJUL{$SVO;N>H zO9Q2(L5Nq$QWSXFXclqR;8hg^o*E_Kth5m(5eWvQk{Y`lb%GmGlTf3nhOB^rCsGV= z8-g9E4J@_3KZ^-b$Y_Adpj9f0kZUpI9T@VBc4bOcyjNXNZDF#~6a2_U&UxH9;tpuw z8(WFKx0aY*`S9!2k4liH{J6^Ig=OV9|MmlHJA~2Bk}qStvt%dV1)~83`O;T&t8-J3 z0u2QY$VzsD1b{UI7Crc@sjEYvfSvRC9qtjo!{g41?IS^7w#LhOyiS1-`~}#+BZ#vy zaLe3L&Vq52MkWNmJ_{+Zz?fm0N?34NWeA(2mWU;0jrGk~~#M+@Gd8LI*N5J2`ZHcxpHt4D-=oBsi-A&v_+nk_j4QsZ>-`;tIiTiopUqR!_zxaDKSx^f zgM_KjS`ZT*5|e$H7PWBel3}vZ!#l>Hwm8@6ao%&z1{G(Ncfd-z&5G-E6o#!|u<@RNeE&TG<&ouMNct*M|Cx3vlF{PwiAdqK>Ukz|qG6dKIv znqs0ENnA2(zTKW^pFfz^^(=@r1?HGa1Yu$GzBJWWU=F&^fJF`xE!LfQ2x1My*p2#P`D6vspl98p7UsGW78^$#XjGCKgDy?N=_S58= jyureAGOwj1R~b+PBM=vtPBySC=K9JY#b{Tg4-^0Zuu2rs 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 0000000000000000000000000000000000000000..313179136a5af13b415902c5700126abcc4202d4 GIT binary patch literal 14609 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 E4}h|ds{jB1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a32b0acb4d01c9b185fd0714e6b3bdaf224ad8bf GIT binary patch literal 10406 zcmb_CYjji9n&;&GIBEKRrI56MS{^OsA#bpS>hNk2>Q$l;L(YLFBuzazQD9Onk3x%u z))y2gwjfBaU|X*!g@STj&MarVYC>?O9(&hymN{uU^TTrCuDPRs=G*7wG;JwxXEbYd z?|t_E_P4+Nz4rdT-7j@I4F*P$#YoJIkvJ)F;x36< z;*y%BE}2>8lAGl?>X$kdE~Qz?w`ES1Sp|JEr`oLMYmHe0wcM$75oUsiQ8;z31apE* zZ`SkQN@t=g$(-a$HYekl1f$fBheSf+HI;fEXhA=78o)?M74%4AJ?YS+q%@8K;d^B1 zC>r@Cv`MvyYX|O;01cY|!(8o{xx@wCFdbQBf;pSilZj*!nM|g%%FG5b)tp17?ZeCy zsC37YacD^=Gq&LuGDRF@);{cf49sl2$DC}^FltWDh&iU6viu3&9zdaq9J><~kd>x(=>>|G>MwKi2Nigg^N-eC06Le0ZSu{ju|R zALqI*N4nk=R^}Ht#GN@b@McH2w>Nz4t&xif*b&A-wEcV;t1fYRscPC@#jtvssv;@c z!ceYiroV_N_bfaaK`YO;r`IEQ6+m+>$S0Wlwo1npLc$-L7f| zzI8(DpX?sSP48qA(C`Mv%D}hX=3$el9n}=gShi7B6b*}5X0h5eYt~wd*R8ayF5S3m zl4tvjt>o5uHd~Qx-t4(E=TMK%norqg78NbnGLI@M+A`l}i_ds!{hD2dN`|TSEG#Uv zR@)0mimLWd)b;|K+g12t5zwQAZp(IRC#%|G^-vZs?esQ*N{6qtM_Rgo?cr;Oq95&x zT>4<(_`b-#Cho*1!1l=7%>vtiozbpKLJx2>QhzD>$s1hV**Ng)jf1VVkq`DDrfL8y z_i5eWsorqU*+~1KORt2UIEK^I6o`sth8iMItoMc>^Wxzx)YY!_t3 z)qNc9J;Lp;<2o<@boIFApEV}<<=NacWdRXURZQMOQ(oj?ZKSm;Z@Mr@x?NU#73$~e zE`_hX0fdKpjt`#R&$YFQFtC3M5~iJ|T!6#_(9h-xbQk4KH^rK>@;1eAA|crrinO@B zOtn{7w6!hLdIIhKz!liNuoidiG;By*#pbT^Ff;SnSZWI-m1ilXL{)p?Wk8@NrtH3mZM}i2DczMo; zFTV;Ad;^IZHD2$CcAeJDE-*#j>K^Fb7d`MH*ZmsTSjRP=FADd( z$JOl}xY(|l1LFuh@YJx+LcGz`CYL z`vLC2exB<*7X&SeoIDlo{TMNO@btb&Yg_ornQ(6l>^1UsD`IxEYhU5^N{h^*-Xzsm}1HCxk%n{8Q;m_@b3g@r4!#EtU^jdMv%P!nB_u(i zex;BEB+<@KqMg5~Yy`ZKBbT}6*I-ivyFZHTYm1yb8@bYqq%!!>JM8( zY$Hc5M?QQDY2&4{U_rbLcrP3~O$2!%8Srj2(s%$#O^_F|2EmdJpX2I39?vFXi`-ih z1Lt1j-hVePi8l^~ueHVuV&}aiA^6i@YY@Csj7jh$7DxTBqer&|WzY6M;(F$g{@ z{OPI4?yk5I#MpBR&WVpf^${!>0oQva+Sw@_hJqN7JAx}-L}Bv5l7rxf#Df=7Z|BwRyycl3MN-%t!8I5jV73RV?sqLWQ%@@(|3xtFX4 zYmWoYUn#5j2_v2lzk$gNpDHm|Bq;UpNivSfj6FBTKQRQs-R+_7J`f^3b&+G^yCEC8 zL5n{*G^Fr%yAim26jKYK9OlAnFdXw?4w(oTujw2{DSr7dQc7ay5eE1{z@)>mQKPc> z=mr71+$nb{YH+}gJM_Z5ktL}RL#P^wPqG{S&^#tlgmEN`t$6K7i?_uVsl1>PF*!2C z-gqsBQ8iMZlqP&qM`nCXY;C|u^#*Jb#;C-e$rvrgv5i}`p5o)Llq z?#u_#i)R;_rg-x8tahu@>e+7LXVQqJY@*#`v3i+GSln)dpoe6Y+bD>M7@Ad=?yynS z3|d{z&!Z6oSt*RuYSfZL2nKPKdaK>Z0C8J(0-T+Odo~gVtAJIu!ETfP1kkAxni3ik{26n*U%07S(63MYWk?SFKYI#c z6MJTqXt6))7L{aUpQ&+FYSkqf($CUyRA#G}OQoMpN-tR|{cNcm+PjitY?>hkw=-t3 z(kDtQkczn|rqWG%MmY^+?!41LB0q{TNWu6YiHjz;0n3+oAA!yXrx^xMeKdIT^se-~ zMODeTocTD7e9-T)+h_%PDirM9pq6SYXcNljyb6CF&iD&jM}Xh=JC5-3~m6qNCrBDpCguI62DRH(KASC`5)xAB;X)r zt}tp@kuW9U-eMHeAX zb|i?ccbHXp1BG+Q%x$<&=2M_` z8yCrt70eQ6jk{uuW@e5EC9YSaVtzAC^Qj#3MEvo3giPkgd&L%TZvr{-f>FG*Trdsq zcC@zUl6j!7lg`Jixkl|%|9XA>hpbiO(~Pp#Y;y8l*1AaC&#;YaK_B36uV2EMJP{qNHUEKY<=ks6X86Sd zAY$k4gI5YJlTu;%rEd-V66w=h{8Q*23tOc zJgtztG{GCgPgm>jdX5oaOZfL1;Zf$Ns}1&MPzx{e;*kABc}hO74@u>C+PN%W%F1kR z5?)GN5JAAziItI7#>#5!Rgg7@hm;)*i+NE9062t)gUFr^$TJG5_gy;ixnhQ`(#o(3 z&rY~=yU?Qw?RElINT{QnKPy9V$+qLi(C_lHL3DV)(~aB(OFLOrY;6y#MK3q#RmDrg zWXA5I;PTE#Kf9FAKmR;>#Mvci=*T_tA0w{7Krk!AKMTw)>2LIzJSL&alIuo{I7UeG&Xxsk*HH_&;@CWzN%lGha)X`2__VMee5GSu+8U=m){OmWhAmOa1* z@?|_qHo;BXA&j*;;SmWGlTD1TD@1#&PJHy^L*22=6KLQL@8_ES5T{`93$zEN$7{2J z_5&03!V{H6=PnLmw2XArA|Xc_4$jqdfV3dNZGCvyF)93o$PHLI{W z?Yw31h67p&PnHylqCGG~Q|R?FZDmeB+0 zrBZl?rO{Q9P4ZTQd!j6`5%D=zO^NA;d>#EL0@4UM5MED2fzp(x8dyuQsbeH8sO<(c z4_=S?_eIjO)lNBqfB04!U5Hs-EFg_(TEbRd5k-`|jtE+cS9^3YflpJ2g%GHw-4)YX zApE3v0`zO}=lLHnNys=T%($Gw`}OHfuN-^@(hcp){d3Cw8#e_En}aD9KVb>$(?fb= zKyM7{b8qM$ZeL$7>r2l*TKQUKi!Ycy{YLt%Zb>L@K_G2GFl|x2<~w~>49jZBQv?j= zV9K+8;#r7?4Y_U8j!g??7X`A5LfP{J+4K97bAQOny;-n4khr2R%h<6hkT`EhE=^Au zQejy+eW~d~dd#rkHl{LY>h(j(n5i&id^BKuwEKmCaY4vf955D#j4K1il_6t!z*rtM zKIvEG^ciP|jEe%sMLjF8(?R2^ka2y$xZc0v8Nd0tpm9^kXbTu^K_dmAL$XBmYP^49 zUYp~X!=Jw-IB{uxIXiJ@efjrklbi9rl+>2;8!6NJvnRK|+->dN;GeP}n7z=Sx^PI2 zrB4}BV2Q?-nt*1P5@Yz!_p`!`#H%PoCV=XOkJE^jZsk^0arz*~ynNyoBghB9XdGH3S@ zhL*JfVroAz>9$;&rK#85QDNDpHp4MPC~IZ_z_R8AvgQel>~Mt&N&*EX{S$KA%*V_f z`sxf!k_1aGOBf&M+W`r(xOiZ)4hQO?|>p zCN^POC}&n6XI6JnAZKnUXGtJuNhqf@kW+diXZ07!A;bEBVSUh0;a6pTr#HsLUgm%1 zxqx9)FlDo!*c?ut_(nm!a!8_3m*V}2>FrbfOV;|I-h4CBQeWIpB%r)hQ&~e~CthF5wP==?o!adVrYT z@$^k%F0dvsqc1h1FT?c1q*;BF=iHJ@(-Lkem6@8`m@-j2gele9zu&RoSYm2OKPjM} z^jA!x-VQ4yH?3({0 zi_3fP4&kYeP zZV)T@Nu@9;ou7pBdyfGvy^e>7k{d+HFOZFc0R)6HbP{B{s)Ud#GoZ@!XFYaPRSc%w zF1;x2F8)w)V`hbaVTFJ5mOzFrs3*Twk$k3(!hiOB3oc;K#PSU6RIwJyKh7x0hU#-w z-f9E(`LyChsQzWK3d(<#l`Mmif0JoYsV~;9HDdp6C@7nXeW^}@t}hKKYjdPu7EE4~ zDg9G24(&gs$e{mEnFMN2p0PGV`c)F@|0)^vf0ZFe?Hnm;8`WhGOTT(#PFbGx>l_92 ze4QtUp06K9qhC)|m#0dr`%(-fWKOLVili=<_{ru#senA&Krv`pFfC%vqufb_!=Qst+Mc!4A>NZ zT&CXb+_zM-N~-EbI}Mirbn4SjqvBaqY(qsQDyBif%K7{>pRweR0~$q~e2P*yIaG^* z60eh5O7DjOxIkha6_lWPIDShe#by7k!tiB5Z0Vn|tnV@H_gKRBnEKDyLw~`R{snvb z2X%IRMo660Pp5A( zH<+6?H*9WM8`Mp`p)kta;Lqu}cBYrGxXu3{cjt}MN^lL_xEAd-T;|mND zKbA4{BCazOLF2EcL_BHeAxx4U!VLl3;Ln-aGq>kqKW+%(CATCJeC};2CRvUTq2`cg d1l*D@6xVm~aO-YKp2KkpN03kAu@9b8{|i5hjv4>} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5d27117b149df8f17c7cde9edcf87c965295bc01 GIT binary patch literal 10754 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..171b81d24813b21201e6f86d4837583fbdfefb8a GIT binary patch literal 20120 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 LuEfk?JX+NmC*8l8nYaBiWbvwAW_7CEK)G zvbP=Q2=GPoU#!)RTT7kKN&8Yl>vm(NQd-ZH(YZ`ntDMf;EjN|Z6QFk@Q(#}1#g}}# zpbbA?DA}Nkc4P0QrkN)F$eLohWXzh!A&)vOpEOzx8G=@)oGI;#La9{V(h0}w_cHi;uANC)E{&6es_zxt`ol2a% zrWr=A85M$hiNniySeuI%^ep3|8P?1*PLIRFGlGg`p7$~wFR1LC+huFrA*eWp<7{r1 z5f_x}JdCSxWfL?BdW%se$TxBfD=62qZl{MAbji9!vX$=<`^|0-Z*$sqT6nPHeHYLW zyV{fJz8DMoW5K_~f`?+kW8i<`xrpGyLYYc<S_$}z~02$ z2hlMFE`d21OMI{^{)hdE-CgnHpK4~ojNZNRJs+ocNCfvJ-s%POLl@5u_U+B|R5QEA zkhs(r-`5krwghc3R4 zw(hwSztW|dTVohJbs=``-Rk&z(7knK!F}vCgck zo4=)=sjJ)4V6~2}*tlWM&hmDi_izhpYb_pI4b3nfj$yXeSl!Or7wU|Jpn`7mR%VAl zZn1ET*~>btskjj<89dS7{Th+C`1F`P#T@AlXxJ5*Z^<@|pC_bPx2ql=m!h--^I>d> z53`dG&ta+T{mt0_;E(LQ{Qu~Wr~v2-njyZuFF*rfrRzwV9I`S)k`@r30LAPH7?v(E z#Deb|Y@C^9S}k4&Z$P*>cmTreC&&dsOyn0pO$#uCW^}!`5Io7cHO!N{EKbI#WGR>< zD1da>9fG>m=HP*jw(JlTtu_{DD2Lm@0XdnIR3a2EUADY&_K` z9_@;st zq?#zN@In4?f}rI-4ApG}t)P{(>OA>gDndI5A7M{pb<_r}E`=96Lc+LW*Ny9dS9{*W zebUze{x#n9FrJb~Q5>@(Fp1fr-d8~i48V1UB#>m(R}%H*uu z0lH~*yLbi^Rqh2zY-<%uVzKQ39Qg2K;1KAp!s(_Nhd??(P%Ui?CuouEGOPuDHAc`l zE!)k!dn@DO1QiG-1IT32Ph(VzSQC_1hfUl;bU+JS>TxhgQ#lx78Bx8h?QWYDEUQv` zuv5W+px}7c<}u3HN$|#&pe~YSI1emkID`&^!N8WIZUlH2@`#aCo1s$?!_I~YC`scG z{Q=+$Y9a+Q{c8vGgCZ3f&z&%mhvnAX$JDt>|5GCc7*!C}mWQ?F-Hl=Gq^PzktgVV_Yr@)^sCG_R zJ13%@7n09oD_~%-Hj#)@V&De8h3=WLnv9Y!l@4 z9mGq-4tcWPhHt~R%Qj)#aHFzGP$4XuZM2}U&`ul5;4}_*o6TiL)H{r*z*`27FB9~pC zQqs6sc73q|+B*wUQc<0m)C#f{%a8~`)bZ_Znj3>rgijHpDDE;bI*LbNEy9b2(>ZX8 zhQx$__|#u_mShvCcHZeQ;w%F2pD{5wl0lr8>6_UDRKqTVIZweKhw$ac9w;%YJXAh6 zBd&HWoDj)76d@>M11OzA@a(+Ux1#(s(wMJ_@3a)X*mrfvY>}OUZH62$Z zuVC%yIcaIiN7!&WC-ba;ln^P11xV?M4#m&xhJt2X$=D4^j#%uKQfsuP)jq{Tgr@0G zyrkIQLW}h%p^fuv0r)j)d+Ml7sYUCg-*C(~%lJp689s$HBipZPC4gK-AAqdK`C`<2 zQ8fKT%5e8e;1{MKcdvAcx-4MJy-0)MDmV1$q4=INiCyO)w@zMAleb=UapJsI5O|KA z2~)-VI?WkLZ<5q4vPotKT>ilD@M{N#F20#c1O%NF*tD2GicIZA+zxlp`1{?dTeLwE zgQgaC6$}~)b|qAToVM^5(c`oSN!H5T)|k&CjTT6hN2C8Ju=C-StwRr#Sc*x7py7B6 z%X8aoe7h(FEDBc^;WQ;b7Mg|}$L)05cozL12GSR|!?DF;-O3`-U>Bi2HItSh86-S# zwOEbD#GD5?o>C$YyBJ-6D5{?v z)=!S;D{tzj_iPBr`-{qsw*S7p+ZQRCakFSvFA*)AA1<69DO?!P+}4*4V%KcrSae&ex73^y2Z0fGNMOCEUqf|whs<=f> zen4Wm#XWOEvzGj=DOA@SE^dkFH-^ZK-#t)axuqb7U^rw|} z$MX6p)c{Exl1KIYAHX10h-4Iwg49LHk}z2kDxG(WtcR27nfp<5Fz>^sZ_eEmTD&P- zY>Mcg{gQlERMyS-_uM)-&0UR}rM1}goLcmJys_}fsn}=vdU*M4s(R@R*=IB6EuAjA zF+~AAH>N9~=f(^fYS*fl&63?{s9jbq`+PbM?a!+f@H83(mDx4tw@S!^u2=L;&7r9gHf5N=K=hO1#smaCzNKjD!d8Lbg>c`j8Yb0ZP8 z;&oOHa9@+mgh;cPZJEs?QiY-{LT=vTVG(5uD#rDKjg^Ar*XUc&EtB1V9w_}5qeD=L zmsU~JMWC`v(Ga5HB$Ua=z&Wpjd7QOC9};BlU+@@_;W&OzPT=x?D>3{j{7Y=b*I4OS znC>e~{WVtg53DJSHGQKl3lvAyWnpz$cSA%y&9A&&Iwdr60O>Xhf+l-H3;< z!h1!SCbvHWf{P-Q@g}t)RK1};N8e@YG<7}K`CRwfNY0}-b5@6HRzFb4G=yLIEk)v$ zBSkrQ{khpA7*xHp@1yElgBs5pDZz-6C|(i9D?*dz1iitw5MB|%m)|1@y#BrnBUa!e gs5zp^nAiBl@-G_1c`f&dB78HBCT_%&ZSh$C13X>Kq5uE@ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a8770b68fb8dfcac50cb1ee8639f08d7a021e023 GIT binary patch literal 11692 zcmds7d2mzLxxb5c$&zh>R}5kaiFw5~yTgM}+Zc!qhG0m*EQ+jqu_arUbFT#0$kY%> znz{>&VJ7CTaN!DBSS+#`2E6DHnNByzQlqQRI$v1cPWB6PB26R!H^8qN;;?p z%0V~K4q1cDA#ad76b%XzztOEqhpIs(m z!_Z(L35sCVc9Ya;B4xAQC&f}jHt;ptYK5MiuNHZEEGogt* zKT&Fh$vHs0A7g7Md_P&e=9aBo3sY!KAkE}Co+fWNHKVxP#qyB4venJDbG9~D$iT5}49l5atfRfv;$lNej(y3^ z@~)85&O6&|J32y2p5=L)v#pp6Db}{LZ57YfL6%|~i>Z)oBhPZ7?DZ_~cCc&PT{efU z)8Yc=kdYH;W@j={yL$B+bH%!6&9&8=JE!w4vv)8%7Fn%xtc&I?D4WkNoLkOX%jV2^ zx^WRZXHH|e)f$S|*tmXmXJNC;)y^+2Ew!}UN*I=H=UKL;#OidE?wkXIQ3BcA!ghpI zjTW9YySdho3c5GDI@(#takeH~o24~musa*g49iJ%}`x5Lwm@R1S9iMoScz+sFTFoR2#`CAeD8=+OilW@Tih_)Tum- z#zQmOQxv1~$S`f9y5uhGR|xjlg_p{h+GWWlF>l9FrUWL#BWLuCfyq3d^}byE*ro6& z>=Ljg@iW=^P_hePm_$aJZhRR_^+d7J{XNJ;2VNdIcGd)YX%Y{ac=RIPH%E@0j(Cs6 zkKmWx`$Iabb0?gyR@UWWIrjxv&EaePk-m$=gWbc|4i68$K0Nr=$Xf@*I-_T79 z)zw3h*AI@qaU;@yIdb@d*n0TKhr+)&4pkz(z0n&3ksl9)UpX=QV{iE4;w`|z zhh8?$*@*Y!Nbiy1>nDL)N_FqnE{Hv?p@K5(gPW60s z75)xEM=;v(z&@xFxwP-g?tS6wFp}3(JDpo%8u{e)$U6tZpInJvfN8uHzSrgRr;0An+95@{v_zBK)UWqAs@q@^~F>xWGLiFNWk$oS*s7Efo8oqpRw0r;X z;0G`vm_gKg-ZZbQ?5k_(&53M4_~<=F7KD!M>U<4 zM&mX@TfmaMk@zh{xZi!$!4R8^f!Uxpem26V&JN#rJ922>$f?ue3-7?_mLHKXP6;nQ%y=KYCACk@0Qe3NR+c7~4{1@Pv77~?m}{3D}bMj!=%diEYDqkN?CWa!-UGuYs%9 zP5eP=IP%OL<{^MMNF`0Vi}aA3&O@db(2T5}m`=F#QoR`jH?50uWlCi`p3;;cDKJv+ zB(WK+o-S%H)gcqpUF0reH@%tIMHVaSLQ3IK+nA8t!Z>WG6>3_YpjnyQEDm-Q7t4*8 zBl_CM;odh#Kk18JcvnQb@Vg&IFTJgbatgrXA0=%2X%}6y2SzA5-<5hUcUFGUU!e%r!w`u1ks=GX(xP5P*78)@74F{ zefjeSDhB5Hau?lImESXD{&h?aAHU_nN?zVj2C}GCAZs zC&VuI>~Y#Ny|Q`(EH_|~tJ%r$;|?v(T{yIPkU35y4sGIqg8oLiC&A~KgpNyY5sOF9 z{Brc|pLFJ>gOz5NqxBrg;i*1HaI+y17db0=eCBq*U9Ji~R>F_RL)T4wqabvJzQP3o z?Lwbyp-{DRQo7ldHrsfYlk50LW>wc|N;7J6ti=)>Jy(H)#(^abKY!ftW9;HIs)2JA z{CK=e-NdlAz*o35pnb+Cdq$kZR5U`;PDFy=kZj%B`VHgegXdn@rT-M51%TqQ;38dm z(R{ZN2r>4UP7f``13D-qvl;**Jx?57V$J|rI_p8|u?v7KZBKFuCcaZEw1?vLt~lH= z3P#DOPEk@D^@K|+O~ONZC=dNUt`3AQSyC;vN9G|J4OmNHDJALx(8aA30J_CsLB)a3 zo+Y-E95XtpE=eS{u5iUc(UUs6jO5W;DFGPed*$^AkdP(;qrOhi1<;m6sT|6b%uRDl zmEm$>EP|G>!u=#de1mJ#|q zM{%|AB_v}kF3V#sxQM@Q1PIYi6A7ZeIr{41=*2exn(=srREV8u|8w)ODCb>ZD|0By z1T}&y$K2ESNzKN=nFg+61y_gPaQTz;B4JfpUEC5N^Vp22_=q5qFI|{%s*D+~7q8m9OSQv!ymcMMPVulLG8>K`vZTHaT4RuwSL@v4R<nl|kcDzj0~6xC}lPPB~qEqTDxQL7;Hqox&x9(}D$6{(`DNLABTL zg(3Hzv7q1Wd%DqIXbl({pN_eg_2gOAz*B>316ixR3h2In{@_ku{TBb6t^V9?0mF8m zYP*E}Fg%q$sLJ!J@_hLs?&tI`xKuxw_0jWp7Hsw{+w9M62pG2fR<%VC2V2Q+`57>| z{T0h9O~g&A2xF7FYC3(hxU_0AeJhWI{H@7yh&ziOi8;JwCu@af;vtSSWpJa8qe}As z9cj|zl|s7n-wCf|9@#j&0<>b($(WPCt2k21T^Z7cdOAr8H%sN|J8!grrK@@P$A>(?8id9KMVEklb>N+P%0(41=l0eeh zCnAtNEC;p&<2Ly5JfIlLflT?j?<5B%nNF`dvC8+vqQIo`JCmLntPB=b`wOcBg)4ok zyvGWHp`xj$H=WqzoB4F0Xz`t*?+-QxC$02PS{a!1tWTByg~1dP6ZQVW4FTgupKjy5 z>?Z=*PkNR2bd&pc4d(eaFk=MROe?6bF{wk#wuTatMlhSdA&3kYDBaT&|Wz5 z(p^=4tQ=J3`&IdORfU4M8L0EsZwS`E;IDtd*VG(r;{8p0u&K-6)D>v@0hrNi$O^Qk z^D3za1d&;VU8$=mQ6|y2RAMJVRiR&1cvn@FB%|itRn5mf;xcN@;9h@jUBIyRx2m;& z9aCcUZ~2+9`1>oTEuT-^e4gTjbP=w&GyFTdz(E~$#ogUtS7RR#y1-2#=Kc-Vo?ENkzx$V zih~v2U#(P^Y!~`x=1R2$vqj;WFO}_!q+B9pGNs)GL6?}V(uMlB5E5!aY{j#f>_p!& zL8sWO5Ck2hNrKK;7m^8PI}Qna3o`Mo4E&~o89a(-yqFYFdj$xg7oo^CLIiq0$2mDO zx>51WjoyX`gq$EOvXD!_eUxv4?AQQ?!HZA`$+0(HY(wsHy5K!d)okI-ZR~EBm}}?Q zoge|_@Ei#qSPk&Qs~x&yIkW@>!58)(2eM9W5I;hK2S zs-fZiQZ@P=rc|a7?*lg z_w=Tqex_ePGpH}~>&pgnefqM1z9Oiv@#|~u)@}>dHv4OvgS8HSts_wD4Cvc~`VPMy zoxR_umZL0M3r=H5tW-1Q(|3S~GT10DJw_3$=vw+u;Ao+rqrVmt_?WexzAqM_P8GeJ z?jujjPRPzqy*TUKtlM*fwcGr)+wRm_eHN>awfT0~d^L99tfZm`i{DJreSt&y_>mIqi`q=MuO+i#Z$fj5TgqLKg@af=K@r zP{-Sy5`h0BV%S4?$n&J+<4Wg1kGD<(P=GW^D5&eerSt-{BI5oZQI&~a7zkf`1MC{GQsC)T z09FKbfh`MpQxtu)7zD)TS|L|#5HT3Hg^R;2w-Ad0Xg~GvgSs_--I{=IEjaxRnK8w`#$Q+)Fs}CLR*OJE-jH3E-Jbeiv;J+C&)yQWd;E3} zT;BCmJ>LKIlojtkCP3_@_8_s7T7!2T6CiG*w<9QQqismUL@4oMiAOxxM!T^zcPGYq zy99{XEkML>TGaMQoX?}xc^bce%cB~xzd}_xi}*}iF&UDZv(#02^v!t%RYv+&1_}9F zMmfYG#q#Ra)f=kE-SN0@>EHkF-f`3fgplqgr&GQ?anCZSS&y%6l-f?D(tU-x3FMK3 zzk3|=z}=0b0^HpyxVw+t@vi8bNFv013mJdoW~;F=JTf5#JkYc7z}J8j;Wlr@9A0Uz10sI>4bBzWAHKvt z0Nz8$|4WEa$I<*VF0o`Hqut#%^{#4C+-M$eiTiV_0*2*2)pE(@i^5p2;S=Wdqc31g z8cP>22QQ$eGKaXCqpq4p-<(ojRYc#)B_V&SNDguFw2;zlW}H^D86HLPp8+@&ufkKD z=+qJ5Q(Rvs{CA$k#-ZsOQsPr7JduVdCm+g%err}?Ir4?Y#huksN&|D!ex z>Gb#n+*{XE*S9pFE54&!@0-1TD8ta((9_Vny=Qyhnn1>^I~ldUlG<$S$TWo?UhpR gsu(Bsj`^{iah#iO*9e?1+^4iL&P}A47v5R_7ZY>^82|tP literal 0 HcmV?d00001 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 e27f57c50eb8d011c3b8933a5dbd8562fc99dc44..cfb41e5182490013b737458fdb9215d9760348fc 100644 GIT binary patch delta 24 ecmcaQjrr;{X5Q1hyj%=Gu>bX<%<_%A9;X3oMhMmb delta 24 ecmcaQjrr;{X5Q1hyj%=G(7wzzbN5DGkJA8Uw+J`@ 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 0000000000000000000000000000000000000000..9bcbfab73c0874d31ffcb8aa974b5a429dc1be22 GIT binary patch literal 9853 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 t{#K|v^Jd~C&9pD?pZ9&|>dMzbrt9>* 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 MIoHurp8WRz3m*l#f&c&j delta 909 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 delta 799 zcmZ`%O=}ZD7~YxeXEwX}Y^}zRBC*L*(GWxsLe+yvFZN(hu_1))blI@YF0&h{rwZ1y zgaJ?b1Ejt6tp&lOzOzYNa&TZ?cAocnp7(=&^ZffY^Q&Q`1vu+B zKDdSS$XviL(WrKP0|_>=Q=Yt~w3Osq^wgFLnCNLO4GTo=m$+{B5Pc6#kX8mb*p>jn zQ^Wv7AzJ?`>n;>ovs9e7-cyq$q-ko=}>o4aDGK#YEM zwgvvOvv$rw`}s4iUDy@&rnFY+KboRln$gUG#yAtry%Mc?_6;|X$o}Fxx`kqSEg*x( ztIrPFsTU$L*=OaWVFKS$D3?)__0(l_iM>-pX$gQLQ?xIvoq7AnLR19clR$az^cI9z zrzG%c)Csx{p|=6yH_SnJE&P^+O!=^U_eifFigj8&xM}=EdQv101gMnDS``b&N;vHG zNEp&ZfY$+#C$33D7N&L9&aUmmDThR{6h_nysLTy`d$IOpyGMe^^#`%+`3|%ZYvdeC z0o{^lgVQJDaSix~LobRE2_<+h@-vyI=#T-S-H3FigLMO!Hi6S%mE19gWxijkT#02L zme_Tv!rc^J)*U!8_Cr>y-ru|jC@u5wfQO__iTcB6vZBO~F7wpIBGu-WZx21PLZ3o{ w|Bc}o!bu7tbSh#b{*eXr@JLwsAzU5{=2+0!an;8s4c4ix>Zdq^Hc(>s4^oJ)&;S4c 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 %}