From 260fe77ad00afc01f07f0280d4430695eb4f75d2 Mon Sep 17 00:00:00 2001 From: karljiang118440 Date: Wed, 17 Dec 2025 19:26:36 +0800 Subject: [PATCH] update --- backend/.env | 90 - backend/.env.example | 89 - backend/.gitignore | 179 - backend/TH-Agenter.db | Bin 376832 -> 733184 bytes backend/alembic.ini | 147 - backend/alembic/README | 4 - backend/alembic/env.py | 101 - backend/alembic/script.py.mako | 28 - backend/alembic/versions/1ea5548d641d_init.py | 359 - backend/apps/drgraph/drgraph_session.py | 66 - backend/check_jwt.py | 9 - backend/configs/settings.yaml | 11 +- backend/data/logs/app.log | 11305 ++++++++++++++++ ..._高速公路低空算法验证方案.docx | Bin 0 -> 17769 bytes ...a0440db6_陕西算法分析统计1023.docx | Bin 0 -> 4423816 bytes ..._高速公路低空算法验证方案.docx | Bin 0 -> 17769 bytes ...专利申请说明书CN202411808464.5.pdf | 2804 ++++ ...3b3-f860-4b12-8472-5374918aedb9_周报.txt | 40 + ...448-1076-499a-915e-4ded81664153_周报.txt | 40 + ...079-231b-44c3-abbe-87d40d1c0e9f_周报.txt | 40 + ...5-af39-3369acd081bc_链家租房合同.doc | Bin 0 -> 24576 bytes ...4d15-8247-12768899df05_抛洒物统计.txt | 0 ...e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc | Bin 0 -> 11776 bytes ...9-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc | Bin 0 -> 11776 bytes ...专利申请说明书CN202411808464.5.pdf | 2804 ++++ ...6-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc | Bin 0 -> 11776 bytes ...d0-e378-4609-94e7-8ce5471832b8_testdoc.doc | Bin 0 -> 28672 bytes ...f-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc | Bin 0 -> 11776 bytes ...c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc | Bin 0 -> 11776 bytes ...cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf | Bin 0 -> 86679 bytes ...-1405-4c19-9695-57b5c6e3481e_testdoc2.docx | Bin 0 -> 11776 bytes ...40-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf | Bin 0 -> 86679 bytes ...c-f003-449b-a212-eedb378bd04e_testdoc1.doc | Bin 0 -> 11776 bytes ...6-00ef-4b31-9928-7ede181ad074_testdoc1.doc | Bin 0 -> 11776 bytes ...-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx | Bin 0 -> 11776 bytes ...ff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf | Bin 0 -> 86679 bytes ...38-37f8-4726-a095-841e45081f3a_testdoc.doc | Bin 0 -> 28672 bytes ...8-7e00-4527-9d35-297be432e7f2_testdoc1.doc | Bin 0 -> 11776 bytes ...a0-dc86-495f-af2b-b288e4b06362_testdoc.doc | Bin 0 -> 28672 bytes ...5-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc | Bin 0 -> 11776 bytes ...专利申请说明书CN202411808464.5.pdf | 2804 ++++ ...7-600a-4880-9f24-ce5a33d132e6_testdoc1.doc | Bin 0 -> 11776 bytes ...-71b0-4930-baa7-f3dc06965f32_testdoc2.docx | Bin 0 -> 11776 bytes ...870-20aa-44c6-9022-43502b369956_周报.txt | 40 + ...296-a120-4114-8edc-a03f35fd4d6e_周报.txt | 40 + ...3-950e-4b9b-9556-3cc153215747_testdoc1.doc | Bin 0 -> 11776 bytes ...42-da1d-4762-a58f-3654c909ade2_testdoc.doc | Bin 0 -> 28672 bytes ...8-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc | Bin 0 -> 11776 bytes ...b5-4e35-4b5e-aecc-950878c902aa_testpdf.pdf | Bin 0 -> 86679 bytes ...6-05d8-4635-8923-548fd4329970_testdoc1.doc | Bin 0 -> 11776 bytes ...专利申请说明书CN202411808464.5.pdf | 2804 ++++ backend/docker-compose.yml | 17 - backend/main.py | 157 - backend/static/favicon.png | Bin 5043 -> 0 bytes backend/static/redoc.standalone.js | 1832 --- backend/static/swagger-ui-bundle.js | 2 - backend/static/swagger-ui.css | 3 - backend/static/swagger-ui.css.map | 1 - .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 502 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 546 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 545 bytes .../__pycache__/main.cpython-310.pyc | Bin 0 -> 905 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 1483 bytes .../__pycache__/main.cpython-313.pyc | Bin 0 -> 1459 bytes backend/th_agenter/api/__init__.py | 2 +- .../api/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 177 bytes .../api/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 202 bytes .../api/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 201 bytes .../api/__pycache__/routes.cpython-310.pyc | Bin 0 -> 1324 bytes .../api/__pycache__/routes.cpython-312.pyc | Bin 0 -> 2216 bytes .../api/__pycache__/routes.cpython-313.pyc | Bin 0 -> 2152 bytes backend/th_agenter/api/endpoints/__init__.py | 2 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 190 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 215 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 214 bytes .../__pycache__/auth.cpython-310.pyc | Bin 0 -> 3090 bytes .../__pycache__/auth.cpython-312.pyc | Bin 0 -> 5139 bytes .../__pycache__/auth.cpython-313.pyc | Bin 0 -> 5117 bytes .../__pycache__/chat.cpython-310.pyc | Bin 0 -> 6207 bytes .../__pycache__/chat.cpython-312.pyc | Bin 0 -> 9364 bytes .../__pycache__/chat.cpython-313.pyc | Bin 0 -> 9346 bytes .../database_config.cpython-310.pyc | Bin 0 -> 6368 bytes .../database_config.cpython-312.pyc | Bin 0 -> 10326 bytes .../database_config.cpython-313.pyc | Bin 0 -> 10304 bytes .../knowledge_base.cpython-310.pyc | Bin 0 -> 12804 bytes .../knowledge_base.cpython-312.pyc | Bin 0 -> 24912 bytes .../knowledge_base.cpython-313.pyc | Bin 0 -> 23445 bytes .../__pycache__/llm_configs.cpython-310.pyc | Bin 0 -> 11348 bytes .../__pycache__/llm_configs.cpython-312.pyc | Bin 0 -> 22450 bytes .../__pycache__/llm_configs.cpython-313.pyc | Bin 0 -> 22527 bytes .../__pycache__/roles.cpython-310.pyc | Bin 0 -> 7343 bytes .../__pycache__/roles.cpython-312.pyc | Bin 0 -> 14782 bytes .../__pycache__/roles.cpython-313.pyc | Bin 0 -> 14747 bytes .../__pycache__/smart_chat.cpython-310.pyc | Bin 0 -> 8022 bytes .../__pycache__/smart_chat.cpython-312.pyc | Bin 0 -> 13750 bytes .../__pycache__/smart_chat.cpython-313.pyc | Bin 0 -> 13829 bytes .../__pycache__/smart_query.cpython-310.pyc | Bin 0 -> 16376 bytes .../__pycache__/smart_query.cpython-312.pyc | Bin 0 -> 30833 bytes .../__pycache__/smart_query.cpython-313.pyc | Bin 0 -> 30956 bytes .../table_metadata.cpython-310.pyc | Bin 0 -> 6369 bytes .../table_metadata.cpython-312.pyc | Bin 0 -> 11097 bytes .../table_metadata.cpython-313.pyc | Bin 0 -> 11424 bytes .../__pycache__/users.cpython-310.pyc | Bin 0 -> 5434 bytes .../__pycache__/users.cpython-312.pyc | Bin 0 -> 9090 bytes .../__pycache__/users.cpython-313.pyc | Bin 0 -> 9101 bytes .../__pycache__/workflow.cpython-310.pyc | Bin 0 -> 11719 bytes .../__pycache__/workflow.cpython-312.pyc | Bin 0 -> 23000 bytes .../__pycache__/workflow.cpython-313.pyc | Bin 0 -> 23005 bytes backend/th_agenter/api/endpoints/auth.py | 132 +- backend/th_agenter/api/endpoints/chat.py | 163 +- .../api/endpoints/database_config.py | 141 +- .../api/endpoints/knowledge_base.py | 1013 +- .../api/endpoints/knowledge_base_simple.py | 38 + .../th_agenter/api/endpoints/llm_configs.py | 762 +- backend/th_agenter/api/endpoints/roles.py | 467 +- .../th_agenter/api/endpoints/smart_chat.py | 272 +- .../th_agenter/api/endpoints/smart_query.py | 465 +- .../api/endpoints/table_metadata.py | 95 +- backend/th_agenter/api/endpoints/users.py | 138 +- backend/th_agenter/api/endpoints/workflow.py | 514 +- backend/th_agenter/api/routes.py | 80 +- backend/th_agenter/core/__init__.py | 2 +- .../core/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 179 bytes .../core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 204 bytes .../core/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 203 bytes .../core/__pycache__/app.cpython-310.pyc | Bin 0 -> 5159 bytes .../core/__pycache__/app.cpython-312.pyc | Bin 0 -> 7231 bytes .../core/__pycache__/app.cpython-313.pyc | Bin 0 -> 7288 bytes .../core/__pycache__/config.cpython-310.pyc | Bin 0 -> 14898 bytes .../core/__pycache__/config.cpython-312.pyc | Bin 0 -> 21951 bytes .../core/__pycache__/config.cpython-313.pyc | Bin 0 -> 21359 bytes .../core/__pycache__/context.cpython-310.pyc | Bin 0 -> 3709 bytes .../core/__pycache__/context.cpython-312.pyc | Bin 0 -> 5507 bytes .../core/__pycache__/context.cpython-313.pyc | Bin 0 -> 5646 bytes .../core/__pycache__/llm.cpython-310.pyc | Bin 0 -> 1531 bytes .../core/__pycache__/llm.cpython-312.pyc | Bin 0 -> 2572 bytes .../core/__pycache__/llm.cpython-313.pyc | Bin 0 -> 2601 bytes .../core/__pycache__/logging.cpython-310.pyc | Bin 0 -> 1595 bytes .../core/__pycache__/logging.cpython-312.pyc | Bin 0 -> 3345 bytes .../core/__pycache__/logging.cpython-313.pyc | Bin 0 -> 3375 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 4457 bytes .../__pycache__/middleware.cpython-312.pyc | Bin 0 -> 7363 bytes .../__pycache__/middleware.cpython-313.pyc | Bin 0 -> 6774 bytes .../simple_permissions.cpython-310.pyc | Bin 0 -> 2973 bytes .../simple_permissions.cpython-312.pyc | Bin 0 -> 3712 bytes .../simple_permissions.cpython-313.pyc | Bin 0 -> 3856 bytes backend/th_agenter/core/app.py | 95 +- backend/th_agenter/core/config.py | 77 +- backend/th_agenter/core/context.py | 25 +- backend/th_agenter/core/middleware.py | 139 +- backend/th_agenter/core/simple_permissions.py | 35 +- backend/th_agenter/db/__init__.py | 8 +- .../db/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 312 bytes .../db/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 342 bytes .../db/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 341 bytes .../db/__pycache__/base.cpython-310.pyc | Bin 0 -> 2210 bytes .../db/__pycache__/base.cpython-312.pyc | Bin 0 -> 2728 bytes .../db/__pycache__/base.cpython-313.pyc | Bin 0 -> 2752 bytes .../db/__pycache__/database.cpython-310.pyc | Bin 0 -> 2181 bytes .../db/__pycache__/database.cpython-312.pyc | Bin 0 -> 3345 bytes .../db/__pycache__/database.cpython-313.pyc | Bin 0 -> 3374 bytes .../init_system_data.cpython-310.pyc | Bin 0 -> 2544 bytes .../init_system_data.cpython-313.pyc | Bin 0 -> 4229 bytes backend/th_agenter/db/base.py | 121 +- backend/th_agenter/db/database.py | 173 +- backend/th_agenter/db/init_system_data.py | 4 +- .../db/migrations/add_system_management.py | 2 +- .../migrations/migrate_hardcoded_resources.py | 15 +- .../db/migrations/remove_permission_tables.py | 2 +- backend/th_agenter/models/__init__.py | 8 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 755 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 797 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 796 bytes .../__pycache__/agent_config.cpython-310.pyc | Bin 0 -> 1626 bytes .../__pycache__/agent_config.cpython-312.pyc | Bin 0 -> 2393 bytes .../__pycache__/agent_config.cpython-313.pyc | Bin 0 -> 2392 bytes .../__pycache__/conversation.cpython-310.pyc | Bin 0 -> 1608 bytes .../__pycache__/conversation.cpython-312.pyc | Bin 0 -> 2139 bytes .../__pycache__/conversation.cpython-313.pyc | Bin 0 -> 2162 bytes .../database_config.cpython-310.pyc | Bin 0 -> 1643 bytes .../database_config.cpython-312.pyc | Bin 0 -> 2489 bytes .../database_config.cpython-313.pyc | Bin 0 -> 2526 bytes .../__pycache__/excel_file.cpython-310.pyc | Bin 0 -> 2641 bytes .../__pycache__/excel_file.cpython-312.pyc | Bin 0 -> 4107 bytes .../__pycache__/excel_file.cpython-313.pyc | Bin 0 -> 4211 bytes .../knowledge_base.cpython-310.pyc | Bin 0 -> 3511 bytes .../knowledge_base.cpython-312.pyc | Bin 0 -> 4734 bytes .../knowledge_base.cpython-313.pyc | Bin 0 -> 4695 bytes .../__pycache__/llm_config.cpython-310.pyc | Bin 0 -> 4609 bytes .../__pycache__/llm_config.cpython-312.pyc | Bin 0 -> 7111 bytes .../__pycache__/llm_config.cpython-313.pyc | Bin 0 -> 7259 bytes .../__pycache__/message.cpython-310.pyc | Bin 0 -> 2452 bytes .../__pycache__/message.cpython-312.pyc | Bin 0 -> 3446 bytes .../__pycache__/message.cpython-313.pyc | Bin 0 -> 3525 bytes .../__pycache__/permission.cpython-310.pyc | Bin 0 -> 2059 bytes .../__pycache__/permission.cpython-312.pyc | Bin 0 -> 2759 bytes .../__pycache__/permission.cpython-313.pyc | Bin 0 -> 2790 bytes .../table_metadata.cpython-310.pyc | Bin 0 -> 1933 bytes .../table_metadata.cpython-312.pyc | Bin 0 -> 3093 bytes .../table_metadata.cpython-313.pyc | Bin 0 -> 3082 bytes .../models/__pycache__/user.cpython-310.pyc | Bin 0 -> 3260 bytes .../models/__pycache__/user.cpython-312.pyc | Bin 0 -> 4971 bytes .../models/__pycache__/user.cpython-313.pyc | Bin 0 -> 5054 bytes .../__pycache__/workflow.cpython-310.pyc | Bin 0 -> 5565 bytes .../__pycache__/workflow.cpython-312.pyc | Bin 0 -> 8180 bytes .../__pycache__/workflow.cpython-313.pyc | Bin 0 -> 8239 bytes backend/th_agenter/models/agent_config.py | 50 +- backend/th_agenter/models/conversation.py | 32 +- backend/th_agenter/models/database_config.py | 29 +- backend/th_agenter/models/excel_file.py | 42 +- backend/th_agenter/models/knowledge_base.py | 69 +- backend/th_agenter/models/llm_config.py | 46 +- backend/th_agenter/models/message.py | 22 +- backend/th_agenter/models/permission.py | 18 +- backend/th_agenter/models/table_metadata.py | 38 +- backend/th_agenter/models/user.py | 93 +- backend/th_agenter/models/workflow.py | 67 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 444 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 486 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 489 bytes .../__pycache__/llm_config.cpython-310.pyc | Bin 0 -> 6122 bytes .../__pycache__/llm_config.cpython-312.pyc | Bin 0 -> 8567 bytes .../__pycache__/llm_config.cpython-313.pyc | Bin 0 -> 8664 bytes .../__pycache__/permission.cpython-310.pyc | Bin 0 -> 3247 bytes .../__pycache__/permission.cpython-312.pyc | Bin 0 -> 4386 bytes .../__pycache__/permission.cpython-313.pyc | Bin 0 -> 4565 bytes .../schemas/__pycache__/user.cpython-310.pyc | Bin 0 -> 2981 bytes .../schemas/__pycache__/user.cpython-312.pyc | Bin 0 -> 3781 bytes .../schemas/__pycache__/user.cpython-313.pyc | Bin 0 -> 3964 bytes .../__pycache__/workflow.cpython-310.pyc | Bin 0 -> 9056 bytes .../__pycache__/workflow.cpython-312.pyc | Bin 0 -> 11157 bytes .../__pycache__/workflow.cpython-313.pyc | Bin 0 -> 11812 bytes backend/th_agenter/schemas/llm_config.py | 44 +- backend/th_agenter/schemas/permission.py | 25 +- backend/th_agenter/schemas/user.py | 44 +- backend/th_agenter/schemas/workflow.py | 15 +- .../__pycache__/init_system.cpython-313.pyc | Bin 0 -> 5232 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 173 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 198 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 201 bytes .../__pycache__/agent_config.cpython-310.pyc | Bin 0 -> 5997 bytes .../__pycache__/agent_config.cpython-312.pyc | Bin 0 -> 10873 bytes .../__pycache__/agent_config.cpython-313.pyc | Bin 0 -> 11105 bytes .../services/__pycache__/auth.cpython-310.pyc | Bin 0 -> 4554 bytes .../services/__pycache__/auth.cpython-312.pyc | Bin 0 -> 7590 bytes .../services/__pycache__/auth.cpython-313.pyc | Bin 0 -> 7723 bytes .../services/__pycache__/chat.cpython-310.pyc | Bin 0 -> 8023 bytes .../services/__pycache__/chat.cpython-312.pyc | Bin 0 -> 14837 bytes .../services/__pycache__/chat.cpython-313.pyc | Bin 0 -> 13994 bytes .../__pycache__/conversation.cpython-310.pyc | Bin 0 -> 7380 bytes .../__pycache__/conversation.cpython-312.pyc | Bin 0 -> 12653 bytes .../__pycache__/conversation.cpython-313.pyc | Bin 0 -> 12864 bytes .../conversation_context.cpython-310.pyc | Bin 0 -> 6766 bytes .../conversation_context.cpython-312.pyc | Bin 0 -> 11443 bytes .../conversation_context.cpython-313.pyc | Bin 0 -> 11162 bytes .../database_config_service.cpython-310.pyc | Bin 0 -> 8493 bytes .../database_config_service.cpython-312.pyc | Bin 0 -> 15224 bytes .../database_config_service.cpython-313.pyc | Bin 0 -> 15423 bytes .../__pycache__/document.cpython-310.pyc | Bin 0 -> 8722 bytes .../__pycache__/document.cpython-312.pyc | Bin 0 -> 15160 bytes .../__pycache__/document.cpython-313.pyc | Bin 0 -> 15350 bytes .../document_processor.cpython-310.pyc | Bin 0 -> 29617 bytes .../document_processor.cpython-312.pyc | Bin 0 -> 49863 bytes .../document_processor.cpython-313.pyc | Bin 0 -> 42476 bytes .../embedding_factory.cpython-310.pyc | Bin 0 -> 3417 bytes .../embedding_factory.cpython-312.pyc | Bin 0 -> 4661 bytes .../embedding_factory.cpython-313.pyc | Bin 0 -> 4713 bytes .../excel_metadata_service.cpython-310.pyc | Bin 0 -> 6575 bytes .../excel_metadata_service.cpython-312.pyc | Bin 0 -> 11303 bytes .../excel_metadata_service.cpython-313.pyc | Bin 0 -> 11472 bytes .../knowledge_base.cpython-310.pyc | Bin 0 -> 5590 bytes .../knowledge_base.cpython-312.pyc | Bin 0 -> 9632 bytes .../knowledge_base.cpython-313.pyc | Bin 0 -> 9712 bytes .../knowledge_chat.cpython-310.pyc | Bin 0 -> 10173 bytes .../knowledge_chat.cpython-312.pyc | Bin 0 -> 16262 bytes .../knowledge_chat.cpython-313.pyc | Bin 0 -> 15588 bytes .../langchain_chat.cpython-310.pyc | Bin 0 -> 10070 bytes .../langchain_chat.cpython-312.pyc | Bin 0 -> 16675 bytes .../langchain_chat.cpython-313.pyc | Bin 0 -> 16015 bytes .../llm_config_service.cpython-310.pyc | Bin 0 -> 4151 bytes .../llm_config_service.cpython-312.pyc | Bin 0 -> 6483 bytes .../llm_config_service.cpython-313.pyc | Bin 0 -> 6633 bytes .../__pycache__/llm_service.cpython-310.pyc | Bin 0 -> 3028 bytes .../__pycache__/llm_service.cpython-312.pyc | Bin 0 -> 5072 bytes .../__pycache__/llm_service.cpython-313.pyc | Bin 0 -> 5180 bytes .../mysql_tool_manager.cpython-310.pyc | Bin 0 -> 1794 bytes .../mysql_tool_manager.cpython-312.pyc | Bin 0 -> 2375 bytes .../mysql_tool_manager.cpython-313.pyc | Bin 0 -> 2466 bytes .../postgresql_tool_manager.cpython-310.pyc | Bin 0 -> 1899 bytes .../postgresql_tool_manager.cpython-312.pyc | Bin 0 -> 2489 bytes .../postgresql_tool_manager.cpython-313.pyc | Bin 0 -> 2580 bytes .../__pycache__/redis_memory.cpython-310.pyc | Bin 0 -> 8179 bytes .../__pycache__/redis_memory.cpython-312.pyc | Bin 0 -> 14493 bytes .../smart_db_workflow.cpython-310.pyc | Bin 0 -> 20714 bytes .../smart_db_workflow.cpython-312.pyc | Bin 0 -> 34342 bytes .../smart_db_workflow.cpython-313.pyc | Bin 0 -> 34390 bytes .../smart_excel_workflow.cpython-310.pyc | Bin 0 -> 31224 bytes .../smart_excel_workflow.cpython-312.pyc | Bin 0 -> 53847 bytes .../smart_excel_workflow.cpython-313.pyc | Bin 0 -> 54391 bytes .../__pycache__/smart_query.cpython-310.pyc | Bin 0 -> 19505 bytes .../__pycache__/smart_query.cpython-312.pyc | Bin 0 -> 30187 bytes .../__pycache__/smart_query.cpython-313.pyc | Bin 0 -> 30404 bytes .../smart_workflow.cpython-310.pyc | Bin 0 -> 2717 bytes .../smart_workflow.cpython-312.pyc | Bin 0 -> 3612 bytes .../smart_workflow.cpython-313.pyc | Bin 0 -> 3550 bytes .../__pycache__/storage.cpython-310.pyc | Bin 0 -> 8299 bytes .../__pycache__/storage.cpython-312.pyc | Bin 0 -> 13267 bytes .../__pycache__/storage.cpython-313.pyc | Bin 0 -> 13479 bytes .../table_metadata_service.cpython-310.pyc | Bin 0 -> 8939 bytes .../table_metadata_service.cpython-312.pyc | Bin 0 -> 16707 bytes .../table_metadata_service.cpython-313.pyc | Bin 0 -> 16906 bytes .../services/__pycache__/user.cpython-310.pyc | Bin 0 -> 8185 bytes .../services/__pycache__/user.cpython-312.pyc | Bin 0 -> 14553 bytes .../services/__pycache__/user.cpython-313.pyc | Bin 0 -> 14743 bytes .../workflow_engine.cpython-310.pyc | Bin 0 -> 18340 bytes .../workflow_engine.cpython-312.pyc | Bin 0 -> 34819 bytes .../workflow_engine.cpython-313.pyc | Bin 0 -> 35271 bytes .../zhipu_embeddings.cpython-310.pyc | Bin 0 -> 2696 bytes .../zhipu_embeddings.cpython-312.pyc | Bin 0 -> 4159 bytes .../zhipu_embeddings.cpython-313.pyc | Bin 0 -> 4239 bytes .../services/agent copy/__init__.py | 12 - .../services/agent copy/agent_service.py | 282 - .../th_agenter/services/agent copy/base.py | 248 - .../agent copy/langgraph_agent_service.py | 741 - backend/th_agenter/services/agent/__init__.py | 10 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 336 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 368 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 371 bytes .../__pycache__/agent_service.cpython-310.pyc | Bin 0 -> 12650 bytes .../__pycache__/agent_service.cpython-312.pyc | Bin 0 -> 21162 bytes .../__pycache__/agent_service.cpython-313.pyc | Bin 0 -> 21488 bytes .../agent/__pycache__/base.cpython-310.pyc | Bin 0 -> 7828 bytes .../agent/__pycache__/base.cpython-312.pyc | Bin 0 -> 11614 bytes .../agent/__pycache__/base.cpython-313.pyc | Bin 0 -> 11946 bytes .../langgraph_agent_service.cpython-310.pyc | Bin 0 -> 10722 bytes .../langgraph_agent_service.cpython-312.pyc | Bin 0 -> 17547 bytes .../langgraph_agent_service.cpython-313.pyc | Bin 0 -> 18068 bytes .../services/agent/agent_service.py | 289 +- backend/th_agenter/services/agent/base.py | 6 +- .../services/agent/langgraph_agent_service.py | 400 +- backend/th_agenter/services/agent_config.py | 6 +- backend/th_agenter/services/auth.py | 194 +- backend/th_agenter/services/chat.py | 97 +- backend/th_agenter/services/conversation.py | 171 +- .../services/conversation_context.py | 38 +- .../services/database_config_service.py | 149 +- backend/th_agenter/services/document.py | 267 +- .../th_agenter/services/document_processor.py | 394 +- .../th_agenter/services/embedding_factory.py | 16 +- .../services/excel_metadata_service.py | 10 +- backend/th_agenter/services/knowledge_base.py | 210 +- backend/th_agenter/services/knowledge_chat.py | 80 +- backend/th_agenter/services/langchain_chat.py | 79 +- .../th_agenter/services/llm_config_service.py | 36 +- backend/th_agenter/services/llm_service.py | 5 +- .../mcp/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 148 bytes .../mcp/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 170 bytes .../mcp/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 173 bytes .../mcp/__pycache__/mysql_mcp.cpython-310.pyc | Bin 0 -> 10304 bytes .../mcp/__pycache__/mysql_mcp.cpython-312.pyc | Bin 0 -> 15584 bytes .../mcp/__pycache__/mysql_mcp.cpython-313.pyc | Bin 0 -> 15686 bytes .../postgresql_mcp.cpython-310.pyc | Bin 0 -> 9056 bytes .../postgresql_mcp.cpython-312.pyc | Bin 0 -> 13737 bytes .../postgresql_mcp.cpython-313.pyc | Bin 0 -> 13818 bytes .../services/mcp/mcp_dynamic_tools.py | 145 - backend/th_agenter/services/mcp/mysql_mcp.py | 4 + .../th_agenter/services/mcp/postgresql_mcp.py | 4 + .../th_agenter/services/mysql_tool_manager.py | 23 +- .../services/postgresql_tool_manager.py | 23 +- backend/th_agenter/services/redis_memory.py | 239 + .../services/smart_excel_workflow.py | 49 +- backend/th_agenter/services/smart_query.py | 76 +- backend/th_agenter/services/storage.py | 272 +- .../services/table_metadata_service.py | 337 +- backend/th_agenter/services/tools/__init__.py | 26 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 800 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 979 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 988 bytes .../__pycache__/datetime_tool.cpython-310.pyc | Bin 0 -> 4917 bytes .../__pycache__/datetime_tool.cpython-312.pyc | Bin 0 -> 7789 bytes .../__pycache__/datetime_tool.cpython-313.pyc | Bin 0 -> 7884 bytes .../tools/__pycache__/search.cpython-310.pyc | Bin 0 -> 3312 bytes .../tools/__pycache__/search.cpython-312.pyc | Bin 0 -> 4444 bytes .../tools/__pycache__/search.cpython-313.pyc | Bin 0 -> 4562 bytes .../tools/__pycache__/weather.cpython-310.pyc | Bin 0 -> 3194 bytes .../tools/__pycache__/weather.cpython-312.pyc | Bin 0 -> 4527 bytes .../tools/__pycache__/weather.cpython-313.pyc | Bin 0 -> 4635 bytes .../services/tools/datetime_tool.py | 8 +- backend/th_agenter/services/tools/search.py | 24 +- backend/th_agenter/services/tools/weather.py | 8 +- backend/th_agenter/services/user.py | 442 +- .../th_agenter/services/workflow_engine.py | 69 +- .../th_agenter/services/zhipu_embeddings.py | 5 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 651 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 695 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 698 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 0 -> 5684 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 8168 bytes .../__pycache__/exceptions.cpython-313.pyc | Bin 0 -> 8476 bytes .../__pycache__/file_utils.cpython-310.pyc | Bin 0 -> 5769 bytes .../__pycache__/file_utils.cpython-312.pyc | Bin 0 -> 8539 bytes .../__pycache__/file_utils.cpython-313.pyc | Bin 0 -> 8709 bytes .../utils/__pycache__/logger.cpython-310.pyc | Bin 0 -> 1659 bytes .../utils/__pycache__/logger.cpython-312.pyc | Bin 0 -> 2457 bytes .../utils/__pycache__/logger.cpython-313.pyc | Bin 0 -> 2397 bytes .../utils/__pycache__/schemas.cpython-310.pyc | Bin 0 -> 14375 bytes .../utils/__pycache__/schemas.cpython-312.pyc | Bin 0 -> 18434 bytes .../utils/__pycache__/schemas.cpython-313.pyc | Bin 0 -> 19324 bytes backend/utils/util_env.py | 167 - backend/utils/util_exceptions.py | 197 - backend/utils/util_file.py | 266 - backend/utils/util_log.py | 106 - backend/utils/util_models.py | 134 - backend/utils/util_node_parameters.py | 215 - backend/utils/util_schemas.py | 509 - backend/utils/util_test.py | 20 - backend/webIOs/configs/settings.yaml | 41 - .../configs/th_agenter_config_logger.yml | 9 - 418 files changed, 28136 insertions(+), 10462 deletions(-) delete mode 100644 backend/.env delete mode 100644 backend/.env.example delete mode 100644 backend/.gitignore delete mode 100644 backend/alembic.ini delete mode 100644 backend/alembic/README delete mode 100644 backend/alembic/env.py delete mode 100644 backend/alembic/script.py.mako delete mode 100644 backend/alembic/versions/1ea5548d641d_init.py delete mode 100644 backend/apps/drgraph/drgraph_session.py delete mode 100644 backend/check_jwt.py create mode 100644 backend/data/uploads/kb_1/4e71f1b4-df3c-4ad4-b839-e8af49c00c76_高速公路低空算法验证方案.docx create mode 100644 backend/data/uploads/kb_2/758a9e60-82a4-4099-818a-186aa0440db6_陕西算法分析统计1023.docx create mode 100644 backend/data/uploads/kb_6/0236c771-09f3-4202-b7b8-ee5242899648_高速公路低空算法验证方案.docx create mode 100644 backend/data/uploads/kb_6/3b7f98d3-ba4c-49e2-a410-690ef42ec2e6_发明专利申请说明书CN202411808464.5.pdf create mode 100644 backend/data/uploads/kb_6/47a6f3b3-f860-4b12-8472-5374918aedb9_周报.txt create mode 100644 backend/data/uploads/kb_6/65483448-1076-499a-915e-4ded81664153_周报.txt create mode 100644 backend/data/uploads/kb_6/7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt create mode 100644 backend/data/uploads/kb_6/8421beca-842b-4475-af39-3369acd081bc_链家租房合同.doc create mode 100644 backend/data/uploads/kb_6/bf5ab088-d02c-4d15-8247-12768899df05_抛洒物统计.txt create mode 100644 backend/data/uploads/kb_7/0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/13410d79-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/20b12291-406f-4028-9e12-a1e809873e3a_发明专利申请说明书CN202411808464.5.pdf create mode 100644 backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc create mode 100644 backend/data/uploads/kb_7/4af161ff-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf create mode 100644 backend/data/uploads/kb_7/71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx create mode 100644 backend/data/uploads/kb_7/7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf create mode 100644 backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx create mode 100644 backend/data/uploads/kb_7/9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf create mode 100644 backend/data/uploads/kb_7/9a5bf938-37f8-4726-a095-841e45081f3a_testdoc.doc create mode 100644 backend/data/uploads/kb_7/9f1f03f8-7e00-4527-9d35-297be432e7f2_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc create mode 100644 backend/data/uploads/kb_7/b3379b05-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf create mode 100644 backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx create mode 100644 backend/data/uploads/kb_7/d9857870-20aa-44c6-9022-43502b369956_周报.txt create mode 100644 backend/data/uploads/kb_7/da0ec296-a120-4114-8edc-a03f35fd4d6e_周报.txt create mode 100644 backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc create mode 100644 backend/data/uploads/kb_7/ea34fe48-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/f41fa3b5-4e35-4b5e-aecc-950878c902aa_testpdf.pdf create mode 100644 backend/data/uploads/kb_7/f5f22616-05d8-4635-8923-548fd4329970_testdoc1.doc create mode 100644 backend/data/uploads/kb_7/f86b8ae2-1f23-46c3-97df-e27c8475381d_发明专利申请说明书CN202411808464.5.pdf delete mode 100644 backend/docker-compose.yml delete mode 100644 backend/main.py delete mode 100644 backend/static/favicon.png delete mode 100644 backend/static/redoc.standalone.js delete mode 100644 backend/static/swagger-ui-bundle.js delete mode 100644 backend/static/swagger-ui.css delete mode 100644 backend/static/swagger-ui.css.map create mode 100644 backend/th_agenter/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/__pycache__/main.cpython-310.pyc create mode 100644 backend/th_agenter/__pycache__/main.cpython-312.pyc create mode 100644 backend/th_agenter/__pycache__/main.cpython-313.pyc create mode 100644 backend/th_agenter/api/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/api/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/api/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/api/__pycache__/routes.cpython-310.pyc create mode 100644 backend/th_agenter/api/__pycache__/routes.cpython-312.pyc create mode 100644 backend/th_agenter/api/__pycache__/routes.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/auth.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/auth.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/auth.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/chat.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/chat.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/chat.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/database_config.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/database_config.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/database_config.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/knowledge_base.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/knowledge_base.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/knowledge_base.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/llm_configs.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/llm_configs.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/llm_configs.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/roles.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/roles.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/roles.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_chat.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_chat.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_chat.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_query.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_query.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/smart_query.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/table_metadata.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/table_metadata.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/table_metadata.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/users.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/users.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/users.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/workflow.cpython-310.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/workflow.cpython-312.pyc create mode 100644 backend/th_agenter/api/endpoints/__pycache__/workflow.cpython-313.pyc create mode 100644 backend/th_agenter/api/endpoints/knowledge_base_simple.py create mode 100644 backend/th_agenter/core/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/app.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/app.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/app.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/config.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/config.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/config.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/context.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/context.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/context.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/llm.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/llm.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/llm.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/logging.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/logging.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/logging.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/middleware.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/middleware.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/middleware.cpython-313.pyc create mode 100644 backend/th_agenter/core/__pycache__/simple_permissions.cpython-310.pyc create mode 100644 backend/th_agenter/core/__pycache__/simple_permissions.cpython-312.pyc create mode 100644 backend/th_agenter/core/__pycache__/simple_permissions.cpython-313.pyc create mode 100644 backend/th_agenter/db/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/db/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/db/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/db/__pycache__/base.cpython-310.pyc create mode 100644 backend/th_agenter/db/__pycache__/base.cpython-312.pyc create mode 100644 backend/th_agenter/db/__pycache__/base.cpython-313.pyc create mode 100644 backend/th_agenter/db/__pycache__/database.cpython-310.pyc create mode 100644 backend/th_agenter/db/__pycache__/database.cpython-312.pyc create mode 100644 backend/th_agenter/db/__pycache__/database.cpython-313.pyc create mode 100644 backend/th_agenter/db/__pycache__/init_system_data.cpython-310.pyc create mode 100644 backend/th_agenter/db/__pycache__/init_system_data.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/agent_config.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/agent_config.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/agent_config.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/conversation.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/conversation.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/conversation.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/database_config.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/database_config.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/database_config.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/excel_file.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/excel_file.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/excel_file.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/knowledge_base.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/knowledge_base.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/knowledge_base.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/llm_config.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/llm_config.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/llm_config.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/message.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/message.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/message.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/permission.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/permission.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/permission.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/table_metadata.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/table_metadata.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/table_metadata.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/user.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/user.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/user.cpython-313.pyc create mode 100644 backend/th_agenter/models/__pycache__/workflow.cpython-310.pyc create mode 100644 backend/th_agenter/models/__pycache__/workflow.cpython-312.pyc create mode 100644 backend/th_agenter/models/__pycache__/workflow.cpython-313.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/llm_config.cpython-310.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/llm_config.cpython-312.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/llm_config.cpython-313.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/permission.cpython-310.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/permission.cpython-312.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/permission.cpython-313.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/user.cpython-310.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/user.cpython-312.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/user.cpython-313.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/workflow.cpython-310.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/workflow.cpython-312.pyc create mode 100644 backend/th_agenter/schemas/__pycache__/workflow.cpython-313.pyc create mode 100644 backend/th_agenter/scripts/__pycache__/init_system.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/agent_config.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/agent_config.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/agent_config.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/auth.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/auth.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/auth.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/chat.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/chat.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/chat.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation_context.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation_context.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/conversation_context.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/database_config_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/database_config_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/database_config_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/document.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/document.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/document.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/document_processor.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/document_processor.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/document_processor.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/embedding_factory.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/embedding_factory.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/embedding_factory.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/excel_metadata_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/excel_metadata_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/excel_metadata_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_base.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_base.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_base.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_chat.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_chat.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/knowledge_chat.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/langchain_chat.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/langchain_chat.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/langchain_chat.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_config_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_config_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_config_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/llm_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/mysql_tool_manager.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/mysql_tool_manager.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/mysql_tool_manager.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/postgresql_tool_manager.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/postgresql_tool_manager.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/postgresql_tool_manager.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/redis_memory.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/redis_memory.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_db_workflow.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_db_workflow.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_db_workflow.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_excel_workflow.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_excel_workflow.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_excel_workflow.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_query.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_query.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_query.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_workflow.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_workflow.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/smart_workflow.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/storage.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/storage.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/storage.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/table_metadata_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/table_metadata_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/table_metadata_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/user.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/user.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/user.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/workflow_engine.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/workflow_engine.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/workflow_engine.cpython-313.pyc create mode 100644 backend/th_agenter/services/__pycache__/zhipu_embeddings.cpython-310.pyc create mode 100644 backend/th_agenter/services/__pycache__/zhipu_embeddings.cpython-312.pyc create mode 100644 backend/th_agenter/services/__pycache__/zhipu_embeddings.cpython-313.pyc delete mode 100644 backend/th_agenter/services/agent copy/__init__.py delete mode 100644 backend/th_agenter/services/agent copy/agent_service.py delete mode 100644 backend/th_agenter/services/agent copy/base.py delete mode 100644 backend/th_agenter/services/agent copy/langgraph_agent_service.py create mode 100644 backend/th_agenter/services/agent/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/agent_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/agent_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/agent_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/base.cpython-310.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/base.cpython-312.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/base.cpython-313.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/langgraph_agent_service.cpython-310.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/langgraph_agent_service.cpython-312.pyc create mode 100644 backend/th_agenter/services/agent/__pycache__/langgraph_agent_service.cpython-313.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/mysql_mcp.cpython-310.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/mysql_mcp.cpython-312.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/mysql_mcp.cpython-313.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/postgresql_mcp.cpython-310.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/postgresql_mcp.cpython-312.pyc create mode 100644 backend/th_agenter/services/mcp/__pycache__/postgresql_mcp.cpython-313.pyc delete mode 100644 backend/th_agenter/services/mcp/mcp_dynamic_tools.py create mode 100644 backend/th_agenter/services/redis_memory.py create mode 100644 backend/th_agenter/services/tools/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/datetime_tool.cpython-310.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/datetime_tool.cpython-312.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/datetime_tool.cpython-313.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/search.cpython-310.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/search.cpython-312.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/search.cpython-313.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/weather.cpython-310.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/weather.cpython-312.pyc create mode 100644 backend/th_agenter/services/tools/__pycache__/weather.cpython-313.pyc create mode 100644 backend/th_agenter/utils/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/th_agenter/utils/__pycache__/__init__.cpython-312.pyc create mode 100644 backend/th_agenter/utils/__pycache__/__init__.cpython-313.pyc create mode 100644 backend/th_agenter/utils/__pycache__/exceptions.cpython-310.pyc create mode 100644 backend/th_agenter/utils/__pycache__/exceptions.cpython-312.pyc create mode 100644 backend/th_agenter/utils/__pycache__/exceptions.cpython-313.pyc create mode 100644 backend/th_agenter/utils/__pycache__/file_utils.cpython-310.pyc create mode 100644 backend/th_agenter/utils/__pycache__/file_utils.cpython-312.pyc create mode 100644 backend/th_agenter/utils/__pycache__/file_utils.cpython-313.pyc create mode 100644 backend/th_agenter/utils/__pycache__/logger.cpython-310.pyc create mode 100644 backend/th_agenter/utils/__pycache__/logger.cpython-312.pyc create mode 100644 backend/th_agenter/utils/__pycache__/logger.cpython-313.pyc create mode 100644 backend/th_agenter/utils/__pycache__/schemas.cpython-310.pyc create mode 100644 backend/th_agenter/utils/__pycache__/schemas.cpython-312.pyc create mode 100644 backend/th_agenter/utils/__pycache__/schemas.cpython-313.pyc delete mode 100644 backend/utils/util_env.py delete mode 100644 backend/utils/util_exceptions.py delete mode 100644 backend/utils/util_file.py delete mode 100644 backend/utils/util_log.py delete mode 100644 backend/utils/util_models.py delete mode 100644 backend/utils/util_node_parameters.py delete mode 100644 backend/utils/util_schemas.py delete mode 100644 backend/utils/util_test.py delete mode 100644 backend/webIOs/configs/settings.yaml delete mode 100644 backend/webIOs/configs/th_agenter_config_logger.yml diff --git a/backend/.env b/backend/.env deleted file mode 100644 index 4af5cae..0000000 --- a/backend/.env +++ /dev/null @@ -1,90 +0,0 @@ -# ======================================== -# 大模型配置 (支持OpenAI协议的第三方服务) -# ======================================== -# 可选择的提供商: openai, deepseek, doubao, zhipu, moonshot -LLM_PROVIDER=doubao - -# Embedding模型配置 -# 可选择的提供商: openai, deepseek, doubao, zhipu, moonshot -EMBEDDING_PROVIDER=zhipu - -# OpenAI配置 -OPENAI_API_KEY=your-openai-api-key -OPENAI_BASE_URL=https://api.openai.com/v1 -OPENAI_MODEL=gpt-3.5-turbo - -# DeepSeek配置 -DEEPSEEK_API_KEY=your-deepseek-api-key -DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 -DEEPSEEK_MODEL=deepseek-chat - -# 豆包(字节跳动)配置 -DOUBAO_API_KEY=your-doubao-api-key -DOUBAO_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 -DOUBAO_MODEL=doubao-1-5-pro-32k-250115 - -# 智谱AI配置 -ZHIPU_API_KEY=your-zhipu-api-key -ZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4 -ZHIPU_MODEL=glm-4 -ZHIPU_EMBEDDING_MODEL=embedding-3 - -# 月之暗面配置 -MOONSHOT_API_KEY=your-moonshot-api-key -MOONSHOT_BASE_URL=https://api.moonshot.cn/v1 -MOONSHOT_MODEL=moonshot-v1-8k -MOONSHOT_EMBEDDING_MODEL=moonshot-embedding - -# Embedding模型配置 -OPENAI_EMBEDDING_MODEL=text-embedding-ada-002 -DEEPSEEK_EMBEDDING_MODEL=deepseek-embedding -DOUBAO_EMBEDDING_MODEL=doubao-embedding - -# 工具API配置 -## tavilySearch api -TAVILY_API_KEY=your-tavily-api-key -## 心知天气api -WEATHER_API_KEY=your_xinzhi_api_key - -# ======================================== -# 应用配置 -# ======================================== -# 后端应用配置 -APP_NAME=TH-Agenter -APP_VERSION=0.1.0 -DEBUG=true -ENVIRONMENT=development -HOST=0.0.0.0 -PORT=8000 - -# 前端应用配置 -VITE_API_BASE_URL=http://localhost:8000/api -VITE_APP_TITLE=TH-Agenter -VITE_APP_VERSION=1.0.0 -VITE_ENABLE_MOCK=false -VITE_UPLOAD_MAX_SIZE=10485760 -VITE_SUPPORTED_FILE_TYPES=pdf,txt,md,doc,docx,ppt,pptx,xls,xlsx - -# ======================================== -# 安全配置 -# ======================================== -SECRET_KEY=your-secret-key-here-change-in-production -ALGORITHM=HS256 -ACCESS_TOKEN_EXPIRE_MINUTES=300 - -# ======================================== -# 数据库配置 -# ======================================== -# 数据库URL配置 -DATABASE_URL=sqlite:///./TH-Agenter.db -# DATABASE_URL=postgresql://iagent:iagent@118.196.30.45:5432/iagent - -# ======================================== -# 向量数据库配置 -# ======================================== -VECTOR_DB_TYPE=pgvector -PGVECTOR_HOST=118.196.30.45 -PGVECTOR_PORT=5432 -PGVECTOR_DATABASE=iagent -PGVECTOR_USER=iagent -PGVECTOR_PASSWORD=iagent \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example deleted file mode 100644 index f213015..0000000 --- a/backend/.env.example +++ /dev/null @@ -1,89 +0,0 @@ -# ======================================== -# 大模型配置 (支持OpenAI协议的第三方服务) -# ======================================== -# 可选择的提供商: openai, deepseek, doubao, zhipu, moonshot -LLM_PROVIDER=doubao - -# Embedding模型配置 -# 可选择的提供商: openai, deepseek, doubao, zhipu, moonshot -EMBEDDING_PROVIDER=zhipu - -# OpenAI配置 -OPENAI_API_KEY=your-openai-api-key -OPENAI_BASE_URL=https://api.openai.com/v1 -OPENAI_MODEL=gpt-3.5-turbo - -# DeepSeek配置 -DEEPSEEK_API_KEY=your-deepseek-api-key -DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 -DEEPSEEK_MODEL=deepseek-chat - -# 豆包(字节跳动)配置 -DOUBAO_API_KEY=your-doubao-api-key -DOUBAO_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 -DOUBAO_MODEL=doubao-1-5-pro-32k-250115 - -# 智谱AI配置 -ZHIPU_API_KEY=your-zhipu-api-key -ZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4 -ZHIPU_MODEL=glm-4 -ZHIPU_EMBEDDING_MODEL=embedding-3 - -# 月之暗面配置 -MOONSHOT_API_KEY=your-moonshot-api-key -MOONSHOT_BASE_URL=https://api.moonshot.cn/v1 -MOONSHOT_MODEL=moonshot-v1-8k -MOONSHOT_EMBEDDING_MODEL=moonshot-embedding - -# Embedding模型配置 -OPENAI_EMBEDDING_MODEL=text-embedding-ada-002 -DEEPSEEK_EMBEDDING_MODEL=deepseek-embedding -DOUBAO_EMBEDDING_MODEL=doubao-embedding - -# 工具API配置 -## tavilySearch api -TAVILY_API_KEY=your-tavily-api-key -## 心知天气api -WEATHER_API_KEY=your_xinzhi_api_key - -# ======================================== -# 应用配置 -# ======================================== -# 后端应用配置 -APP_NAME=TH-Agenter -APP_VERSION=0.1.0 -DEBUG=true -ENVIRONMENT=development -HOST=0.0.0.0 -PORT=8000 - -# 前端应用配置 -VITE_API_BASE_URL=http://localhost:8000/api -VITE_APP_TITLE=TH-Agenter -VITE_APP_VERSION=1.0.0 -VITE_ENABLE_MOCK=false -VITE_UPLOAD_MAX_SIZE=10485760 -VITE_SUPPORTED_FILE_TYPES=pdf,txt,md,doc,docx,ppt,pptx,xls,xlsx - -# ======================================== -# 安全配置 -# ======================================== -SECRET_KEY=your-secret-key-here-change-in-production -ALGORITHM=HS256 -ACCESS_TOKEN_EXPIRE_MINUTES=300 - -# ======================================== -# 数据库配置 -# ======================================== - -DATABASE_URL=postgresql://iagent:iagent@118.196.30.45:5432/iagent - -# ======================================== -# 向量数据库配置 -# ======================================== -VECTOR_DB_TYPE=pgvector -PGVECTOR_HOST=localhost -PGVECTOR_PORT=5432 -PGVECTOR_DATABASE=mydb -PGVECTOR_USER=myuser -PGVECTOR_PASSWORD=mypassword \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore deleted file mode 100644 index 389f05f..0000000 --- a/backend/.gitignore +++ /dev/null @@ -1,179 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. See https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -# VS Code -.vscode/* -!.vscode/extensions.json - -# Logs -logs/ -*.log -webIOs/output/logs/ - -# OS generated files -Thumbs.db -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db - -# FastAPI specific -*.pyc -uvicorn*.log \ No newline at end of file diff --git a/backend/TH-Agenter.db b/backend/TH-Agenter.db index 15f889c2f5fac0317392036f18d4bf7842997b26..0d2422d9167d2da9f33c3700999992c5df665808 100644 GIT binary patch literal 733184 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 Rw6q;J7KswIL>AT6{Xd>xIfwuN delta 5867 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 B_tXFY diff --git a/backend/alembic.ini b/backend/alembic.ini deleted file mode 100644 index d6cd79a..0000000 --- a/backend/alembic.ini +++ /dev/null @@ -1,147 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts. -# this is typically a path given in POSIX (e.g. forward slashes) -# format, relative to the token %(here)s which refers to the location of this -# ini file -script_location = %(here)s/alembic - -# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s -# Uncomment the line below if you want the files to be prepended with date and time -# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file -# for all available tokens -# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s - -# sys.path path, will be prepended to sys.path if present. -# defaults to the current working directory. for multiple paths, the path separator -# is defined by "path_separator" below. -prepend_sys_path = . - -# timezone to use when rendering the date within the migration file -# as well as the filename. -# If specified, requires the tzdata library which can be installed by adding -# `alembic[tz]` to the pip requirements. -# string value is passed to ZoneInfo() -# leave blank for localtime -# timezone = - -# max length of characters to apply to the "slug" field -# truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -# version location specification; This defaults -# to /versions. When using multiple version -# directories, initial revisions must be specified with --version-path. -# The path separator used here should be the separator specified by "path_separator" -# below. -# version_locations = %(here)s/bar:%(here)s/bat:%(here)s/alembic/versions - -# path_separator; This indicates what character is used to split lists of file -# paths, including version_locations and prepend_sys_path within configparser -# files such as alembic.ini. -# The default rendered in new alembic.ini files is "os", which uses os.pathsep -# to provide os-dependent path splitting. -# -# Note that in order to support legacy alembic.ini files, this default does NOT -# take place if path_separator is not present in alembic.ini. If this -# option is omitted entirely, fallback logic is as follows: -# -# 1. Parsing of the version_locations option falls back to using the legacy -# "version_path_separator" key, which if absent then falls back to the legacy -# behavior of splitting on spaces and/or commas. -# 2. Parsing of the prepend_sys_path option falls back to the legacy -# behavior of splitting on spaces, commas, or colons. -# -# Valid values for path_separator are: -# -# path_separator = : -# path_separator = ; -# path_separator = space -# path_separator = newline -# -# Use os.pathsep. Default configuration used for new projects. -path_separator = os - - -# set to 'true' to search source files recursively -# in each "version_locations" directory -# new in Alembic version 1.10 -# recursive_version_locations = false - -# the output encoding used when revision files -# are written from script.py.mako -# output_encoding = utf-8 - -# database URL. This is consumed by the user-maintained env.py script only. -# other means of configuring database URLs may be customized within the env.py -# file. -# sqlalchemy.url = driver://user:pass@localhost/dbname - - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks = black -# black.type = console_scripts -# black.entrypoint = black -# black.options = -l 79 REVISION_SCRIPT_FILENAME - -# lint with attempts to fix using "ruff" - use the module runner, against the "ruff" module -# hooks = ruff -# ruff.type = module -# ruff.module = ruff -# ruff.options = check --fix REVISION_SCRIPT_FILENAME - -# Alternatively, use the exec runner to execute a binary found on your PATH -# hooks = ruff -# ruff.type = exec -# ruff.executable = ruff -# ruff.options = check --fix REVISION_SCRIPT_FILENAME - -# Logging configuration. This is also consumed by the user-maintained -# env.py script only. -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARNING -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARNING -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/backend/alembic/README b/backend/alembic/README deleted file mode 100644 index 5d61b6b..0000000 --- a/backend/alembic/README +++ /dev/null @@ -1,4 +0,0 @@ -Generic single-database configuration with an async dbapi. - -alembic revision --autogenerate -m "init" -alembic upgrade head \ No newline at end of file diff --git a/backend/alembic/env.py b/backend/alembic/env.py deleted file mode 100644 index 7808f9d..0000000 --- a/backend/alembic/env.py +++ /dev/null @@ -1,101 +0,0 @@ -import asyncio, os -from logging.config import fileConfig - -from sqlalchemy import pool -from sqlalchemy.engine import Connection -from sqlalchemy.ext.asyncio import async_engine_from_config - -from alembic import context - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -from dotenv import load_dotenv -load_dotenv() -database_url = os.getenv("DATABASE_URL") -if not database_url: - raise ValueError("环境变量DATABASE_URL未设置") - -config.set_main_option("sqlalchemy.url", database_url) - - - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -if config.config_file_name is not None: - fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -from th_agenter.db import Base -# from th_agenter.models import User, Conversation, Message, KnowledgeBase, Document, AgentConfig, ExcelFile, Role, UserRole, LLMConfig, Workflow, WorkflowExecution, NodeExecution, DatabaseConfig, TableMetadata -target_metadata = Base.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - - -def run_migrations_offline() -> None: - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure( - url=url, - target_metadata=target_metadata, - literal_binds=True, - dialect_opts={"paramstyle": "named"}, - ) - - with context.begin_transaction(): - context.run_migrations() - - -def do_run_migrations(connection: Connection) -> None: - context.configure(connection=connection, target_metadata=target_metadata) - - with context.begin_transaction(): - context.run_migrations() - - -async def run_async_migrations() -> None: - """In this scenario we need to create an Engine - and associate a connection with the context. - - """ - - connectable = async_engine_from_config( - config.get_section(config.config_ini_section, {}), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) - - async with connectable.connect() as connection: - await connection.run_sync(do_run_migrations) - - await connectable.dispose() - - -def run_migrations_online() -> None: - """Run migrations in 'online' mode.""" - - asyncio.run(run_async_migrations()) - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/backend/alembic/script.py.mako b/backend/alembic/script.py.mako deleted file mode 100644 index 1101630..0000000 --- a/backend/alembic/script.py.mako +++ /dev/null @@ -1,28 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision: str = ${repr(up_revision)} -down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)} -branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} -depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} - - -def upgrade() -> None: - """Upgrade schema.""" - ${upgrades if upgrades else "pass"} - - -def downgrade() -> None: - """Downgrade schema.""" - ${downgrades if downgrades else "pass"} diff --git a/backend/alembic/versions/1ea5548d641d_init.py b/backend/alembic/versions/1ea5548d641d_init.py deleted file mode 100644 index 22d012e..0000000 --- a/backend/alembic/versions/1ea5548d641d_init.py +++ /dev/null @@ -1,359 +0,0 @@ -"""init - -Revision ID: 1ea5548d641d -Revises: -Create Date: 2025-12-13 13:47:07.838600 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '1ea5548d641d' -down_revision: Union[str, Sequence[str], None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('agent_configs', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(length=100), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('enabled_tools', sa.JSON(), nullable=False), - sa.Column('max_iterations', sa.Integer(), nullable=False), - sa.Column('temperature', sa.String(length=10), nullable=False), - sa.Column('system_message', sa.Text(), nullable=True), - sa.Column('verbose', sa.Boolean(), nullable=False), - sa.Column('model_name', sa.String(length=100), nullable=False), - sa.Column('max_tokens', sa.Integer(), nullable=False), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('is_default', sa.Boolean(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_agent_configs')) - ) - op.create_index(op.f('ix_agent_configs_id'), 'agent_configs', ['id'], unique=False) - op.create_index(op.f('ix_agent_configs_name'), 'agent_configs', ['name'], unique=False) - op.create_table('conversations', - sa.Column('title', sa.String(length=200), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('knowledge_base_id', sa.Integer(), nullable=True), - sa.Column('system_prompt', sa.Text(), nullable=True), - sa.Column('model_name', sa.String(length=100), nullable=False), - sa.Column('temperature', sa.String(length=10), nullable=False), - sa.Column('max_tokens', sa.Integer(), nullable=False), - sa.Column('is_archived', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_conversations')) - ) - op.create_index(op.f('ix_conversations_id'), 'conversations', ['id'], unique=False) - op.create_table('database_configs', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(length=100), nullable=False), - sa.Column('db_type', sa.String(length=20), nullable=False), - sa.Column('host', sa.String(length=255), nullable=False), - sa.Column('port', sa.Integer(), nullable=False), - sa.Column('database', sa.String(length=100), nullable=False), - sa.Column('username', sa.String(length=100), nullable=False), - sa.Column('password', sa.Text(), nullable=False), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('is_default', sa.Boolean(), nullable=False), - sa.Column('connection_params', sa.JSON(), nullable=True), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_database_configs')), - sa.UniqueConstraint('db_type', name=op.f('uq_database_configs_db_type')) - ) - op.create_index(op.f('ix_database_configs_id'), 'database_configs', ['id'], unique=False) - op.create_table('documents', - sa.Column('knowledge_base_id', sa.Integer(), nullable=False), - sa.Column('filename', sa.String(length=255), nullable=False), - sa.Column('original_filename', sa.String(length=255), nullable=False), - sa.Column('file_path', sa.String(length=500), nullable=False), - sa.Column('file_size', sa.Integer(), nullable=False), - sa.Column('file_type', sa.String(length=50), nullable=False), - sa.Column('mime_type', sa.String(length=100), nullable=True), - sa.Column('is_processed', sa.Boolean(), nullable=False), - sa.Column('processing_error', sa.Text(), nullable=True), - sa.Column('content', sa.Text(), nullable=True), - sa.Column('doc_metadata', sa.JSON(), nullable=True), - sa.Column('chunk_count', sa.Integer(), nullable=False), - sa.Column('embedding_model', sa.String(length=100), nullable=True), - sa.Column('vector_ids', sa.JSON(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_documents')) - ) - op.create_index(op.f('ix_documents_id'), 'documents', ['id'], unique=False) - op.create_table('excel_files', - sa.Column('original_filename', sa.String(length=255), nullable=False), - sa.Column('file_path', sa.String(length=500), nullable=False), - sa.Column('file_size', sa.Integer(), nullable=False), - sa.Column('file_type', sa.String(length=50), nullable=False), - sa.Column('sheet_names', sa.JSON(), nullable=False), - sa.Column('default_sheet', sa.String(length=100), nullable=True), - sa.Column('columns_info', sa.JSON(), nullable=False), - sa.Column('preview_data', sa.JSON(), nullable=False), - sa.Column('data_types', sa.JSON(), nullable=True), - sa.Column('total_rows', sa.JSON(), nullable=True), - sa.Column('total_columns', sa.JSON(), nullable=True), - sa.Column('is_processed', sa.Boolean(), nullable=False), - sa.Column('processing_error', sa.Text(), nullable=True), - sa.Column('last_accessed', sa.DateTime(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_excel_files')) - ) - op.create_index(op.f('ix_excel_files_id'), 'excel_files', ['id'], unique=False) - op.create_table('knowledge_bases', - sa.Column('name', sa.String(length=100), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('embedding_model', sa.String(length=100), nullable=False), - sa.Column('chunk_size', sa.Integer(), nullable=False), - sa.Column('chunk_overlap', sa.Integer(), nullable=False), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('vector_db_type', sa.String(length=50), nullable=False), - sa.Column('collection_name', sa.String(length=100), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_knowledge_bases')) - ) - op.create_index(op.f('ix_knowledge_bases_id'), 'knowledge_bases', ['id'], unique=False) - op.create_index(op.f('ix_knowledge_bases_name'), 'knowledge_bases', ['name'], unique=False) - op.create_table('llm_configs', - sa.Column('name', sa.String(length=100), nullable=False), - sa.Column('provider', sa.String(length=50), nullable=False), - sa.Column('model_name', sa.String(length=100), nullable=False), - sa.Column('api_key', sa.String(length=500), nullable=False), - sa.Column('base_url', sa.String(length=200), nullable=True), - sa.Column('max_tokens', sa.Integer(), nullable=False), - sa.Column('temperature', sa.Float(), nullable=False), - sa.Column('top_p', sa.Float(), nullable=False), - sa.Column('frequency_penalty', sa.Float(), nullable=False), - sa.Column('presence_penalty', sa.Float(), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('is_default', sa.Boolean(), nullable=False), - sa.Column('is_embedding', sa.Boolean(), nullable=False), - sa.Column('extra_config', sa.JSON(), nullable=True), - sa.Column('usage_count', sa.Integer(), nullable=False), - sa.Column('last_used_at', sa.DateTime(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_llm_configs')) - ) - op.create_index(op.f('ix_llm_configs_id'), 'llm_configs', ['id'], unique=False) - op.create_index(op.f('ix_llm_configs_name'), 'llm_configs', ['name'], unique=False) - op.create_index(op.f('ix_llm_configs_provider'), 'llm_configs', ['provider'], unique=False) - op.create_table('messages', - sa.Column('conversation_id', sa.Integer(), nullable=False), - sa.Column('role', sa.Enum('USER', 'ASSISTANT', 'SYSTEM', name='messagerole'), nullable=False), - sa.Column('content', sa.Text(), nullable=False), - sa.Column('message_type', sa.Enum('TEXT', 'IMAGE', 'FILE', 'AUDIO', name='messagetype'), nullable=False), - sa.Column('message_metadata', sa.JSON(), nullable=True), - sa.Column('context_documents', sa.JSON(), nullable=True), - sa.Column('prompt_tokens', sa.Integer(), nullable=True), - sa.Column('completion_tokens', sa.Integer(), nullable=True), - sa.Column('total_tokens', sa.Integer(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_messages')) - ) - op.create_index(op.f('ix_messages_id'), 'messages', ['id'], unique=False) - op.create_table('roles', - sa.Column('name', sa.String(length=100), nullable=False), - sa.Column('code', sa.String(length=100), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('is_system', sa.Boolean(), nullable=False), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_roles')) - ) - op.create_index(op.f('ix_roles_code'), 'roles', ['code'], unique=True) - op.create_index(op.f('ix_roles_id'), 'roles', ['id'], unique=False) - op.create_index(op.f('ix_roles_name'), 'roles', ['name'], unique=True) - op.create_table('table_metadata', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('table_name', sa.String(length=100), nullable=False), - sa.Column('table_schema', sa.String(length=50), nullable=False), - sa.Column('table_type', sa.String(length=20), nullable=False), - sa.Column('table_comment', sa.Text(), nullable=True), - sa.Column('database_config_id', sa.Integer(), nullable=True), - sa.Column('columns_info', sa.JSON(), nullable=False), - sa.Column('primary_keys', sa.JSON(), nullable=True), - sa.Column('foreign_keys', sa.JSON(), nullable=True), - sa.Column('indexes', sa.JSON(), nullable=True), - sa.Column('sample_data', sa.JSON(), nullable=True), - sa.Column('row_count', sa.Integer(), nullable=False), - sa.Column('is_enabled_for_qa', sa.Boolean(), nullable=False), - sa.Column('qa_description', sa.Text(), nullable=True), - sa.Column('business_context', sa.Text(), nullable=True), - sa.Column('last_synced_at', sa.DateTime(timezone=True), nullable=True), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_table_metadata')) - ) - op.create_index(op.f('ix_table_metadata_id'), 'table_metadata', ['id'], unique=False) - op.create_index(op.f('ix_table_metadata_table_name'), 'table_metadata', ['table_name'], unique=False) - op.create_table('users', - sa.Column('username', sa.String(length=50), nullable=False), - sa.Column('email', sa.String(length=100), nullable=False), - sa.Column('hashed_password', sa.String(length=255), nullable=False), - sa.Column('full_name', sa.String(length=100), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('avatar_url', sa.String(length=255), nullable=True), - sa.Column('bio', sa.Text(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_users')) - ) - op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True) - op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False) - op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True) - op.create_table('user_roles', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('role_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['role_id'], ['roles.id'], name=op.f('fk_user_roles_role_id_roles')), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_user_roles_user_id_users')), - sa.PrimaryKeyConstraint('user_id', 'role_id', name=op.f('pk_user_roles')) - ) - op.create_table('workflows', - sa.Column('name', sa.String(length=100), nullable=False, comment='工作流名称'), - sa.Column('description', sa.Text(), nullable=True, comment='工作流描述'), - sa.Column('status', sa.Enum('DRAFT', 'PUBLISHED', 'ARCHIVED', name='workflowstatus'), nullable=False, comment='工作流状态'), - sa.Column('is_active', sa.Boolean(), nullable=False, comment='是否激活'), - sa.Column('definition', sa.JSON(), nullable=False, comment='工作流定义'), - sa.Column('version', sa.String(length=20), nullable=False, comment='版本号'), - sa.Column('owner_id', sa.Integer(), nullable=False, comment='所有者ID'), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['owner_id'], ['users.id'], name=op.f('fk_workflows_owner_id_users')), - sa.PrimaryKeyConstraint('id', name=op.f('pk_workflows')) - ) - op.create_index(op.f('ix_workflows_id'), 'workflows', ['id'], unique=False) - op.create_table('workflow_executions', - sa.Column('workflow_id', sa.Integer(), nullable=False, comment='工作流ID'), - sa.Column('status', sa.Enum('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'CANCELLED', name='executionstatus'), nullable=False, comment='执行状态'), - sa.Column('input_data', sa.JSON(), nullable=True, comment='输入数据'), - sa.Column('output_data', sa.JSON(), nullable=True, comment='输出数据'), - sa.Column('started_at', sa.String(length=50), nullable=True, comment='开始时间'), - sa.Column('completed_at', sa.String(length=50), nullable=True, comment='完成时间'), - sa.Column('error_message', sa.Text(), nullable=True, comment='错误信息'), - sa.Column('executor_id', sa.Integer(), nullable=False, comment='执行者ID'), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['executor_id'], ['users.id'], name=op.f('fk_workflow_executions_executor_id_users')), - sa.ForeignKeyConstraint(['workflow_id'], ['workflows.id'], name=op.f('fk_workflow_executions_workflow_id_workflows')), - sa.PrimaryKeyConstraint('id', name=op.f('pk_workflow_executions')) - ) - op.create_index(op.f('ix_workflow_executions_id'), 'workflow_executions', ['id'], unique=False) - op.create_table('node_executions', - sa.Column('workflow_execution_id', sa.Integer(), nullable=False, comment='工作流执行ID'), - sa.Column('node_id', sa.String(length=50), nullable=False, comment='节点ID'), - sa.Column('node_type', sa.Enum('START', 'END', 'LLM', 'CONDITION', 'LOOP', 'CODE', 'HTTP', 'TOOL', name='nodetype'), nullable=False, comment='节点类型'), - sa.Column('node_name', sa.String(length=100), nullable=False, comment='节点名称'), - sa.Column('status', sa.Enum('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'CANCELLED', name='executionstatus'), nullable=False, comment='执行状态'), - sa.Column('input_data', sa.JSON(), nullable=True, comment='输入数据'), - sa.Column('output_data', sa.JSON(), nullable=True, comment='输出数据'), - sa.Column('started_at', sa.String(length=50), nullable=True, comment='开始时间'), - sa.Column('completed_at', sa.String(length=50), nullable=True, comment='完成时间'), - sa.Column('duration_ms', sa.Integer(), nullable=True, comment='执行时长(毫秒)'), - sa.Column('error_message', sa.Text(), nullable=True, comment='错误信息'), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.Column('created_by', sa.Integer(), nullable=True), - sa.Column('updated_by', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['workflow_execution_id'], ['workflow_executions.id'], name=op.f('fk_node_executions_workflow_execution_id_workflow_executions')), - sa.PrimaryKeyConstraint('id', name=op.f('pk_node_executions')) - ) - op.create_index(op.f('ix_node_executions_id'), 'node_executions', ['id'], unique=False) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_index(op.f('ix_node_executions_id'), table_name='node_executions') - op.drop_table('node_executions') - op.drop_index(op.f('ix_workflow_executions_id'), table_name='workflow_executions') - op.drop_table('workflow_executions') - op.drop_index(op.f('ix_workflows_id'), table_name='workflows') - op.drop_table('workflows') - op.drop_table('user_roles') - op.drop_index(op.f('ix_users_username'), table_name='users') - op.drop_index(op.f('ix_users_id'), table_name='users') - op.drop_index(op.f('ix_users_email'), table_name='users') - op.drop_table('users') - op.drop_index(op.f('ix_table_metadata_table_name'), table_name='table_metadata') - op.drop_index(op.f('ix_table_metadata_id'), table_name='table_metadata') - op.drop_table('table_metadata') - op.drop_index(op.f('ix_roles_name'), table_name='roles') - op.drop_index(op.f('ix_roles_id'), table_name='roles') - op.drop_index(op.f('ix_roles_code'), table_name='roles') - op.drop_table('roles') - op.drop_index(op.f('ix_messages_id'), table_name='messages') - op.drop_table('messages') - op.drop_index(op.f('ix_llm_configs_provider'), table_name='llm_configs') - op.drop_index(op.f('ix_llm_configs_name'), table_name='llm_configs') - op.drop_index(op.f('ix_llm_configs_id'), table_name='llm_configs') - op.drop_table('llm_configs') - op.drop_index(op.f('ix_knowledge_bases_name'), table_name='knowledge_bases') - op.drop_index(op.f('ix_knowledge_bases_id'), table_name='knowledge_bases') - op.drop_table('knowledge_bases') - op.drop_index(op.f('ix_excel_files_id'), table_name='excel_files') - op.drop_table('excel_files') - op.drop_index(op.f('ix_documents_id'), table_name='documents') - op.drop_table('documents') - op.drop_index(op.f('ix_database_configs_id'), table_name='database_configs') - op.drop_table('database_configs') - op.drop_index(op.f('ix_conversations_id'), table_name='conversations') - op.drop_table('conversations') - op.drop_index(op.f('ix_agent_configs_name'), table_name='agent_configs') - op.drop_index(op.f('ix_agent_configs_id'), table_name='agent_configs') - op.drop_table('agent_configs') - # ### end Alembic commands ### diff --git a/backend/apps/drgraph/drgraph_session.py b/backend/apps/drgraph/drgraph_session.py deleted file mode 100644 index d079de1..0000000 --- a/backend/apps/drgraph/drgraph_session.py +++ /dev/null @@ -1,66 +0,0 @@ -import re -import traceback -from loguru import logger - -class DrGraphSession: - def __init__(self, stepIndex: int, msg: str, session_id: str): - logger.info(f"DrGraphSession.__init__: stepIndex={stepIndex}, msg={msg}, session_id={session_id}") - self.stepIndex = stepIndex - self.session_id = session_id - - match = re.search(r";(-\d+)", msg); - level = -3 - if match: - level = int(match.group(1)) - value = value.replace(f";{level}", "") - level = -3 + level - - if "警告" in value or value.startswith("WARNING"): - self.log_warning(f"第 {self.stepIndex} 步 - {value}", level = level) - elif "异常" in value or value.startswith("EXCEPTION"): - self.log_exception(f"第 {self.stepIndex} 步 - {value}", level = level) - elif "成功" in value or value.startswith("SUCCESS"): - self.log_success(f"第 {self.stepIndex} 步 - {value}", level = level) - elif "开始" in value or value.startswith("START"): - self.log_success(f"第 {self.stepIndex} 步 - {value}", level = level) - elif "失败" in value or value.startswith("ERROR"): - self.log_error(f"第 {self.stepIndex} 步 - {value}", level = level) - else: - self.log_info(f"第 {self.stepIndex} 步 - {value}", level = level) - - def log_prefix(self) -> str: - """Get log prefix with session ID and desc.""" - return f"〖Session{self.session_id}〗" - - def parse_source_pos(self, level: int): - pos = (traceback.format_stack())[level - 1].strip().split('\n')[0] - match = re.search(r"File \"(.+?)\", line (\d+), in (\w+)", pos); - if match: - file = match.group(1).replace("F:\\DrGraph_Python\\FastAPI\\", "") - pos = f"{file}:{match.group(2)} in {match.group(3)}" - return pos - - def log_info(self, msg: str, level: int = -2): - """Log info message with session ID.""" - pos = self.parse_source_pos(level) - logger.info(f"{self.log_prefix()} {msg} >>> @ {pos}") - - def log_success(self, msg: str, level: int = -2): - """Log success message with session ID.""" - pos = self.parse_source_pos(level) - logger.success(f"{self.log_prefix()} {msg} >>> @ {pos}") - - def log_warning(self, msg: str, level: int = -2): - """Log warning message with session ID.""" - pos = self.parse_source_pos(level) - logger.warning(f"{self.log_prefix()} {msg} >>> @ {pos}") - - def log_error(self, msg: str, level: int = -2): - """Log error message with session ID.""" - pos = self.parse_source_pos(level) - logger.error(f"{self.log_prefix()} {msg} >>> @ {pos}") - - def log_exception(self, msg: str, level: int = -2): - """Log exception message with session ID.""" - pos = self.parse_source_pos(level) - logger.exception(f"{self.log_prefix()} {msg} >>> @ {pos}") diff --git a/backend/check_jwt.py b/backend/check_jwt.py deleted file mode 100644 index 3e145ce..0000000 --- a/backend/check_jwt.py +++ /dev/null @@ -1,9 +0,0 @@ -import jwt -import inspect - -print(f"jwt module path: {inspect.getfile(jwt)}") -print(f"jwt module attributes: {dir(jwt)}") -try: - print(f"jwt module __version__: {jwt.__version__}") -except AttributeError: - print("jwt module has no __version__ attribute") diff --git a/backend/configs/settings.yaml b/backend/configs/settings.yaml index d2afc03..a7379f4 100644 --- a/backend/configs/settings.yaml +++ b/backend/configs/settings.yaml @@ -11,7 +11,7 @@ app: file: upload_dir: "./data/uploads" max_size: 10485760 # 10MB - allowed_extensions: [".txt", ".pdf", ".docx", ".md"] + allowed_extensions: [".txt", ".pdf", ".docx", ".doc", ".md"] chunk_size: 1000 chunk_overlap: 200 semantic_splitter_enabled: true # 启用语义分割器 @@ -46,4 +46,11 @@ cors: chat: max_history_length: 10 system_prompt: "你是一个有用的AI助手,请根据提供的上下文信息回答用户的问题。" - max_response_tokens: 1000 \ No newline at end of file + max_response_tokens: 1000 + +# Redis Configuration +redis: + host: "localhost" + port: 6379 + db: 0 + password: null \ No newline at end of file diff --git a/backend/data/logs/app.log b/backend/data/logs/app.log index f386176..6440143 100644 --- a/backend/data/logs/app.log +++ b/backend/data/logs/app.log @@ -3666,3 +3666,11308 @@ 2025-12-04 14:41:35,326 - th_agenter.workflow_api - INFO - Updated workflow: qw -eee233444 by user admin 2025-12-04 14:41:35,327 - root - INFO - Clearing user context 2025-12-04 14:42:15,152 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 14:05:36,099 - root - INFO - Logging configured successfully +2025-12-11 14:05:36,213 - root - INFO - Logging configured successfully +2025-12-11 14:05:36,411 - root - INFO - Starting up TH-Agenter application... +2025-12-11 14:05:36,421 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-11 14:05:36,615 - root - INFO - Database tables created +2025-12-11 14:05:36,615 - root - INFO - Database initialized +2025-12-11 14:09:44,478 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 15:30:24,555 - root - INFO - Logging configured successfully +2025-12-11 15:30:24,675 - root - INFO - Logging configured successfully +2025-12-11 15:30:24,868 - root - INFO - Starting up TH-Agenter application... +2025-12-11 15:30:24,872 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-11 15:30:26,628 - root - INFO - Database tables created +2025-12-11 15:30:26,629 - root - INFO - Database initialized +2025-12-11 15:31:28,282 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 15:33:53,870 - root - INFO - Logging configured successfully +2025-12-11 15:33:53,998 - root - INFO - Logging configured successfully +2025-12-11 15:33:54,161 - root - INFO - Starting up TH-Agenter application... +2025-12-11 15:33:54,165 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-11 15:33:54,241 - root - INFO - Database tables created +2025-12-11 15:33:54,241 - root - INFO - Database initialized +2025-12-11 15:35:49,747 - root - INFO - [MIDDLEWARE] Processing request: GET / +2025-12-11 15:35:49,750 - root - INFO - [MIDDLEWARE] Checking path: / against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:35:49,750 - root - INFO - [MIDDLEWARE] Processing authenticated request: / +2025-12-11 15:35:49,751 - root - INFO - Clearing user context +2025-12-11 15:35:50,605 - root - INFO - [MIDDLEWARE] Processing request: GET / +2025-12-11 15:35:50,606 - root - INFO - [MIDDLEWARE] Checking path: / against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:35:50,606 - root - INFO - [MIDDLEWARE] Processing authenticated request: / +2025-12-11 15:35:50,606 - root - INFO - Clearing user context +2025-12-11 15:35:50,705 - root - INFO - [MIDDLEWARE] Processing request: GET /favicon.ico +2025-12-11 15:35:50,705 - root - INFO - [MIDDLEWARE] Checking path: /favicon.ico against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:35:50,706 - root - INFO - [MIDDLEWARE] Processing authenticated request: /favicon.ico +2025-12-11 15:35:50,706 - root - INFO - Clearing user context +2025-12-11 15:36:00,528 - root - INFO - [MIDDLEWARE] Processing request: GET / +2025-12-11 15:36:00,529 - root - INFO - [MIDDLEWARE] Checking path: / against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:36:00,529 - root - INFO - [MIDDLEWARE] Processing authenticated request: / +2025-12-11 15:36:00,529 - root - INFO - Clearing user context +2025-12-11 15:36:00,577 - root - INFO - [MIDDLEWARE] Processing request: GET /favicon.ico +2025-12-11 15:36:00,578 - root - INFO - [MIDDLEWARE] Checking path: /favicon.ico against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:36:00,578 - root - INFO - [MIDDLEWARE] Processing authenticated request: /favicon.ico +2025-12-11 15:36:00,579 - root - INFO - Clearing user context +2025-12-11 15:36:42,044 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 15:39:58,050 - root - INFO - Logging configured successfully +2025-12-11 15:39:58,144 - root - INFO - Logging configured successfully +2025-12-11 15:39:58,291 - root - INFO - Starting up TH-Agenter application... +2025-12-11 15:39:58,293 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-11 15:39:58,371 - root - INFO - Database tables created +2025-12-11 15:39:58,371 - root - INFO - Database initialized +2025-12-11 15:40:05,444 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 15:40:31,921 - root - INFO - Logging configured successfully +2025-12-11 15:40:32,027 - root - INFO - Logging configured successfully +2025-12-11 15:40:32,115 - root - INFO - Starting up TH-Agenter application... +2025-12-11 15:40:32,119 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-11 15:40:32,203 - root - INFO - Database tables created +2025-12-11 15:40:32,204 - root - INFO - Database initialized +2025-12-11 15:40:54,397 - root - INFO - [MIDDLEWARE] Processing request: GET / +2025-12-11 15:40:54,398 - root - INFO - [MIDDLEWARE] Checking path: / against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:40:54,399 - root - INFO - [MIDDLEWARE] Processing authenticated request: / +2025-12-11 15:40:54,399 - root - INFO - Clearing user context +2025-12-11 15:40:54,488 - root - INFO - [MIDDLEWARE] Processing request: GET /favicon.ico +2025-12-11 15:40:54,488 - root - INFO - [MIDDLEWARE] Checking path: /favicon.ico against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-11 15:40:54,489 - root - INFO - [MIDDLEWARE] Processing authenticated request: /favicon.ico +2025-12-11 15:40:54,489 - root - INFO - Clearing user context +2025-12-11 15:45:36,847 - root - INFO - Shutting down TH-Agenter application... +2025-12-11 15:56:40,689 - root - INFO - Logging configured successfully +2025-12-11 15:56:40,791 - root - INFO - Logging configured successfully +2025-12-11 15:56:40,882 - root - INFO - Starting up TH-Agenter application... +2025-12-11 15:56:40,886 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-11 15:56:40,922 - root - INFO - Database tables created +2025-12-11 15:56:40,923 - root - INFO - Database initialized +2025-12-11 16:31:10,650 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 08:57:02,091 - root - INFO - Logging configured successfully +2025-12-12 08:57:02,270 - root - INFO - Logging configured successfully +2025-12-12 08:57:02,566 - root - INFO - Starting up TH-Agenter application... +2025-12-12 08:57:02,574 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-12 08:57:02,717 - root - INFO - Database tables created +2025-12-12 08:57:02,717 - root - INFO - Database initialized +2025-12-12 09:06:11,221 - root - INFO - Logging configured successfully +2025-12-12 09:06:11,365 - root - INFO - Logging configured successfully +2025-12-12 09:06:11,550 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:06:11,554 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-12 09:06:11,620 - root - INFO - Database tables created +2025-12-12 09:06:11,620 - root - INFO - Database initialized +2025-12-12 09:06:11,622 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:06:36,627 - root - INFO - Logging configured successfully +2025-12-12 09:06:36,815 - root - INFO - Logging configured successfully +2025-12-12 09:06:37,113 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:06:37,121 - root - INFO - PostgreSQL database engine created: postgresql://iagent:iagent@192.168.10.11:5432/iagent +2025-12-12 09:06:37,185 - root - INFO - Database tables created +2025-12-12 09:06:37,185 - root - INFO - Database initialized +2025-12-12 09:06:37,186 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:09:41,021 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:09:41,022 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:09:41,023 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:09:41,024 - root - INFO - Clearing user context +2025-12-12 09:09:41,030 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:09:41,031 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:09:41,032 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:09:41,032 - root - INFO - Clearing user context +2025-12-12 09:09:41,036 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:09:41,037 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:09:41,038 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:09:41,038 - root - INFO - Clearing user context +2025-12-12 09:09:41,043 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:09:41,043 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:09:41,044 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:09:41,044 - root - INFO - Clearing user context +2025-12-12 09:09:41,047 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:09:41,047 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:09:41,048 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:09:41,048 - root - INFO - Clearing user context +2025-12-12 09:10:53,183 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/register +2025-12-12 09:10:53,184 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/register against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:53,184 - root - INFO - [MIDDLEWARE] Path /api/auth/register exactly matches exclude_path /api/auth/register +2025-12-12 09:10:53,184 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/register +2025-12-12 09:10:53,541 - th_agenter.th_agenter.services.user - INFO - User created successfully: jcq +2025-12-12 09:10:57,862 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:10:57,862 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:57,863 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:10:57,864 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:10:58,514 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:10:58,515 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:58,516 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:10:58,516 - root - INFO - Clearing user context +2025-12-12 09:10:58,522 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:58,522 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:58,522 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:58,522 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:58,526 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:10:58,529 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:10:58,530 - root - INFO - Looking for user with username: jcq +2025-12-12 09:10:58,537 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:10:58,545 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:58,545 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:10:58,552 - root - INFO - Clearing user context +2025-12-12 09:10:58,777 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/1 +2025-12-12 09:10:58,777 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/1 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:58,777 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/1 +2025-12-12 09:10:58,778 - root - INFO - Clearing user context +2025-12-12 09:10:58,782 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:58,782 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:58,783 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:58,783 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:58,786 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:10:58,786 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:10:58,786 - root - INFO - Looking for user with username: jcq +2025-12-12 09:10:58,791 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:10:58,792 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:58,793 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:10:58,803 - root - INFO - Clearing user context +2025-12-12 09:10:59,280 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:10:59,282 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,283 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:10:59,284 - root - INFO - Clearing user context +2025-12-12 09:10:59,291 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,292 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,293 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,294 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,297 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:10:59,297 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,298 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:10:59,298 - root - INFO - Clearing user context +2025-12-12 09:10:59,304 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,307 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,307 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,308 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,324 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:10:59,325 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:10:59,326 - root - INFO - Clearing user context +2025-12-12 09:10:59,326 - root - INFO - Looking for user with username: jcq +2025-12-12 09:10:59,334 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:10:59,334 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:10:59,335 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,336 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,336 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:10:59,337 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:10:59,338 - root - INFO - Clearing user context +2025-12-12 09:10:59,362 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,367 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,368 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,368 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,383 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:10:59,386 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,387 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:10:59,387 - root - INFO - Clearing user context +2025-12-12 09:10:59,396 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,396 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,397 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,404 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,411 - root - INFO - Clearing user context +2025-12-12 09:10:59,430 - root - INFO - Clearing user context +2025-12-12 09:10:59,436 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:10:59,440 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,440 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:10:59,441 - root - INFO - Clearing user context +2025-12-12 09:10:59,446 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,446 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,446 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,446 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,449 - root - INFO - Clearing user context +2025-12-12 09:10:59,451 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:10:59,452 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,452 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:10:59,453 - root - INFO - Clearing user context +2025-12-12 09:10:59,460 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,460 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,460 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,460 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,464 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:10:59,465 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:10:59,465 - root - INFO - Looking for user with username: jcq +2025-12-12 09:10:59,472 - root - INFO - Clearing user context +2025-12-12 09:10:59,474 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:10:59,475 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,476 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:10:59,483 - root - INFO - Clearing user context +2025-12-12 09:10:59,762 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:10:59,763 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:10:59,764 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:10:59,764 - root - INFO - Clearing user context +2025-12-12 09:10:59,768 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:10:59,768 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:10:59,769 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:10:59,770 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:10:59,776 - root - INFO - Clearing user context +2025-12-12 09:11:00,094 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:11:00,098 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:00,099 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:11:00,099 - root - INFO - Clearing user context +2025-12-12 09:11:00,107 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:00,124 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:00,126 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:00,127 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:00,138 - root - INFO - Clearing user context +2025-12-12 09:11:01,589 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:11:01,590 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:01,590 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:11:01,591 - root - INFO - Clearing user context +2025-12-12 09:11:01,596 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:01,597 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:01,597 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:01,598 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:01,601 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:11:01,602 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:11:01,603 - root - INFO - Looking for user with username: jcq +2025-12-12 09:11:01,608 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:11:01,610 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:01,610 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:11:01,615 - root - INFO - Clearing user context +2025-12-12 09:11:06,676 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/ +2025-12-12 09:11:06,676 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:06,677 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:11:06,677 - root - INFO - Clearing user context +2025-12-12 09:11:06,681 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:06,681 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:06,682 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:06,682 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:06,685 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:11:06,685 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:11:06,686 - root - INFO - Looking for user with username: jcq +2025-12-12 09:11:06,689 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:11:06,690 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:06,690 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:11:06,736 - th_agenter.services.knowledge_base - INFO - Created knowledge base: 1 (ID: 1) +2025-12-12 09:11:06,738 - root - INFO - Clearing user context +2025-12-12 09:11:24,013 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:11:24,013 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:24,014 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:11:24,014 - root - INFO - Clearing user context +2025-12-12 09:11:24,019 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:24,020 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:24,021 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:24,022 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:24,028 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:11:24,030 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:11:24,032 - root - INFO - Looking for user with username: jcq +2025-12-12 09:11:24,038 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:11:24,039 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:24,039 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:11:24,063 - root - INFO - Clearing user context +2025-12-12 09:11:32,728 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/1/documents +2025-12-12 09:11:32,729 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:32,730 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:11:32,731 - root - INFO - Clearing user context +2025-12-12 09:11:32,738 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:32,738 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:32,738 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:32,739 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:32,745 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:11:32,746 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:11:32,747 - root - INFO - Looking for user with username: jcq +2025-12-12 09:11:32,752 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:11:32,753 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:32,753 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:11:32,987 - th_agenter.services.document - INFO - Uploaded document: 高速公路低空算法验证方案.docx to KB 1 (Doc ID: 1) +2025-12-12 09:11:33,089 - th_agenter.llm_config_service - WARNING - 未找到默认嵌入模型配置 +2025-12-12 09:11:33,090 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 09:11:33,346 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 09:11:33,348 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 09:11:33,355 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 1, 路径: e:\Work\HXF\backend\data\uploads\kb_1\4e71f1b4-df3c-4ad4-b839-e8af49c00c76_高速公路低空算法验证方案.docx +2025-12-12 09:11:33,358 - th_agenter.services.document_processor - ERROR - 加载文档失败 e:\Work\HXF\backend\data\uploads\kb_1\4e71f1b4-df3c-4ad4-b839-e8af49c00c76_高速公路低空算法验证方案.docx: No module named 'docx2txt' +2025-12-12 09:11:33,358 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 1: No module named 'docx2txt' +2025-12-12 09:11:33,372 - root - INFO - Clearing user context +2025-12-12 09:11:35,387 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:11:35,388 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:11:35,388 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:11:35,389 - root - INFO - Clearing user context +2025-12-12 09:11:35,395 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:11:35,396 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:35,396 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:11:35,397 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:11:35,401 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:11:35,402 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765519858} +2025-12-12 09:11:35,402 - root - INFO - Looking for user with username: jcq +2025-12-12 09:11:35,408 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:11:35,408 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:11:35,408 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:11:35,420 - root - INFO - Clearing user context +2025-12-12 09:12:00,168 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/1/search +2025-12-12 09:12:00,169 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:12:00,169 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/search +2025-12-12 09:12:00,170 - root - INFO - Clearing user context +2025-12-12 09:12:00,176 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:12:00,176 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:12:00,177 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:12:00,177 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:12:00,179 - root - INFO - Clearing user context +2025-12-12 09:15:45,155 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:15:45,155 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:15:45,156 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:15:45,156 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:15:45,163 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:15:48,798 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:15:48,798 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:15:48,798 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:15:48,799 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:15:48,807 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:16:10,910 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:16:10,910 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:16:10,910 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:16:10,911 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:16:10,916 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:17:02,248 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:17:02,248 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:02,249 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:17:02,249 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:17:02,930 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:17:02,932 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:02,932 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:17:02,933 - root - INFO - Clearing user context +2025-12-12 09:17:02,939 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:02,953 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:02,954 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:02,960 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:02,964 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:02,965 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:02,965 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:02,971 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:02,971 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:02,971 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:02,977 - root - INFO - Clearing user context +2025-12-12 09:17:03,192 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/1 +2025-12-12 09:17:03,193 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/1 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,193 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/1 +2025-12-12 09:17:03,193 - root - INFO - Clearing user context +2025-12-12 09:17:03,196 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,197 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,197 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,197 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,199 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:03,199 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:03,199 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:03,202 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:03,202 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,202 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:03,207 - root - INFO - Clearing user context +2025-12-12 09:17:03,303 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:17:03,304 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,304 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:17:03,305 - root - INFO - Clearing user context +2025-12-12 09:17:03,310 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,310 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,310 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,311 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,314 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:03,315 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:03,315 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:03,321 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:03,321 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,321 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:03,333 - root - INFO - Clearing user context +2025-12-12 09:17:03,570 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:17:03,570 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,571 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:17:03,571 - root - INFO - Clearing user context +2025-12-12 09:17:03,576 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,576 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,577 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,577 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,579 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:17:03,581 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,581 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:17:03,582 - root - INFO - Clearing user context +2025-12-12 09:17:03,589 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,589 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,590 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,590 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,610 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:03,612 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:03,613 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:03,611 - root - INFO - Clearing user context +2025-12-12 09:17:03,619 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:03,622 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,622 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:03,635 - root - INFO - Clearing user context +2025-12-12 09:17:03,641 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:17:03,643 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,645 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:17:03,646 - root - INFO - Clearing user context +2025-12-12 09:17:03,659 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,669 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,671 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,672 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,686 - root - INFO - Clearing user context +2025-12-12 09:17:03,933 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:17:03,934 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,935 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:17:03,935 - root - INFO - Clearing user context +2025-12-12 09:17:03,941 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,941 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,941 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,941 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,943 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:17:03,944 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:03,944 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:17:03,944 - root - INFO - Clearing user context +2025-12-12 09:17:03,948 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:03,950 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:03,951 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:03,951 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:03,962 - root - INFO - Clearing user context +2025-12-12 09:17:03,963 - root - INFO - Clearing user context +2025-12-12 09:17:04,011 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:17:04,014 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:04,015 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:17:04,015 - root - INFO - Clearing user context +2025-12-12 09:17:04,021 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:04,025 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:04,025 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:04,026 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:04,037 - root - INFO - Clearing user context +2025-12-12 09:17:04,272 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:17:04,273 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:04,273 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:17:04,273 - root - INFO - Clearing user context +2025-12-12 09:17:04,278 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:04,278 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:04,278 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:04,278 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:04,286 - root - INFO - Clearing user context +2025-12-12 09:17:06,349 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:17:06,349 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:06,349 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:17:06,349 - root - INFO - Clearing user context +2025-12-12 09:17:06,355 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:06,355 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:06,355 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:06,356 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:06,358 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:06,359 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:06,360 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:06,366 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:06,369 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:06,369 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:06,382 - root - INFO - Clearing user context +2025-12-12 09:17:08,772 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:17:08,773 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:08,773 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:17:08,774 - root - INFO - Clearing user context +2025-12-12 09:17:08,779 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:08,780 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:08,780 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:08,780 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:08,786 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:08,787 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:08,788 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:08,800 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:08,801 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:08,801 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:08,812 - root - INFO - Clearing user context +2025-12-12 09:17:24,440 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/ +2025-12-12 09:17:24,440 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:24,441 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:17:24,441 - root - INFO - Clearing user context +2025-12-12 09:17:24,445 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:24,445 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:24,445 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:24,446 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:24,449 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:24,449 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:24,450 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:24,453 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:24,454 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:24,455 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:24,495 - th_agenter.services.knowledge_base - INFO - Created knowledge base: test (ID: 2) +2025-12-12 09:17:24,498 - root - INFO - Clearing user context +2025-12-12 09:17:27,279 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:17:27,280 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:27,280 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:17:27,280 - root - INFO - Clearing user context +2025-12-12 09:17:27,285 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:27,286 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:27,286 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:27,286 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:27,288 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:27,289 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:27,289 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:27,294 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:27,295 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:27,295 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:27,312 - root - INFO - Clearing user context +2025-12-12 09:17:43,272 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:17:43,273 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:43,273 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:17:43,274 - root - INFO - Clearing user context +2025-12-12 09:17:43,279 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:43,280 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:43,281 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:43,281 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:43,284 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:43,285 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:43,285 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:43,290 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:43,291 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:43,291 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:43,301 - root - INFO - Clearing user context +2025-12-12 09:17:52,306 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/2/documents +2025-12-12 09:17:52,314 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:52,315 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:17:52,315 - root - INFO - Clearing user context +2025-12-12 09:17:52,320 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:52,322 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:52,323 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:52,323 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:52,391 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:52,392 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:52,392 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:52,397 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:52,398 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:52,399 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:52,445 - th_agenter.services.document - INFO - Uploaded document: 陕西算法分析统计1023.docx to KB 2 (Doc ID: 2) +2025-12-12 09:17:52,453 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 2, 路径: e:\Work\HXF\backend\data\uploads\kb_2\758a9e60-82a4-4099-818a-186aa0440db6_陕西算法分析统计1023.docx +2025-12-12 09:17:52,455 - th_agenter.services.document_processor - ERROR - 加载文档失败 e:\Work\HXF\backend\data\uploads\kb_2\758a9e60-82a4-4099-818a-186aa0440db6_陕西算法分析统计1023.docx: No module named 'docx2txt' +2025-12-12 09:17:52,455 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 2: No module named 'docx2txt' +2025-12-12 09:17:52,469 - root - INFO - Clearing user context +2025-12-12 09:17:54,483 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:17:54,483 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:17:54,483 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:17:54,483 - root - INFO - Clearing user context +2025-12-12 09:17:54,488 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:17:54,488 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:54,488 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:17:54,488 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:17:54,491 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:17:54,491 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:17:54,491 - root - INFO - Looking for user with username: jcq +2025-12-12 09:17:54,495 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:17:54,500 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:17:54,503 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:17:54,530 - root - INFO - Clearing user context +2025-12-12 09:18:11,960 - root - INFO - [MIDDLEWARE] Processing request: GET /api/workflows/ +2025-12-12 09:18:11,961 - root - INFO - [MIDDLEWARE] Checking path: /api/workflows/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:11,961 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/workflows/ +2025-12-12 09:18:11,962 - root - INFO - Clearing user context +2025-12-12 09:18:11,968 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:11,969 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:11,969 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:11,970 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:11,973 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:11,973 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:11,973 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:11,978 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:11,978 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:11,979 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:11,996 - root - INFO - Clearing user context +2025-12-12 09:18:12,233 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:18:12,235 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:12,238 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:18:12,239 - root - INFO - Clearing user context +2025-12-12 09:18:12,250 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:12,251 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,251 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:12,251 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:12,255 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:12,256 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:12,257 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:12,263 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:12,264 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,264 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:12,268 - root - INFO - Clearing user context +2025-12-12 09:18:12,275 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/1 +2025-12-12 09:18:12,276 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/1 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:12,276 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/1 +2025-12-12 09:18:12,277 - root - INFO - Clearing user context +2025-12-12 09:18:12,281 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:12,282 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,282 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:12,283 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:12,287 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:12,288 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:12,289 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:12,294 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:12,295 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,296 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:12,302 - root - INFO - Clearing user context +2025-12-12 09:18:12,689 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:18:12,689 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:12,690 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:18:12,690 - root - INFO - Clearing user context +2025-12-12 09:18:12,696 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:12,707 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,707 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:12,707 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:12,709 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:18:12,710 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:12,711 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:18:12,712 - root - INFO - Clearing user context +2025-12-12 09:18:12,719 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:12,720 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,722 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:12,725 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:12,730 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:12,733 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:12,734 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:12,738 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:12,740 - root - INFO - Clearing user context +2025-12-12 09:18:12,741 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,741 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:12,759 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:18:12,760 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:12,761 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:18:12,762 - root - INFO - Clearing user context +2025-12-12 09:18:12,768 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:12,774 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:12,774 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:12,774 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:12,779 - root - INFO - Clearing user context +2025-12-12 09:18:12,796 - root - INFO - Clearing user context +2025-12-12 09:18:20,234 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:18:20,235 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:20,235 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:18:20,236 - root - INFO - Clearing user context +2025-12-12 09:18:20,243 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:20,244 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:20,244 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:20,244 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:20,248 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:20,249 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:20,250 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:20,255 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:20,256 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:20,257 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:20,268 - root - INFO - Clearing user context +2025-12-12 09:18:22,221 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:18:22,222 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:22,222 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:18:22,223 - root - INFO - Clearing user context +2025-12-12 09:18:22,229 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:22,230 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:22,230 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:22,230 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:22,233 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:22,234 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:22,235 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:22,243 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:22,243 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:22,244 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:22,263 - root - INFO - Clearing user context +2025-12-12 09:18:23,154 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:18:23,154 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:23,154 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:18:23,155 - root - INFO - Clearing user context +2025-12-12 09:18:23,160 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:23,160 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:23,160 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:23,160 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:23,163 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:23,163 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:23,163 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:23,168 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:23,176 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:23,178 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:23,192 - root - INFO - Clearing user context +2025-12-12 09:18:35,789 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:18:35,789 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:35,789 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:18:35,789 - root - INFO - Clearing user context +2025-12-12 09:18:35,795 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:35,796 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:35,796 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:35,796 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:35,799 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:35,799 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:35,800 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:35,805 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:35,805 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:35,806 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:35,817 - root - INFO - Clearing user context +2025-12-12 09:18:55,049 - root - INFO - [MIDDLEWARE] Processing request: GET /api/workflows/ +2025-12-12 09:18:55,051 - root - INFO - [MIDDLEWARE] Checking path: /api/workflows/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:55,053 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/workflows/ +2025-12-12 09:18:55,054 - root - INFO - Clearing user context +2025-12-12 09:18:55,060 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:55,063 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:55,063 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:55,063 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:55,069 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:55,069 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:55,070 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:55,076 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:55,076 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:55,076 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:55,083 - root - INFO - Clearing user context +2025-12-12 09:18:58,165 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:18:58,165 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:58,166 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:18:58,166 - root - INFO - Clearing user context +2025-12-12 09:18:58,171 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:58,172 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,173 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:58,173 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:58,177 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:58,178 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:58,178 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:58,183 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:58,184 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,185 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:58,190 - root - INFO - Clearing user context +2025-12-12 09:18:58,198 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/1 +2025-12-12 09:18:58,199 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/1 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:58,200 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/1 +2025-12-12 09:18:58,200 - root - INFO - Clearing user context +2025-12-12 09:18:58,204 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:58,206 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,207 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:58,207 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:58,210 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:18:58,211 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:18:58,212 - root - INFO - Looking for user with username: jcq +2025-12-12 09:18:58,216 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:18:58,217 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,217 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:18:58,224 - root - INFO - Clearing user context +2025-12-12 09:18:58,609 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:18:58,609 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:58,610 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:18:58,610 - root - INFO - Clearing user context +2025-12-12 09:18:58,615 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:58,616 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,618 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:58,619 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:58,629 - root - INFO - Clearing user context +2025-12-12 09:18:58,639 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:18:58,639 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:18:58,640 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:18:58,640 - root - INFO - Clearing user context +2025-12-12 09:18:58,651 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:18:58,651 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:18:58,652 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:18:58,652 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:18:58,667 - root - INFO - Clearing user context +2025-12-12 09:19:02,259 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:19:02,260 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:02,260 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:19:02,261 - root - INFO - Clearing user context +2025-12-12 09:19:02,268 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:02,268 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:02,268 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:02,269 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:02,280 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:02,282 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:02,283 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:02,291 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:02,294 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:02,294 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:02,312 - root - INFO - Clearing user context +2025-12-12 09:19:05,060 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:19:05,061 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:05,061 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:19:05,062 - root - INFO - Clearing user context +2025-12-12 09:19:05,067 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:05,067 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:05,068 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:05,068 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:05,070 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:05,071 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:05,071 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:05,075 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:05,076 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:05,076 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:05,086 - root - INFO - Clearing user context +2025-12-12 09:19:32,732 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:19:32,733 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:32,733 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:19:32,734 - root - INFO - Clearing user context +2025-12-12 09:19:32,739 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:32,740 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:32,740 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:32,741 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:32,744 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:32,745 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:32,745 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:32,749 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:32,749 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:32,750 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:32,755 - root - INFO - Clearing user context +2025-12-12 09:19:32,763 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/1 +2025-12-12 09:19:32,764 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/1 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:32,764 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/1 +2025-12-12 09:19:32,765 - root - INFO - Clearing user context +2025-12-12 09:19:32,770 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:32,771 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:32,771 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:32,771 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:32,775 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:32,775 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:32,775 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:32,780 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:32,780 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:32,781 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:32,789 - root - INFO - Clearing user context +2025-12-12 09:19:33,046 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:19:33,047 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:33,047 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:19:33,047 - root - INFO - Clearing user context +2025-12-12 09:19:33,053 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:33,053 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:33,054 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:33,054 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:33,066 - root - INFO - Clearing user context +2025-12-12 09:19:33,076 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 09:19:33,076 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:33,077 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 09:19:33,078 - root - INFO - Clearing user context +2025-12-12 09:19:33,085 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:33,085 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:33,088 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:33,088 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:33,098 - root - INFO - Clearing user context +2025-12-12 09:19:43,326 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:19:43,326 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:43,327 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:19:43,327 - root - INFO - Clearing user context +2025-12-12 09:19:43,333 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:43,333 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:43,333 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:43,334 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:43,338 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:43,338 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:43,338 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:43,351 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:43,351 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:43,352 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:43,370 - root - INFO - Clearing user context +2025-12-12 09:19:53,123 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:19:53,124 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:19:53,124 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:19:53,124 - root - INFO - Clearing user context +2025-12-12 09:19:53,132 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:19:53,133 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:53,133 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:19:53,133 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:19:53,137 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:19:53,138 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:19:53,139 - root - INFO - Looking for user with username: jcq +2025-12-12 09:19:53,145 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:19:53,146 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:19:53,146 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:19:53,157 - root - INFO - Clearing user context +2025-12-12 09:22:48,126 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:22:48,126 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:22:48,127 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:22:48,127 - root - INFO - Clearing user context +2025-12-12 09:22:48,132 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:22:48,133 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:48,133 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:22:48,133 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:22:48,136 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:22:48,136 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:22:48,137 - root - INFO - Looking for user with username: jcq +2025-12-12 09:22:48,142 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:22:48,142 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:48,142 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:22:48,150 - root - INFO - Clearing user context +2025-12-12 09:22:48,494 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:22:48,494 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:22:48,495 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:22:48,495 - root - INFO - Clearing user context +2025-12-12 09:22:48,501 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:22:48,502 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:48,503 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:22:48,503 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:22:48,507 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:22:48,507 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:22:48,507 - root - INFO - Looking for user with username: jcq +2025-12-12 09:22:48,512 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:22:48,513 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:48,513 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:22:48,524 - root - INFO - Clearing user context +2025-12-12 09:22:53,061 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:22:53,061 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:22:53,062 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:22:53,062 - root - INFO - Clearing user context +2025-12-12 09:22:53,066 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:22:53,067 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:53,067 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:22:53,067 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:22:53,069 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:22:53,069 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:22:53,069 - root - INFO - Looking for user with username: jcq +2025-12-12 09:22:53,073 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:22:53,075 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:53,075 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:22:53,083 - root - INFO - Clearing user context +2025-12-12 09:22:58,805 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:22:58,806 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:22:58,806 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:22:58,806 - root - INFO - Clearing user context +2025-12-12 09:22:58,812 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:22:58,813 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:58,813 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:22:58,813 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:22:58,816 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:22:58,816 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:22:58,817 - root - INFO - Looking for user with username: jcq +2025-12-12 09:22:58,821 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:22:58,821 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:22:58,822 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:22:58,831 - root - INFO - Clearing user context +2025-12-12 09:23:00,832 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:23:00,833 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:23:00,833 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:23:00,833 - root - INFO - Clearing user context +2025-12-12 09:23:00,838 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:23:00,839 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:00,839 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:23:00,840 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:23:00,842 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:23:00,843 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:23:00,843 - root - INFO - Looking for user with username: jcq +2025-12-12 09:23:00,847 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:23:00,848 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:00,848 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:23:00,855 - root - INFO - Clearing user context +2025-12-12 09:23:05,525 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/1/documents +2025-12-12 09:23:05,526 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/1/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:23:05,526 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/1/documents +2025-12-12 09:23:05,526 - root - INFO - Clearing user context +2025-12-12 09:23:05,531 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:23:05,532 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:05,532 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:23:05,533 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:23:05,535 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:23:05,536 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:23:05,536 - root - INFO - Looking for user with username: jcq +2025-12-12 09:23:05,541 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:23:05,541 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:05,541 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:23:05,550 - root - INFO - Clearing user context +2025-12-12 09:23:13,823 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/2/documents +2025-12-12 09:23:13,824 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/2/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:23:13,825 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/2/documents +2025-12-12 09:23:13,825 - root - INFO - Clearing user context +2025-12-12 09:23:13,830 - root - INFO - Setting user in context with token: jcq (ID: 1) +2025-12-12 09:23:13,831 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:13,831 - root - INFO - User jcq (ID: 1) authenticated and set in context +2025-12-12 09:23:13,831 - root - INFO - Verified current user ID in context: 1 +2025-12-12 09:23:13,834 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:23:13,834 - root - INFO - Token payload: {'sub': 'jcq', 'exp': 1765520222} +2025-12-12 09:23:13,835 - root - INFO - Looking for user with username: jcq +2025-12-12 09:23:13,839 - root - INFO - Setting user in context: jcq (ID: 1) +2025-12-12 09:23:13,839 - root - INFO - Verification - ContextVar user: jcq +2025-12-12 09:23:13,839 - root - INFO - User jcq (ID: 1) set in UserContext +2025-12-12 09:23:13,847 - root - INFO - Clearing user context +2025-12-12 09:25:45,370 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:26:29,905 - root - INFO - Logging configured successfully +2025-12-12 09:26:29,997 - root - INFO - Logging configured successfully +2025-12-12 09:26:30,153 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:26:30,163 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:26:30,172 - root - INFO - Database tables created +2025-12-12 09:26:30,173 - root - INFO - Database initialized +2025-12-12 09:27:36,728 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:27:36,729 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:27:36,729 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:27:36,729 - root - INFO - Clearing user context +2025-12-12 09:27:37,066 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:27:37,066 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:27:37,066 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:27:37,066 - root - INFO - Clearing user context +2025-12-12 09:27:37,388 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:27:37,389 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:27:37,389 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:27:37,390 - root - INFO - Clearing user context +2025-12-12 09:27:41,299 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:27:41,300 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:27:41,300 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:27:41,300 - root - INFO - Clearing user context +2025-12-12 09:28:01,605 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:28:01,605 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:28:01,605 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:28:01,606 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:28:01,611 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:28:22,819 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:28:22,823 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:28:22,824 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:28:22,824 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:28:22,838 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:28:26,965 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:28:26,966 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:28:26,967 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:28:26,967 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:28:26,969 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:28:56,642 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:28:56,643 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:28:56,644 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:28:56,644 - root - INFO - Clearing user context +2025-12-12 09:28:56,883 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:28:56,884 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:28:56,885 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:28:56,885 - root - INFO - Clearing user context +2025-12-12 09:29:04,402 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:29:28,454 - root - INFO - Logging configured successfully +2025-12-12 09:29:28,564 - root - INFO - Logging configured successfully +2025-12-12 09:29:28,717 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:29:28,724 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:29:28,728 - root - INFO - Database tables created +2025-12-12 09:29:28,729 - root - INFO - Database initialized +2025-12-12 09:29:54,224 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:54,225 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:54,226 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:54,226 - root - INFO - Clearing user context +2025-12-12 09:29:54,416 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:54,417 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:54,417 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:54,417 - root - INFO - Clearing user context +2025-12-12 09:29:57,771 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:57,773 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:57,773 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:57,773 - root - INFO - Clearing user context +2025-12-12 09:29:58,572 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:29:58,573 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,573 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:29:58,573 - root - INFO - Clearing user context +2025-12-12 09:29:58,606 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:29:58,607 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,607 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:29:58,608 - root - INFO - Clearing user context +2025-12-12 09:29:58,613 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:29:58,613 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,614 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:29:58,614 - root - INFO - Clearing user context +2025-12-12 09:29:58,618 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:58,619 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,620 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:58,620 - root - INFO - Clearing user context +2025-12-12 09:29:58,932 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 09:29:58,933 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,933 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 09:29:58,933 - root - INFO - Clearing user context +2025-12-12 09:29:58,939 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:58,943 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,944 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:58,944 - root - INFO - Clearing user context +2025-12-12 09:29:58,949 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 09:29:58,950 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:58,951 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 09:29:58,951 - root - INFO - Clearing user context +2025-12-12 09:29:59,262 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:59,262 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:59,262 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:59,263 - root - INFO - Clearing user context +2025-12-12 09:29:59,574 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:59,575 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:59,575 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:59,575 - root - INFO - Clearing user context +2025-12-12 09:29:59,837 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:59,838 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:59,838 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:59,838 - root - INFO - Clearing user context +2025-12-12 09:29:59,884 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:29:59,886 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:29:59,886 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:29:59,887 - root - INFO - Clearing user context +2025-12-12 09:30:00,146 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:30:00,147 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:30:00,147 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:30:00,148 - root - INFO - Clearing user context +2025-12-12 09:30:25,022 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:30:25,023 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:30:25,023 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:30:25,024 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:30:25,032 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:43:53,238 - root - INFO - Logging configured successfully +2025-12-12 09:43:53,424 - root - INFO - Logging configured successfully +2025-12-12 09:43:53,659 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:43:53,671 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:43:53,675 - root - INFO - Database tables created +2025-12-12 09:43:53,675 - root - INFO - Database initialized +2025-12-12 09:43:53,678 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:48:02,802 - root - INFO - Logging configured successfully +2025-12-12 09:48:02,905 - root - INFO - Logging configured successfully +2025-12-12 09:48:03,066 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:48:03,077 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:48:03,081 - root - INFO - Database tables created +2025-12-12 09:48:03,081 - root - INFO - Database initialized +2025-12-12 09:48:10,094 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:48:10,095 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:48:10,096 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:48:10,096 - root - INFO - Clearing user context +2025-12-12 09:48:10,096 - root - INFO - User context cleared before authentication +2025-12-12 09:48:10,097 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY3EiLCJleHAiOjE3NjU1MjAyMjJ9.G0HxiFxzlg5dAUGoofkmdVVcsdgRsT1qFujtFgkSQL4 +2025-12-12 09:48:10,098 - root - ERROR - Token verification failed: Signature verification failed +2025-12-12 09:48:10,098 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:48:10,098 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-12 09:48:10,099 - root - ERROR - Algorithm: HS256 +2025-12-12 09:48:49,208 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:48:49,209 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:48:49,209 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:48:49,210 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:48:49,265 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:49:14,911 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:49:26,634 - root - INFO - Logging configured successfully +2025-12-12 09:49:26,733 - root - INFO - Logging configured successfully +2025-12-12 09:49:26,884 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:49:26,891 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:49:26,895 - root - INFO - Database tables created +2025-12-12 09:49:26,896 - root - INFO - Database initialized +2025-12-12 09:51:53,099 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:52:04,300 - root - INFO - Logging configured successfully +2025-12-12 09:52:04,394 - root - INFO - Logging configured successfully +2025-12-12 09:52:04,529 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:52:04,537 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:52:04,541 - root - INFO - Database tables created +2025-12-12 09:52:04,541 - root - INFO - Database initialized +2025-12-12 09:52:29,981 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 09:52:29,982 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:52:29,982 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 09:52:29,983 - root - INFO - Clearing user context +2025-12-12 09:52:29,983 - root - INFO - User context cleared before authentication +2025-12-12 09:52:29,983 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY3EiLCJleHAiOjE3NjU1MjAyMjJ9.G0HxiFxzlg5dAUGoofkmdVVcsdgRsT1qFujtFgkSQL4 +2025-12-12 09:52:29,984 - root - ERROR - Token verification failed: Signature verification failed +2025-12-12 09:52:29,984 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqY... +2025-12-12 09:52:29,984 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-12 09:52:29,985 - root - ERROR - Algorithm: HS256 +2025-12-12 09:53:27,751 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 09:53:27,751 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 09:53:27,752 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 09:53:27,752 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 09:53:27,801 - root - ERROR - Database session error: 401: Incorrect email or password +2025-12-12 09:53:47,637 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 09:55:35,342 - root - INFO - Logging configured successfully +2025-12-12 09:56:19,789 - root - INFO - Logging configured successfully +2025-12-12 09:56:19,888 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:56:19,889 - th_agenter.__main__ - INFO - Starting system data initialization... +2025-12-12 09:56:19,909 - th_agenter.__main__ - INFO - Roles initialization completed +2025-12-12 09:56:19,909 - th_agenter.__main__ - INFO - Starting admin user initialization... +2025-12-12 09:56:19,910 - th_agenter.__main__ - INFO - Admin user already exists +2025-12-12 09:56:19,911 - th_agenter.__main__ - INFO - System data initialization completed successfully +2025-12-12 09:57:49,369 - root - INFO - Logging configured successfully +2025-12-12 09:57:49,475 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:59:29,384 - root - INFO - Logging configured successfully +2025-12-12 09:59:29,514 - root - INFO - Logging configured successfully +2025-12-12 09:59:29,616 - root - INFO - Starting up TH-Agenter application... +2025-12-12 09:59:29,625 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 09:59:29,629 - root - INFO - Database tables created +2025-12-12 09:59:29,629 - root - INFO - Database initialized +2025-12-12 10:00:07,194 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-12 10:00:07,195 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:07,196 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-12 10:00:07,196 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-12 10:00:07,519 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:00:07,519 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:07,519 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:00:07,520 - root - INFO - Clearing user context +2025-12-12 10:00:07,520 - root - INFO - User context cleared before authentication +2025-12-12 10:00:07,520 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:07,522 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:07,522 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:07,522 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:07,522 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:07,523 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:07,523 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:07,523 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:07,524 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:07,524 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:07,525 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:07,529 - root - INFO - Clearing user context +2025-12-12 10:00:07,846 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:00:07,847 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:07,847 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:00:07,847 - root - INFO - Clearing user context +2025-12-12 10:00:07,847 - root - INFO - User context cleared before authentication +2025-12-12 10:00:07,847 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:07,848 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:07,848 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:07,849 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:07,849 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:07,850 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:07,850 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:07,850 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:07,851 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:07,851 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:07,851 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:07,855 - root - INFO - Clearing user context +2025-12-12 10:00:08,328 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:00:08,329 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,329 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:00:08,330 - root - INFO - Clearing user context +2025-12-12 10:00:08,330 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,330 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,332 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,332 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,333 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,333 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,351 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:00:08,353 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,354 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:00:08,354 - root - INFO - Clearing user context +2025-12-12 10:00:08,355 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,356 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,360 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,361 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,361 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,362 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,365 - root - INFO - Clearing user context +2025-12-12 10:00:08,367 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:08,368 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:08,369 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:08,371 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:00:08,371 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:08,372 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,372 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,373 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:00:08,373 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:08,374 - root - INFO - Clearing user context +2025-12-12 10:00:08,374 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,375 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,377 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,377 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,377 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,378 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,415 - root - INFO - Clearing user context +2025-12-12 10:00:08,418 - root - INFO - Clearing user context +2025-12-12 10:00:08,429 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:00:08,430 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,430 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:00:08,430 - root - INFO - Clearing user context +2025-12-12 10:00:08,431 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,431 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,433 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,434 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,434 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,435 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,436 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:00:08,436 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,437 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:00:08,437 - root - INFO - Clearing user context +2025-12-12 10:00:08,438 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,438 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,439 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,440 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,440 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,440 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,443 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:00:08,444 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,445 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:00:08,445 - root - INFO - Clearing user context +2025-12-12 10:00:08,445 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,446 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,449 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,450 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,450 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,450 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,461 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:08,462 - root - INFO - Clearing user context +2025-12-12 10:00:08,463 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:08,464 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:08,465 - root - INFO - Clearing user context +2025-12-12 10:00:08,468 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:08,468 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,470 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:08,486 - root - INFO - Clearing user context +2025-12-12 10:00:08,711 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:00:08,712 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,712 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:00:08,712 - root - INFO - Clearing user context +2025-12-12 10:00:08,712 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,713 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,714 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,714 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,714 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,714 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,716 - root - INFO - Clearing user context +2025-12-12 10:00:08,727 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:00:08,728 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:08,728 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:00:08,728 - root - INFO - Clearing user context +2025-12-12 10:00:08,728 - root - INFO - User context cleared before authentication +2025-12-12 10:00:08,729 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:08,730 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:08,730 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:08,730 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:08,730 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:08,734 - root - INFO - Clearing user context +2025-12-12 10:00:14,193 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/61 +2025-12-12 10:00:14,193 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/61 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:14,193 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/61 +2025-12-12 10:00:14,193 - root - INFO - Clearing user context +2025-12-12 10:00:14,194 - root - INFO - User context cleared before authentication +2025-12-12 10:00:14,194 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:14,196 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:14,196 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:14,196 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:14,196 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:14,200 - root - INFO - Clearing user context +2025-12-12 10:00:14,208 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/61/messages +2025-12-12 10:00:14,208 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/61/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:14,209 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/61/messages +2025-12-12 10:00:14,209 - root - INFO - Clearing user context +2025-12-12 10:00:14,209 - root - INFO - User context cleared before authentication +2025-12-12 10:00:14,209 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:14,211 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:14,211 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:14,212 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:14,212 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:14,227 - root - INFO - Clearing user context +2025-12-12 10:00:17,215 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:00:17,218 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:17,219 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:00:17,219 - root - INFO - Clearing user context +2025-12-12 10:00:17,219 - root - INFO - User context cleared before authentication +2025-12-12 10:00:17,220 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:17,227 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:17,228 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:17,229 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:17,229 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:17,231 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:17,233 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:17,234 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:17,236 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:17,236 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:17,237 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:17,250 - root - INFO - Clearing user context +2025-12-12 10:00:34,107 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/ +2025-12-12 10:00:34,109 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:34,109 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:00:34,109 - root - INFO - Clearing user context +2025-12-12 10:00:34,109 - root - INFO - User context cleared before authentication +2025-12-12 10:00:34,110 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:34,111 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:34,112 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:34,112 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:34,112 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:34,115 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:34,116 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:34,116 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:34,117 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:34,117 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:34,118 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:34,146 - th_agenter.services.knowledge_base - INFO - Created knowledge base: jcqtest (ID: 6) +2025-12-12 10:00:34,147 - root - INFO - Clearing user context +2025-12-12 10:00:42,101 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/llm-configs/ +2025-12-12 10:00:42,102 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:42,103 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/ +2025-12-12 10:00:42,103 - root - INFO - Clearing user context +2025-12-12 10:00:42,104 - root - INFO - User context cleared before authentication +2025-12-12 10:00:42,104 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:42,106 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:42,107 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,108 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:42,109 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:42,113 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:42,114 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:42,115 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:42,118 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:42,119 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,120 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:42,132 - root - INFO - Clearing user context +2025-12-12 10:00:42,500 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:00:42,501 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:42,502 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:00:42,502 - root - INFO - Clearing user context +2025-12-12 10:00:42,502 - root - INFO - User context cleared before authentication +2025-12-12 10:00:42,503 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:42,505 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:42,506 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,506 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:42,507 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:42,512 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:42,512 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:42,512 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:42,514 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:42,515 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,515 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:42,518 - root - INFO - Clearing user context +2025-12-12 10:00:42,525 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:00:42,526 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:42,527 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:00:42,528 - root - INFO - Clearing user context +2025-12-12 10:00:42,529 - root - INFO - User context cleared before authentication +2025-12-12 10:00:42,529 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:42,531 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:42,531 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,532 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:42,532 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:42,536 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:42,536 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:42,537 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:42,538 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:42,538 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,542 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:42,550 - root - INFO - Clearing user context +2025-12-12 10:00:42,947 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/llm-configs/ +2025-12-12 10:00:42,947 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:42,948 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/ +2025-12-12 10:00:42,948 - root - INFO - Clearing user context +2025-12-12 10:00:42,949 - root - INFO - User context cleared before authentication +2025-12-12 10:00:42,949 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:42,951 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:42,951 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,952 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:42,957 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:42,960 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:00:42,960 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:42,961 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:00:42,961 - root - INFO - Clearing user context +2025-12-12 10:00:42,961 - root - INFO - User context cleared before authentication +2025-12-12 10:00:42,962 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:42,968 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:42,973 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,981 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:42,982 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:42,986 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:00:42,991 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:00:42,992 - root - INFO - Looking for user with username: admin +2025-12-12 10:00:42,992 - root - INFO - Clearing user context +2025-12-12 10:00:42,993 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:00:42,997 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:42,997 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:00:43,005 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:00:43,008 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:00:43,009 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:00:43,009 - root - INFO - Clearing user context +2025-12-12 10:00:43,009 - root - INFO - User context cleared before authentication +2025-12-12 10:00:43,010 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:00:43,012 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:00:43,015 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:00:43,016 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:00:43,017 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:00:43,032 - root - INFO - Clearing user context +2025-12-12 10:00:43,042 - root - INFO - Clearing user context +2025-12-12 10:01:06,465 - root - INFO - [MIDDLEWARE] Processing request: POST /api/admin/llm-configs/5/test +2025-12-12 10:01:06,466 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/5/test against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:06,467 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/5/test +2025-12-12 10:01:06,467 - root - INFO - Clearing user context +2025-12-12 10:01:06,467 - root - INFO - User context cleared before authentication +2025-12-12 10:01:06,468 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:06,470 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:06,470 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:06,471 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:06,471 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:06,474 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:06,475 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:06,475 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:06,477 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:06,478 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:06,478 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:06,483 - th_agenter.th_agenter.api.endpoints.llm_configs - INFO - LLM config test: embedding-3 by user admin +2025-12-12 10:01:06,485 - root - INFO - Clearing user context +2025-12-12 10:01:09,166 - root - INFO - [MIDDLEWARE] Processing request: PUT /api/admin/llm-configs/5 +2025-12-12 10:01:09,167 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:09,168 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/5 +2025-12-12 10:01:09,168 - root - INFO - Clearing user context +2025-12-12 10:01:09,169 - root - INFO - User context cleared before authentication +2025-12-12 10:01:09,169 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:09,170 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:09,171 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:09,171 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:09,173 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:09,192 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:09,193 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:09,193 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:09,195 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:09,195 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:09,195 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:09,225 - th_agenter.th_agenter.api.endpoints.llm_configs - INFO - LLM config updated: embedding-3 by user admin +2025-12-12 10:01:09,228 - root - INFO - Clearing user context +2025-12-12 10:01:09,434 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/llm-configs/ +2025-12-12 10:01:09,436 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:09,436 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/ +2025-12-12 10:01:09,437 - root - INFO - Clearing user context +2025-12-12 10:01:09,437 - root - INFO - User context cleared before authentication +2025-12-12 10:01:09,437 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:09,441 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:09,447 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:09,449 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:09,450 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:09,460 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:09,465 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:09,465 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:09,466 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:09,467 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:09,468 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:09,496 - root - INFO - Clearing user context +2025-12-12 10:01:37,727 - root - INFO - [MIDDLEWARE] Processing request: PUT /api/admin/llm-configs/5 +2025-12-12 10:01:37,728 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:37,728 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/5 +2025-12-12 10:01:37,729 - root - INFO - Clearing user context +2025-12-12 10:01:37,729 - root - INFO - User context cleared before authentication +2025-12-12 10:01:37,730 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:37,731 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:37,732 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:37,732 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:37,733 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:37,736 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:37,736 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:37,737 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:37,739 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:37,739 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:37,740 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:37,745 - th_agenter.th_agenter.api.endpoints.llm_configs - INFO - LLM config updated: embedding-3 by user admin +2025-12-12 10:01:37,747 - root - INFO - Clearing user context +2025-12-12 10:01:38,096 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/llm-configs/ +2025-12-12 10:01:38,098 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:38,098 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/ +2025-12-12 10:01:38,099 - root - INFO - Clearing user context +2025-12-12 10:01:38,099 - root - INFO - User context cleared before authentication +2025-12-12 10:01:38,099 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:38,102 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:38,111 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:38,111 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:38,112 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:38,116 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:38,117 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:38,117 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:38,135 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:38,141 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:38,142 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:38,147 - root - INFO - Clearing user context +2025-12-12 10:01:40,785 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:01:40,788 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:40,789 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:01:40,789 - root - INFO - Clearing user context +2025-12-12 10:01:40,790 - root - INFO - User context cleared before authentication +2025-12-12 10:01:40,791 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:40,794 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:40,796 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:40,797 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:40,800 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:40,802 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:40,803 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:40,803 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:40,805 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:40,806 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:40,806 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:40,824 - root - INFO - Clearing user context +2025-12-12 10:01:42,339 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:01:42,339 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:42,339 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:01:42,340 - root - INFO - Clearing user context +2025-12-12 10:01:42,340 - root - INFO - User context cleared before authentication +2025-12-12 10:01:42,340 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:42,342 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:42,342 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:42,343 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:42,343 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:42,345 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:42,345 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:42,346 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:42,347 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:42,348 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:42,348 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:42,357 - root - INFO - Clearing user context +2025-12-12 10:01:54,386 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 10:01:54,386 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:54,387 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:01:54,387 - root - INFO - Clearing user context +2025-12-12 10:01:54,388 - root - INFO - User context cleared before authentication +2025-12-12 10:01:54,388 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:54,391 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:54,392 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:54,392 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:54,393 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:54,398 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:54,398 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:54,399 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:54,401 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:54,401 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:54,402 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:54,600 - th_agenter.services.document - INFO - Uploaded document: 高速公路低空算法验证方案.docx to KB 6 (Doc ID: 3) +2025-12-12 10:01:54,607 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 10:01:54,719 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 10:01:54,728 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 10:01:54,732 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 3, 路径: E:\Work\HXF\backend\data\uploads\kb_6\0236c771-09f3-4202-b7b8-ee5242899648_高速公路低空算法验证方案.docx +2025-12-12 10:01:54,734 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF\backend\data\uploads\kb_6\0236c771-09f3-4202-b7b8-ee5242899648_高速公路低空算法验证方案.docx: No module named 'docx2txt' +2025-12-12 10:01:54,735 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 3: No module named 'docx2txt' +2025-12-12 10:01:54,745 - root - INFO - Clearing user context +2025-12-12 10:01:56,771 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:01:56,780 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:01:56,781 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:01:56,782 - root - INFO - Clearing user context +2025-12-12 10:01:56,782 - root - INFO - User context cleared before authentication +2025-12-12 10:01:56,782 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:01:56,784 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:01:56,796 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:56,797 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:01:56,797 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:01:56,804 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:01:56,806 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:01:56,806 - root - INFO - Looking for user with username: admin +2025-12-12 10:01:56,817 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:01:56,817 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:01:56,818 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:01:56,823 - root - INFO - Clearing user context +2025-12-12 10:02:13,687 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:02:13,687 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:02:13,688 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:02:13,688 - root - INFO - Clearing user context +2025-12-12 10:02:13,688 - root - INFO - User context cleared before authentication +2025-12-12 10:02:13,689 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:02:13,690 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:02:13,690 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:02:13,691 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:02:13,691 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:02:13,692 - root - INFO - Clearing user context +2025-12-12 10:04:16,496 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/6/documents/3 +2025-12-12 10:04:16,497 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/3 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:16,497 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/3 +2025-12-12 10:04:16,497 - root - INFO - Clearing user context +2025-12-12 10:04:16,497 - root - INFO - User context cleared before authentication +2025-12-12 10:04:16,497 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:16,498 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:16,498 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:16,498 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:16,498 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:16,499 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:04:16,500 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:04:16,500 - root - INFO - Looking for user with username: admin +2025-12-12 10:04:16,501 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:04:16,501 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:16,502 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:04:16,507 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF\backend\data\uploads\kb_6\0236c771-09f3-4202-b7b8-ee5242899648_高速公路低空算法验证方案.docx +2025-12-12 10:04:16,959 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=3 +2025-12-12 10:04:16,959 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=3 +2025-12-12 10:04:16,968 - th_agenter.services.document - INFO - Deleted document: 0236c771-09f3-4202-b7b8-ee5242899648_高速公路低空算法验证方案.docx (ID: 3) +2025-12-12 10:04:16,970 - root - INFO - Clearing user context +2025-12-12 10:04:16,984 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:04:16,986 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:16,986 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:04:16,986 - root - INFO - Clearing user context +2025-12-12 10:04:16,987 - root - INFO - User context cleared before authentication +2025-12-12 10:04:16,988 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:16,991 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:16,991 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:16,992 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:16,992 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:16,997 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:04:16,998 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:04:16,998 - root - INFO - Looking for user with username: admin +2025-12-12 10:04:17,000 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:04:17,000 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:17,001 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:04:17,006 - root - INFO - Clearing user context +2025-12-12 10:04:23,433 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 10:04:23,433 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:23,434 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:04:23,434 - root - INFO - Clearing user context +2025-12-12 10:04:23,434 - root - INFO - User context cleared before authentication +2025-12-12 10:04:23,434 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:23,435 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:23,435 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:23,435 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:23,436 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:23,437 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:04:23,438 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:04:23,438 - root - INFO - Looking for user with username: admin +2025-12-12 10:04:23,439 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:04:23,439 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:23,439 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:04:23,457 - th_agenter.services.document - INFO - Uploaded document: 抛洒物统计.txt to KB 6 (Doc ID: 3) +2025-12-12 10:04:23,465 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 3, 路径: E:\Work\HXF\backend\data\uploads\kb_6\bf5ab088-d02c-4d15-8247-12768899df05_抛洒物统计.txt +2025-12-12 10:04:23,466 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF\backend\data\uploads\kb_6\bf5ab088-d02c-4d15-8247-12768899df05_抛洒物统计.txt, 页数: 1 +2025-12-12 10:04:23,477 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-12 10:04:23,478 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-12 10:04:23,479 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-12 10:04:23,549 - th_agenter.services.document_processor - WARNING - 连接现有向量存储失败,创建新的向量存储: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 10:04:23,642 - th_agenter.services.document_processor - ERROR - 创建向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 10:04:23,643 - th_agenter.services.document_processor - ERROR - 添加文档到向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 10:04:23,644 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 3: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 10:04:23,648 - root - INFO - Clearing user context +2025-12-12 10:04:25,663 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:04:25,664 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:25,664 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:04:25,664 - root - INFO - Clearing user context +2025-12-12 10:04:25,665 - root - INFO - User context cleared before authentication +2025-12-12 10:04:25,665 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:25,666 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:25,666 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:25,666 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:25,667 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:25,668 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:04:25,669 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:04:25,669 - root - INFO - Looking for user with username: admin +2025-12-12 10:04:25,670 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:04:25,670 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:25,670 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:04:25,672 - root - INFO - Clearing user context +2025-12-12 10:04:29,415 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:04:29,418 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:29,419 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:04:29,419 - root - INFO - Clearing user context +2025-12-12 10:04:29,419 - root - INFO - User context cleared before authentication +2025-12-12 10:04:29,420 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:29,426 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:29,426 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:29,427 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:29,427 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:29,429 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:04:29,430 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:04:29,430 - root - INFO - Looking for user with username: admin +2025-12-12 10:04:29,435 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:04:29,438 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:29,438 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:04:29,442 - root - INFO - Clearing user context +2025-12-12 10:04:37,685 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:04:37,686 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:04:37,686 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:04:37,686 - root - INFO - Clearing user context +2025-12-12 10:04:37,687 - root - INFO - User context cleared before authentication +2025-12-12 10:04:37,687 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:04:37,690 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:04:37,690 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:04:37,691 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:04:37,692 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:04:37,693 - root - INFO - Clearing user context +2025-12-12 10:06:31,514 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/6/documents/3 +2025-12-12 10:06:31,514 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/3 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:06:31,515 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/3 +2025-12-12 10:06:31,515 - root - INFO - Clearing user context +2025-12-12 10:06:31,515 - root - INFO - User context cleared before authentication +2025-12-12 10:06:31,515 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:06:31,516 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:06:31,516 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:06:31,516 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:06:31,516 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:06:31,517 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:06:31,518 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:06:31,519 - root - INFO - Looking for user with username: admin +2025-12-12 10:06:31,519 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:06:31,519 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:06:31,520 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:06:31,521 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF\backend\data\uploads\kb_6\bf5ab088-d02c-4d15-8247-12768899df05_抛洒物统计.txt +2025-12-12 10:06:31,572 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=3 +2025-12-12 10:06:31,573 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=3 +2025-12-12 10:06:31,584 - th_agenter.services.document - INFO - Deleted document: bf5ab088-d02c-4d15-8247-12768899df05_抛洒物统计.txt (ID: 3) +2025-12-12 10:06:31,586 - root - INFO - Clearing user context +2025-12-12 10:06:31,783 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:06:31,785 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:06:31,785 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:06:31,786 - root - INFO - Clearing user context +2025-12-12 10:06:31,786 - root - INFO - User context cleared before authentication +2025-12-12 10:06:31,786 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:06:31,788 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:06:31,789 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:06:31,789 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:06:31,790 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:06:31,793 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:06:31,793 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:06:31,793 - root - INFO - Looking for user with username: admin +2025-12-12 10:06:31,798 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:06:31,799 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:06:31,799 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:06:31,804 - root - INFO - Clearing user context +2025-12-12 10:07:29,749 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 10:07:29,752 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:07:29,752 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:07:29,753 - root - INFO - Clearing user context +2025-12-12 10:07:29,753 - root - INFO - User context cleared before authentication +2025-12-12 10:07:29,753 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:07:29,757 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:07:29,759 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:07:29,760 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:07:29,760 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:07:29,765 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:07:29,765 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:07:29,766 - root - INFO - Looking for user with username: admin +2025-12-12 10:07:29,767 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:07:29,768 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:07:29,768 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:07:29,784 - th_agenter.services.document - INFO - Uploaded document: 周报.txt to KB 6 (Doc ID: 3) +2025-12-12 10:07:29,789 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 3, 路径: E:\Work\HXF\backend\data\uploads\kb_6\65483448-1076-499a-915e-4ded81664153_周报.txt +2025-12-12 10:07:29,790 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF\backend\data\uploads\kb_6\65483448-1076-499a-915e-4ded81664153_周报.txt, 页数: 1 +2025-12-12 10:07:29,791 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-12 10:07:29,792 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-12 10:07:29,794 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 7 个文档块 +2025-12-12 10:07:30,954 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,198 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,343 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,489 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,610 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,836 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:31,981 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:07:32,056 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_6 +2025-12-12 10:07:32,063 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 3, 'status': 'success', 'chunks_count': 7, 'message': '文档处理完成'} +2025-12-12 10:07:32,069 - th_agenter.services.document - INFO - Processed document: 65483448-1076-499a-915e-4ded81664153_周报.txt (ID: 3) +2025-12-12 10:07:32,071 - root - INFO - Clearing user context +2025-12-12 10:07:34,391 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:07:34,392 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:07:34,392 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:07:34,392 - root - INFO - Clearing user context +2025-12-12 10:07:34,393 - root - INFO - User context cleared before authentication +2025-12-12 10:07:34,394 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:07:34,395 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:07:34,395 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:07:34,395 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:07:34,395 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:07:34,397 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:07:34,397 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:07:34,397 - root - INFO - Looking for user with username: admin +2025-12-12 10:07:34,398 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:07:34,398 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:07:34,398 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:07:34,402 - root - INFO - Clearing user context +2025-12-12 10:07:39,606 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:07:39,607 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:07:39,607 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:07:39,607 - root - INFO - Clearing user context +2025-12-12 10:07:39,608 - root - INFO - User context cleared before authentication +2025-12-12 10:07:39,608 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:07:39,609 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:07:39,610 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:07:39,610 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:07:39,610 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:07:39,612 - root - INFO - Clearing user context +2025-12-12 10:11:26,603 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:11:26,604 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:11:26,604 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:11:26,604 - root - INFO - Clearing user context +2025-12-12 10:11:26,604 - root - INFO - User context cleared before authentication +2025-12-12 10:11:26,604 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:11:26,605 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:11:26,606 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:11:26,606 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:11:26,606 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:11:26,606 - root - INFO - Clearing user context +2025-12-12 10:11:36,101 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:11:36,102 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:11:36,102 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:11:36,103 - root - INFO - Clearing user context +2025-12-12 10:11:36,103 - root - INFO - User context cleared before authentication +2025-12-12 10:11:36,104 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:11:36,105 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:11:36,106 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:11:36,107 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:11:36,107 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:11:36,109 - root - INFO - Clearing user context +2025-12-12 10:12:14,764 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:12:14,765 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:12:14,765 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:12:14,765 - root - INFO - Clearing user context +2025-12-12 10:12:14,765 - root - INFO - User context cleared before authentication +2025-12-12 10:12:14,765 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:12:14,766 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:12:14,767 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:12:14,767 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:12:14,768 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:12:14,768 - root - INFO - Clearing user context +2025-12-12 10:13:05,855 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:13:05,856 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:13:05,856 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:13:05,857 - root - INFO - Clearing user context +2025-12-12 10:13:05,857 - root - INFO - User context cleared before authentication +2025-12-12 10:13:05,857 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:13:05,860 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:13:05,860 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:13:05,861 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:13:05,861 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:13:05,863 - root - INFO - Clearing user context +2025-12-12 10:15:53,467 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:16:01,961 - root - INFO - Logging configured successfully +2025-12-12 10:16:02,066 - root - INFO - Logging configured successfully +2025-12-12 10:16:02,156 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:16:02,163 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:16:02,166 - root - INFO - Database tables created +2025-12-12 10:16:02,167 - root - INFO - Database initialized +2025-12-12 10:16:10,180 - root - INFO - Logging configured successfully +2025-12-12 10:16:10,283 - root - INFO - Logging configured successfully +2025-12-12 10:16:10,379 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:16:10,386 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:16:10,390 - root - INFO - Database tables created +2025-12-12 10:16:10,390 - root - INFO - Database initialized +2025-12-12 10:16:18,332 - root - INFO - Logging configured successfully +2025-12-12 10:16:18,473 - root - INFO - Logging configured successfully +2025-12-12 10:16:18,577 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:16:18,585 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:16:18,590 - root - INFO - Database tables created +2025-12-12 10:16:18,590 - root - INFO - Database initialized +2025-12-12 10:16:26,993 - root - INFO - Logging configured successfully +2025-12-12 10:16:27,102 - root - INFO - Logging configured successfully +2025-12-12 10:16:27,190 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:16:27,199 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:16:27,201 - root - INFO - Database tables created +2025-12-12 10:16:27,202 - root - INFO - Database initialized +2025-12-12 10:17:45,664 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:17:55,333 - root - INFO - Logging configured successfully +2025-12-12 10:17:55,453 - root - INFO - Logging configured successfully +2025-12-12 10:17:55,558 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:17:55,567 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:17:55,570 - root - INFO - Database tables created +2025-12-12 10:17:55,570 - root - INFO - Database initialized +2025-12-12 10:18:12,467 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:18:12,468 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:12,469 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:18:12,469 - root - INFO - Clearing user context +2025-12-12 10:18:12,470 - root - INFO - User context cleared before authentication +2025-12-12 10:18:12,470 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:12,523 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:12,524 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,524 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:12,524 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:12,532 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:12,533 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:12,534 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:12,536 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:12,537 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,538 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:12,545 - root - INFO - Clearing user context +2025-12-12 10:18:12,554 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:18:12,555 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:12,555 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:18:12,555 - root - INFO - Clearing user context +2025-12-12 10:18:12,556 - root - INFO - User context cleared before authentication +2025-12-12 10:18:12,556 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:12,558 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:12,559 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,559 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:12,559 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:12,561 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:12,561 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:12,561 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:12,562 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:12,562 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,563 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:12,574 - root - INFO - Clearing user context +2025-12-12 10:18:12,718 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:18:12,719 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:12,720 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:18:12,723 - root - INFO - Clearing user context +2025-12-12 10:18:12,723 - root - INFO - User context cleared before authentication +2025-12-12 10:18:12,724 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:12,730 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:12,730 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,731 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:12,731 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:12,735 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:18:12,741 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:12,741 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:18:12,741 - root - INFO - Clearing user context +2025-12-12 10:18:12,742 - root - INFO - User context cleared before authentication +2025-12-12 10:18:12,742 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:12,744 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:12,748 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,749 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:12,749 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:12,752 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:12,757 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:12,758 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:12,767 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:12,774 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,777 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:12,777 - root - INFO - Clearing user context +2025-12-12 10:18:12,819 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:18:12,820 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:12,820 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:18:12,821 - root - INFO - Clearing user context +2025-12-12 10:18:12,821 - root - INFO - User context cleared before authentication +2025-12-12 10:18:12,822 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:12,829 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:12,831 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:12,832 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:12,832 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:12,832 - root - INFO - Clearing user context +2025-12-12 10:18:12,841 - root - INFO - Clearing user context +2025-12-12 10:18:14,309 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:18:14,309 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:14,310 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:18:14,310 - root - INFO - Clearing user context +2025-12-12 10:18:14,311 - root - INFO - User context cleared before authentication +2025-12-12 10:18:14,311 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:14,316 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:14,317 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:14,318 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:14,318 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:14,322 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:14,323 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:14,325 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:14,328 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:14,329 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:14,329 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:14,349 - root - INFO - Clearing user context +2025-12-12 10:18:22,341 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:18:22,342 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:22,342 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:18:22,342 - root - INFO - Clearing user context +2025-12-12 10:18:22,342 - root - INFO - User context cleared before authentication +2025-12-12 10:18:22,343 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:22,345 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:22,345 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:22,346 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:22,346 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:22,349 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:22,350 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:22,350 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:22,352 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:22,352 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:22,353 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:22,361 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 10:18:22,429 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 10:18:22,436 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 10:18:23,224 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:18:23,281 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:18:23,282 - root - INFO - Clearing user context +2025-12-12 10:18:31,012 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:18:31,013 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:18:31,014 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:18:31,014 - root - INFO - Clearing user context +2025-12-12 10:18:31,014 - root - INFO - User context cleared before authentication +2025-12-12 10:18:31,015 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:18:31,016 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:18:31,017 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:31,017 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:18:31,017 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:18:31,019 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:18:31,020 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:18:31,020 - root - INFO - Looking for user with username: admin +2025-12-12 10:18:31,022 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:18:31,022 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:18:31,022 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:18:31,216 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:18:31,273 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:18:31,274 - root - INFO - Clearing user context +2025-12-12 10:18:58,273 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:19:05,909 - root - INFO - Logging configured successfully +2025-12-12 10:19:06,008 - root - INFO - Logging configured successfully +2025-12-12 10:19:06,095 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:19:06,102 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:19:06,105 - root - INFO - Database tables created +2025-12-12 10:19:06,105 - root - INFO - Database initialized +2025-12-12 10:19:40,829 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:19:40,829 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:19:40,830 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:19:40,830 - root - INFO - Clearing user context +2025-12-12 10:19:40,831 - root - INFO - User context cleared before authentication +2025-12-12 10:19:40,831 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:19:40,853 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:19:40,853 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:19:40,853 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:19:40,854 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:19:40,855 - root - INFO - Clearing user context +2025-12-12 10:19:50,174 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:19:50,175 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:19:50,175 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:19:50,175 - root - INFO - Clearing user context +2025-12-12 10:19:50,175 - root - INFO - User context cleared before authentication +2025-12-12 10:19:50,176 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:19:50,178 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:19:50,178 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:19:50,178 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:19:50,179 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:19:50,179 - root - INFO - Clearing user context +2025-12-12 10:19:53,281 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:19:53,281 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:19:53,282 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:19:53,282 - root - INFO - Clearing user context +2025-12-12 10:19:53,282 - root - INFO - User context cleared before authentication +2025-12-12 10:19:53,282 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:19:53,284 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:19:53,284 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:19:53,284 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:19:53,284 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:19:53,285 - root - INFO - Clearing user context +2025-12-12 10:20:06,603 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:20:06,603 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:06,603 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:20:06,604 - root - INFO - Clearing user context +2025-12-12 10:20:06,604 - root - INFO - User context cleared before authentication +2025-12-12 10:20:06,604 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:06,605 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:06,605 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,606 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:06,606 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:06,609 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:06,610 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:06,610 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:06,611 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:06,611 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,611 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:06,616 - root - INFO - Clearing user context +2025-12-12 10:20:06,819 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:20:06,820 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:06,820 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:20:06,820 - root - INFO - Clearing user context +2025-12-12 10:20:06,820 - root - INFO - User context cleared before authentication +2025-12-12 10:20:06,820 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:06,821 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:06,822 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,822 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:06,822 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:06,823 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:06,824 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:06,824 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:06,824 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:06,824 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,825 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:06,829 - root - INFO - Clearing user context +2025-12-12 10:20:06,933 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:20:06,933 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:06,933 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:20:06,933 - root - INFO - Clearing user context +2025-12-12 10:20:06,934 - root - INFO - User context cleared before authentication +2025-12-12 10:20:06,934 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:06,935 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:06,936 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,936 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:06,936 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:06,937 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:20:06,937 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:06,937 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:20:06,938 - root - INFO - Clearing user context +2025-12-12 10:20:06,938 - root - INFO - User context cleared before authentication +2025-12-12 10:20:06,938 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:06,939 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:06,940 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,940 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:06,940 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:06,946 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:06,947 - root - INFO - Clearing user context +2025-12-12 10:20:06,947 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:06,948 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:06,950 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:06,950 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,950 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:06,969 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:20:06,969 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:06,970 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:20:06,970 - root - INFO - Clearing user context +2025-12-12 10:20:06,970 - root - INFO - User context cleared before authentication +2025-12-12 10:20:06,970 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:06,971 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:06,972 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:06,972 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:06,973 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:06,973 - root - INFO - Clearing user context +2025-12-12 10:20:06,977 - root - INFO - Clearing user context +2025-12-12 10:20:09,265 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:20:09,266 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:09,267 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:20:09,267 - root - INFO - Clearing user context +2025-12-12 10:20:09,267 - root - INFO - User context cleared before authentication +2025-12-12 10:20:09,267 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:09,269 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:09,269 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:09,270 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:09,270 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:09,272 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:09,273 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:09,274 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:09,275 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:09,275 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:09,276 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:09,281 - root - INFO - Clearing user context +2025-12-12 10:20:23,528 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/llm-configs/ +2025-12-12 10:20:23,529 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:23,529 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/ +2025-12-12 10:20:23,530 - root - INFO - Clearing user context +2025-12-12 10:20:23,530 - root - INFO - User context cleared before authentication +2025-12-12 10:20:23,530 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:23,532 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:23,532 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:23,532 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:23,532 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:23,534 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:23,535 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:23,535 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:23,536 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:23,536 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:23,537 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:23,541 - root - INFO - Clearing user context +2025-12-12 10:20:45,195 - root - INFO - [MIDDLEWARE] Processing request: POST /api/admin/llm-configs/5/test +2025-12-12 10:20:45,195 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/llm-configs/5/test against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:45,196 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/llm-configs/5/test +2025-12-12 10:20:45,196 - root - INFO - Clearing user context +2025-12-12 10:20:45,196 - root - INFO - User context cleared before authentication +2025-12-12 10:20:45,196 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:45,198 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:45,198 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:45,198 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:45,198 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:45,200 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:45,200 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:45,201 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:45,202 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:45,202 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:45,202 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:45,206 - th_agenter.th_agenter.api.endpoints.llm_configs - INFO - LLM config test: embedding-3 by user admin +2025-12-12 10:20:45,208 - root - INFO - Clearing user context +2025-12-12 10:20:54,253 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:20:54,254 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:54,254 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:20:54,255 - root - INFO - Clearing user context +2025-12-12 10:20:54,256 - root - INFO - User context cleared before authentication +2025-12-12 10:20:54,256 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:54,258 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:54,259 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:54,259 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:54,260 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:54,263 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:54,264 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:54,264 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:54,265 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:54,266 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:54,266 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:54,276 - root - INFO - Clearing user context +2025-12-12 10:20:58,211 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:20:58,211 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:20:58,211 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:20:58,212 - root - INFO - Clearing user context +2025-12-12 10:20:58,212 - root - INFO - User context cleared before authentication +2025-12-12 10:20:58,213 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:20:58,215 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:20:58,215 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:58,216 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:20:58,216 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:20:58,218 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:20:58,219 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:20:58,219 - root - INFO - Looking for user with username: admin +2025-12-12 10:20:58,221 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:20:58,221 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:20:58,221 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:20:58,226 - root - INFO - Clearing user context +2025-12-12 10:21:02,566 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:21:02,566 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:21:02,567 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:21:02,567 - root - INFO - Clearing user context +2025-12-12 10:21:02,568 - root - INFO - User context cleared before authentication +2025-12-12 10:21:02,568 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:21:02,569 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:21:02,569 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:02,570 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:21:02,570 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:21:02,572 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:21:02,572 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:21:02,572 - root - INFO - Looking for user with username: admin +2025-12-12 10:21:02,574 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:21:02,574 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:02,574 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:21:02,577 - root - INFO - Clearing user context +2025-12-12 10:21:04,027 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:21:04,027 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:21:04,027 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:21:04,027 - root - INFO - Clearing user context +2025-12-12 10:21:04,028 - root - INFO - User context cleared before authentication +2025-12-12 10:21:04,028 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:21:04,030 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:21:04,030 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:04,031 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:21:04,031 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:21:04,033 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:21:04,033 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:21:04,033 - root - INFO - Looking for user with username: admin +2025-12-12 10:21:04,034 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:21:04,034 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:04,035 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:21:04,039 - root - INFO - Clearing user context +2025-12-12 10:21:05,430 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:21:05,430 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:21:05,431 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:21:05,431 - root - INFO - Clearing user context +2025-12-12 10:21:05,432 - root - INFO - User context cleared before authentication +2025-12-12 10:21:05,432 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:21:05,434 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:21:05,434 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:05,434 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:21:05,435 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:21:05,435 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:21:05,436 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:21:05,436 - root - INFO - Looking for user with username: admin +2025-12-12 10:21:05,437 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:21:05,437 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:05,438 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:21:05,442 - root - INFO - Clearing user context +2025-12-12 10:21:16,323 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:21:16,324 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:21:16,324 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:21:16,324 - root - INFO - Clearing user context +2025-12-12 10:21:16,324 - root - INFO - User context cleared before authentication +2025-12-12 10:21:16,324 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:21:16,325 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:21:16,325 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:16,325 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:21:16,325 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:21:16,326 - root - INFO - Clearing user context +2025-12-12 10:21:47,333 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:21:47,334 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:21:47,334 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:21:47,334 - root - INFO - Clearing user context +2025-12-12 10:21:47,334 - root - INFO - User context cleared before authentication +2025-12-12 10:21:47,334 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:21:47,335 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:21:47,336 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:21:47,336 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:21:47,336 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:21:47,336 - root - INFO - Clearing user context +2025-12-12 10:22:47,419 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:22:55,845 - root - INFO - Logging configured successfully +2025-12-12 10:22:55,970 - root - INFO - Logging configured successfully +2025-12-12 10:22:56,066 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:22:56,074 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:22:56,078 - root - INFO - Database tables created +2025-12-12 10:22:56,078 - root - INFO - Database initialized +2025-12-12 10:23:04,309 - root - INFO - Logging configured successfully +2025-12-12 10:23:04,424 - root - INFO - Logging configured successfully +2025-12-12 10:23:04,519 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:23:04,525 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:23:04,530 - root - INFO - Database tables created +2025-12-12 10:23:04,530 - root - INFO - Database initialized +2025-12-12 10:23:13,461 - root - INFO - Logging configured successfully +2025-12-12 10:23:13,575 - root - INFO - Logging configured successfully +2025-12-12 10:23:13,682 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:23:13,692 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:23:13,695 - root - INFO - Database tables created +2025-12-12 10:23:13,696 - root - INFO - Database initialized +2025-12-12 10:23:21,620 - root - INFO - Logging configured successfully +2025-12-12 10:23:21,730 - root - INFO - Logging configured successfully +2025-12-12 10:23:21,821 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:23:21,829 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:23:21,833 - root - INFO - Database tables created +2025-12-12 10:23:21,833 - root - INFO - Database initialized +2025-12-12 10:24:29,670 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:24:37,813 - root - INFO - Logging configured successfully +2025-12-12 10:24:37,961 - root - INFO - Logging configured successfully +2025-12-12 10:24:38,071 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:24:38,080 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:24:38,083 - root - INFO - Database tables created +2025-12-12 10:24:38,084 - root - INFO - Database initialized +2025-12-12 10:24:45,994 - root - INFO - Logging configured successfully +2025-12-12 10:24:46,095 - root - INFO - Logging configured successfully +2025-12-12 10:24:46,187 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:24:46,196 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:24:46,199 - root - INFO - Database tables created +2025-12-12 10:24:46,199 - root - INFO - Database initialized +2025-12-12 10:25:05,202 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:38:18,185 - root - INFO - Logging configured successfully +2025-12-12 10:38:18,329 - root - INFO - Logging configured successfully +2025-12-12 10:38:18,448 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:38:18,455 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:38:18,459 - root - INFO - Database tables created +2025-12-12 10:38:18,460 - root - INFO - Database initialized +2025-12-12 10:43:30,007 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 10:43:43,199 - root - INFO - Logging configured successfully +2025-12-12 10:43:43,327 - root - INFO - Logging configured successfully +2025-12-12 10:43:43,454 - root - INFO - Starting up TH-Agenter application... +2025-12-12 10:43:43,470 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 10:43:43,475 - root - INFO - Database tables created +2025-12-12 10:43:43,475 - root - INFO - Database initialized +2025-12-12 10:44:11,558 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:44:11,558 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:11,559 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:44:11,559 - root - INFO - Clearing user context +2025-12-12 10:44:11,559 - root - INFO - User context cleared before authentication +2025-12-12 10:44:11,559 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:11,591 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:11,591 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,591 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:11,592 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:11,595 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:11,595 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:11,596 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:11,597 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:11,597 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,597 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:11,607 - root - INFO - Clearing user context +2025-12-12 10:44:11,614 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:44:11,614 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:11,616 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:44:11,616 - root - INFO - Clearing user context +2025-12-12 10:44:11,616 - root - INFO - User context cleared before authentication +2025-12-12 10:44:11,616 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:11,617 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:11,617 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,617 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:11,617 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:11,619 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:11,619 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:11,619 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:11,620 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:11,621 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,621 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:11,626 - root - INFO - Clearing user context +2025-12-12 10:44:11,830 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:44:11,831 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:11,831 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:44:11,831 - root - INFO - Clearing user context +2025-12-12 10:44:11,831 - root - INFO - User context cleared before authentication +2025-12-12 10:44:11,831 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:11,832 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:11,832 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,833 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:11,833 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:11,833 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:44:11,834 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:11,834 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:44:11,834 - root - INFO - Clearing user context +2025-12-12 10:44:11,834 - root - INFO - User context cleared before authentication +2025-12-12 10:44:11,835 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:11,836 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:11,836 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,836 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:11,836 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:11,846 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:11,847 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:11,847 - root - INFO - Clearing user context +2025-12-12 10:44:11,847 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:11,849 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:11,850 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,850 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:11,871 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:44:11,872 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:11,872 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:44:11,873 - root - INFO - Clearing user context +2025-12-12 10:44:11,873 - root - INFO - User context cleared before authentication +2025-12-12 10:44:11,873 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:11,874 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:11,874 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:11,875 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:11,875 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:11,875 - root - INFO - Clearing user context +2025-12-12 10:44:11,878 - root - INFO - Clearing user context +2025-12-12 10:44:14,007 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:44:14,007 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:14,008 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:44:14,008 - root - INFO - Clearing user context +2025-12-12 10:44:14,009 - root - INFO - User context cleared before authentication +2025-12-12 10:44:14,009 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:14,011 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:14,011 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:14,011 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:14,012 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:14,014 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:14,015 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:14,015 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:14,017 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:14,017 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:14,017 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:14,025 - root - INFO - Clearing user context +2025-12-12 10:44:17,622 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:44:17,623 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:17,623 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:44:17,624 - root - INFO - Clearing user context +2025-12-12 10:44:17,625 - root - INFO - User context cleared before authentication +2025-12-12 10:44:17,625 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:17,626 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:17,626 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:17,627 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:17,627 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:17,629 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:17,629 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:17,630 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:17,631 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:17,631 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:17,631 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:17,635 - root - INFO - Clearing user context +2025-12-12 10:44:39,154 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:44:39,154 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:39,155 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:44:39,155 - root - INFO - Clearing user context +2025-12-12 10:44:39,155 - root - INFO - User context cleared before authentication +2025-12-12 10:44:39,155 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:39,156 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:39,157 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:39,157 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:39,157 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:39,159 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:39,159 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:39,159 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:39,160 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:39,160 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:39,160 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:39,166 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 10:44:39,222 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 10:44:39,227 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 10:44:39,960 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:44:40,022 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:44:40,023 - root - INFO - Clearing user context +2025-12-12 10:44:45,549 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:44:45,549 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:44:45,550 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:44:45,550 - root - INFO - Clearing user context +2025-12-12 10:44:45,551 - root - INFO - User context cleared before authentication +2025-12-12 10:44:45,551 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:44:45,553 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:44:45,553 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:45,553 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:44:45,554 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:44:45,555 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:44:45,556 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:44:45,556 - root - INFO - Looking for user with username: admin +2025-12-12 10:44:45,558 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:44:45,559 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:44:45,559 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:44:45,859 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:44:45,914 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:44:45,915 - root - INFO - Clearing user context +2025-12-12 10:45:05,590 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:45:05,591 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:45:05,591 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:45:05,591 - root - INFO - Clearing user context +2025-12-12 10:45:05,592 - root - INFO - User context cleared before authentication +2025-12-12 10:45:05,592 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:45:05,593 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:45:05,593 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:05,594 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:45:05,594 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:45:05,595 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:45:05,596 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:45:05,596 - root - INFO - Looking for user with username: admin +2025-12-12 10:45:05,597 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:45:05,597 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:05,597 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:45:05,905 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:45:05,963 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:45:05,964 - root - INFO - Clearing user context +2025-12-12 10:45:17,366 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:45:17,366 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:45:17,367 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:45:17,367 - root - INFO - Clearing user context +2025-12-12 10:45:17,368 - root - INFO - User context cleared before authentication +2025-12-12 10:45:17,368 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:45:17,369 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:45:17,370 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:17,370 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:45:17,371 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:45:17,372 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:45:17,373 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:45:17,373 - root - INFO - Looking for user with username: admin +2025-12-12 10:45:17,374 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:45:17,375 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:17,375 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:45:17,663 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:45:17,716 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:45:17,718 - root - INFO - Clearing user context +2025-12-12 10:45:56,434 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:45:56,434 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:45:56,434 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:45:56,434 - root - INFO - Clearing user context +2025-12-12 10:45:56,435 - root - INFO - User context cleared before authentication +2025-12-12 10:45:56,435 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:45:56,435 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:45:56,436 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:56,436 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:45:56,436 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:45:56,437 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:45:56,438 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:45:56,438 - root - INFO - Looking for user with username: admin +2025-12-12 10:45:56,439 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:45:56,439 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:45:56,439 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:45:56,707 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:45:56,766 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:45:56,768 - root - INFO - Clearing user context +2025-12-12 10:49:11,361 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:49:11,361 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:49:11,361 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:49:11,361 - root - INFO - Clearing user context +2025-12-12 10:49:11,361 - root - INFO - User context cleared before authentication +2025-12-12 10:49:11,361 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:49:11,362 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:49:11,363 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:11,364 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:49:11,364 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:49:11,365 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:49:11,365 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:49:11,366 - root - INFO - Looking for user with username: admin +2025-12-12 10:49:11,367 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:49:11,367 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:11,367 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:49:11,596 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:49:11,650 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:49:11,652 - root - INFO - Clearing user context +2025-12-12 10:49:17,885 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:49:17,885 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:49:17,886 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:49:17,886 - root - INFO - Clearing user context +2025-12-12 10:49:17,886 - root - INFO - User context cleared before authentication +2025-12-12 10:49:17,887 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:49:17,888 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:49:17,888 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:17,889 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:49:17,889 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:49:17,892 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:49:17,892 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:49:17,892 - root - INFO - Looking for user with username: admin +2025-12-12 10:49:17,894 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:49:17,894 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:17,894 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:49:18,194 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:49:18,260 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:49:18,261 - root - INFO - Clearing user context +2025-12-12 10:49:19,806 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/search +2025-12-12 10:49:19,806 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:49:19,806 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:49:19,806 - root - INFO - Clearing user context +2025-12-12 10:49:19,806 - root - INFO - User context cleared before authentication +2025-12-12 10:49:19,807 - root - INFO - Authorization header received: None +2025-12-12 10:49:19,807 - root - INFO - Authorization header is missing +2025-12-12 10:49:52,578 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:49:52,579 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:49:52,579 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:49:52,579 - root - INFO - Clearing user context +2025-12-12 10:49:52,579 - root - INFO - User context cleared before authentication +2025-12-12 10:49:52,579 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:49:52,581 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:49:52,581 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:52,581 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:49:52,581 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:49:52,582 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:49:52,583 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:49:52,583 - root - INFO - Looking for user with username: admin +2025-12-12 10:49:52,584 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:49:52,584 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:49:52,585 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:49:52,796 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:49:52,853 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:49:52,855 - root - INFO - Clearing user context +2025-12-12 10:52:47,798 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:52:47,798 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:52:47,798 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:52:47,799 - root - INFO - Clearing user context +2025-12-12 10:52:47,799 - root - INFO - User context cleared before authentication +2025-12-12 10:52:47,799 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:52:47,800 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:52:47,800 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:47,800 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:52:47,800 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:52:47,801 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:52:47,801 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:52:47,801 - root - INFO - Looking for user with username: admin +2025-12-12 10:52:47,802 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:52:47,802 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:47,802 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:52:47,804 - root - INFO - Clearing user context +2025-12-12 10:52:49,933 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:52:49,934 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:52:49,934 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:52:49,934 - root - INFO - Clearing user context +2025-12-12 10:52:49,935 - root - INFO - User context cleared before authentication +2025-12-12 10:52:49,935 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:52:49,937 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:52:49,938 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:49,938 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:52:49,939 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:52:49,941 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:52:49,942 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:52:49,942 - root - INFO - Looking for user with username: admin +2025-12-12 10:52:49,944 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:52:49,944 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:49,944 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:52:49,950 - root - INFO - Clearing user context +2025-12-12 10:52:53,918 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:52:53,919 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:52:53,919 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:52:53,919 - root - INFO - Clearing user context +2025-12-12 10:52:53,919 - root - INFO - User context cleared before authentication +2025-12-12 10:52:53,919 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:52:53,920 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:52:53,920 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:53,921 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:52:53,921 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:52:53,922 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:52:53,922 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:52:53,922 - root - INFO - Looking for user with username: admin +2025-12-12 10:52:53,923 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:52:53,923 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:53,923 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:52:53,925 - root - INFO - Clearing user context +2025-12-12 10:52:54,169 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:52:54,170 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:52:54,170 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:52:54,170 - root - INFO - Clearing user context +2025-12-12 10:52:54,170 - root - INFO - User context cleared before authentication +2025-12-12 10:52:54,170 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:52:54,171 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:52:54,171 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:54,172 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:52:54,172 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:52:54,172 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:52:54,173 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:52:54,173 - root - INFO - Looking for user with username: admin +2025-12-12 10:52:54,173 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:52:54,174 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:52:54,174 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:52:54,176 - root - INFO - Clearing user context +2025-12-12 10:55:23,207 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:55:23,207 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:23,207 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:55:23,207 - root - INFO - Clearing user context +2025-12-12 10:55:23,207 - root - INFO - User context cleared before authentication +2025-12-12 10:55:23,208 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:23,208 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:23,209 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:23,209 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:23,209 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:23,210 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:23,210 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:23,210 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:23,211 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:23,211 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:23,211 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:23,511 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:55:23,569 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:55:23,571 - root - INFO - Clearing user context +2025-12-12 10:55:37,645 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 10:55:37,645 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:37,645 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 10:55:37,646 - root - INFO - Clearing user context +2025-12-12 10:55:37,647 - root - INFO - User context cleared before authentication +2025-12-12 10:55:37,647 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:37,649 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:37,649 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,650 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:37,650 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:37,654 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:37,655 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:37,656 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:37,658 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:37,660 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,660 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:37,665 - root - INFO - Clearing user context +2025-12-12 10:55:37,673 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 10:55:37,673 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:37,674 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 10:55:37,674 - root - INFO - Clearing user context +2025-12-12 10:55:37,674 - root - INFO - User context cleared before authentication +2025-12-12 10:55:37,675 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:37,678 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:37,678 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,679 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:37,680 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:37,682 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:37,683 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:37,684 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:37,686 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:37,687 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,688 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:37,692 - root - INFO - Clearing user context +2025-12-12 10:55:37,854 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 10:55:37,855 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:37,855 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 10:55:37,855 - root - INFO - Clearing user context +2025-12-12 10:55:37,856 - root - INFO - User context cleared before authentication +2025-12-12 10:55:37,856 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:37,857 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:37,858 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,859 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:37,859 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:37,860 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 10:55:37,861 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:37,861 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 10:55:37,862 - root - INFO - Clearing user context +2025-12-12 10:55:37,863 - root - INFO - User context cleared before authentication +2025-12-12 10:55:37,863 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:37,866 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:37,867 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,867 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:37,868 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:37,879 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:37,880 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:37,880 - root - INFO - Clearing user context +2025-12-12 10:55:37,881 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:37,884 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:37,884 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,885 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:37,900 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 10:55:37,901 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:37,902 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 10:55:37,903 - root - INFO - Clearing user context +2025-12-12 10:55:37,903 - root - INFO - User context cleared before authentication +2025-12-12 10:55:37,904 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:37,906 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:37,907 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:37,907 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:37,908 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:37,910 - root - INFO - Clearing user context +2025-12-12 10:55:37,914 - root - INFO - Clearing user context +2025-12-12 10:55:40,942 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:55:40,943 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:40,943 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:55:40,943 - root - INFO - Clearing user context +2025-12-12 10:55:40,944 - root - INFO - User context cleared before authentication +2025-12-12 10:55:40,944 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:40,946 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:40,946 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:40,946 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:40,947 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:40,948 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:40,949 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:40,949 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:40,951 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:40,952 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:40,952 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:40,958 - root - INFO - Clearing user context +2025-12-12 10:55:45,926 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 10:55:45,926 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:55:45,927 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 10:55:45,927 - root - INFO - Clearing user context +2025-12-12 10:55:45,927 - root - INFO - User context cleared before authentication +2025-12-12 10:55:45,928 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:55:45,929 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:55:45,930 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:45,930 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:55:45,931 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:55:45,933 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:55:45,933 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:55:45,934 - root - INFO - Looking for user with username: admin +2025-12-12 10:55:45,935 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:55:45,936 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:55:45,936 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:55:45,940 - root - INFO - Clearing user context +2025-12-12 10:56:04,144 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:56:04,146 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:56:04,146 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:56:04,146 - root - INFO - Clearing user context +2025-12-12 10:56:04,147 - root - INFO - User context cleared before authentication +2025-12-12 10:56:04,147 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:56:04,148 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:56:04,149 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:56:04,149 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:56:04,149 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:56:04,154 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:56:04,155 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:56:04,155 - root - INFO - Looking for user with username: admin +2025-12-12 10:56:04,156 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:56:04,156 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:56:04,157 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:56:04,323 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:56:04,392 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:56:04,402 - root - INFO - Clearing user context +2025-12-12 10:56:20,214 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:56:20,215 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:56:20,216 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:56:20,217 - root - INFO - Clearing user context +2025-12-12 10:56:20,217 - root - INFO - User context cleared before authentication +2025-12-12 10:56:20,217 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:56:20,219 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:56:20,220 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:56:20,220 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:56:20,220 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:56:20,223 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:56:20,224 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:56:20,224 - root - INFO - Looking for user with username: admin +2025-12-12 10:56:20,226 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:56:20,226 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:56:20,226 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:56:20,405 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:56:20,458 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:56:20,460 - root - INFO - Clearing user context +2025-12-12 10:58:26,949 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 10:58:26,951 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 10:58:26,951 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 10:58:26,951 - root - INFO - Clearing user context +2025-12-12 10:58:26,951 - root - INFO - User context cleared before authentication +2025-12-12 10:58:26,951 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 10:58:26,952 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 10:58:26,953 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:58:26,954 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 10:58:26,954 - root - INFO - Verified current user ID in context: 2 +2025-12-12 10:58:26,956 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 10:58:26,956 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 10:58:26,956 - root - INFO - Looking for user with username: admin +2025-12-12 10:58:26,957 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 10:58:26,957 - root - INFO - Verification - ContextVar user: admin +2025-12-12 10:58:26,958 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 10:58:27,273 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 10:58:27,331 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 10:58:27,332 - root - INFO - Clearing user context +2025-12-12 11:00:23,502 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:00:23,503 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:00:23,503 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:00:23,503 - root - INFO - Clearing user context +2025-12-12 11:00:23,504 - root - INFO - User context cleared before authentication +2025-12-12 11:00:23,504 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:00:23,506 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:00:23,506 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:00:23,507 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:00:23,507 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:00:23,509 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:00:23,510 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:00:23,510 - root - INFO - Looking for user with username: admin +2025-12-12 11:00:23,513 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:00:23,513 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:00:23,514 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:00:23,526 - root - INFO - Clearing user context +2025-12-12 11:00:23,554 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:00:23,555 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:00:23,555 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:00:23,556 - root - INFO - Clearing user context +2025-12-12 11:00:23,556 - root - INFO - User context cleared before authentication +2025-12-12 11:00:23,556 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:00:23,558 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:00:23,559 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:00:23,559 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:00:23,560 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:00:23,563 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:00:23,563 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:00:23,564 - root - INFO - Looking for user with username: admin +2025-12-12 11:00:23,565 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:00:23,565 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:00:23,565 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:00:23,577 - root - INFO - Clearing user context +2025-12-12 11:01:39,466 - root - INFO - Logging configured successfully +2025-12-12 11:01:39,573 - root - INFO - Logging configured successfully +2025-12-12 11:01:39,663 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:01:39,673 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:01:39,677 - root - INFO - Database tables created +2025-12-12 11:01:39,678 - root - INFO - Database initialized +2025-12-12 11:01:47,364 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 11:01:47,365 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:47,365 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 11:01:47,366 - root - INFO - Clearing user context +2025-12-12 11:01:47,366 - root - INFO - User context cleared before authentication +2025-12-12 11:01:47,366 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:47,406 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:47,407 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,407 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:47,408 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:47,413 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:01:47,413 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:01:47,414 - root - INFO - Looking for user with username: admin +2025-12-12 11:01:47,415 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:01:47,415 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,416 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:01:47,422 - root - INFO - Clearing user context +2025-12-12 11:01:47,434 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 11:01:47,435 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:47,435 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 11:01:47,435 - root - INFO - Clearing user context +2025-12-12 11:01:47,435 - root - INFO - User context cleared before authentication +2025-12-12 11:01:47,436 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:47,437 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:47,438 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,438 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:47,438 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:47,439 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:01:47,440 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:01:47,440 - root - INFO - Looking for user with username: admin +2025-12-12 11:01:47,441 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:01:47,441 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,442 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:01:47,449 - root - INFO - Clearing user context +2025-12-12 11:01:47,714 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:01:47,714 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:47,715 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:01:47,715 - root - INFO - Clearing user context +2025-12-12 11:01:47,715 - root - INFO - User context cleared before authentication +2025-12-12 11:01:47,715 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:47,716 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:47,717 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,717 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:47,717 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:47,719 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 11:01:47,719 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:47,719 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 11:01:47,720 - root - INFO - Clearing user context +2025-12-12 11:01:47,720 - root - INFO - User context cleared before authentication +2025-12-12 11:01:47,720 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:47,721 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:47,722 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,722 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:47,722 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:47,725 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:01:47,730 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:01:47,730 - root - INFO - Looking for user with username: admin +2025-12-12 11:01:47,735 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:01:47,735 - root - INFO - Clearing user context +2025-12-12 11:01:47,736 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,737 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:01:47,768 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 11:01:47,769 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:47,769 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 11:01:47,769 - root - INFO - Clearing user context +2025-12-12 11:01:47,770 - root - INFO - User context cleared before authentication +2025-12-12 11:01:47,771 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:47,773 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:47,774 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:47,774 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:47,775 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:47,775 - root - INFO - Clearing user context +2025-12-12 11:01:47,781 - root - INFO - Clearing user context +2025-12-12 11:01:51,167 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:01:51,169 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:01:51,169 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:01:51,169 - root - INFO - Clearing user context +2025-12-12 11:01:51,169 - root - INFO - User context cleared before authentication +2025-12-12 11:01:51,171 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:01:51,172 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:01:51,173 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:51,174 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:01:51,174 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:01:51,176 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:01:51,177 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:01:51,177 - root - INFO - Looking for user with username: admin +2025-12-12 11:01:51,179 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:01:51,180 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:01:51,180 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:01:51,188 - root - INFO - Clearing user context +2025-12-12 11:02:12,306 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 11:02:12,306 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:12,307 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 11:02:12,307 - root - INFO - Clearing user context +2025-12-12 11:02:12,307 - root - INFO - User context cleared before authentication +2025-12-12 11:02:12,307 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:12,308 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:12,308 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,309 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:12,309 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:12,310 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:02:12,311 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:02:12,311 - root - INFO - Looking for user with username: admin +2025-12-12 11:02:12,312 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:02:12,312 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,312 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:02:12,314 - root - INFO - Clearing user context +2025-12-12 11:02:12,415 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 11:02:12,415 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:12,416 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 11:02:12,416 - root - INFO - Clearing user context +2025-12-12 11:02:12,416 - root - INFO - User context cleared before authentication +2025-12-12 11:02:12,416 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:12,417 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:12,417 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,418 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:12,418 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:12,419 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:02:12,420 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:02:12,420 - root - INFO - Looking for user with username: admin +2025-12-12 11:02:12,420 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:02:12,421 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,421 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:02:12,423 - root - INFO - Clearing user context +2025-12-12 11:02:12,579 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:02:12,579 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:12,579 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:02:12,580 - root - INFO - Clearing user context +2025-12-12 11:02:12,580 - root - INFO - User context cleared before authentication +2025-12-12 11:02:12,580 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:12,581 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:12,582 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,582 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:12,582 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:12,584 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 11:02:12,584 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:12,584 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 11:02:12,584 - root - INFO - Clearing user context +2025-12-12 11:02:12,585 - root - INFO - User context cleared before authentication +2025-12-12 11:02:12,585 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:12,587 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:12,587 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,588 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:12,588 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:12,596 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:02:12,597 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:02:12,597 - root - INFO - Clearing user context +2025-12-12 11:02:12,597 - root - INFO - Looking for user with username: admin +2025-12-12 11:02:12,601 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:02:12,601 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,602 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:02:12,613 - root - INFO - Clearing user context +2025-12-12 11:02:12,641 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 11:02:12,642 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:12,642 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 11:02:12,643 - root - INFO - Clearing user context +2025-12-12 11:02:12,643 - root - INFO - User context cleared before authentication +2025-12-12 11:02:12,644 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:12,646 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:12,646 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:12,646 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:12,647 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:12,651 - root - INFO - Clearing user context +2025-12-12 11:02:17,253 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:02:17,253 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:17,254 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:02:17,254 - root - INFO - Clearing user context +2025-12-12 11:02:17,254 - root - INFO - User context cleared before authentication +2025-12-12 11:02:17,254 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:17,256 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:17,257 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:17,257 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:17,257 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:17,260 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:02:17,260 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:02:17,260 - root - INFO - Looking for user with username: admin +2025-12-12 11:02:17,262 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:02:17,262 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:17,262 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:02:17,267 - root - INFO - Clearing user context +2025-12-12 11:02:41,279 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:02:41,279 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:02:41,280 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:02:41,280 - root - INFO - Clearing user context +2025-12-12 11:02:41,281 - root - INFO - User context cleared before authentication +2025-12-12 11:02:41,281 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:02:41,283 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:02:41,283 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:41,283 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:02:41,284 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:02:41,287 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:02:41,287 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:02:41,288 - root - INFO - Looking for user with username: admin +2025-12-12 11:02:41,289 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:02:41,290 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:02:41,290 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:02:41,301 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 11:02:41,384 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 11:02:41,388 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 11:02:42,061 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:02:42,122 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 11:02:42,123 - root - INFO - Clearing user context +2025-12-12 11:18:32,004 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 11:18:43,322 - root - INFO - Logging configured successfully +2025-12-12 11:18:43,448 - root - INFO - Logging configured successfully +2025-12-12 11:18:43,543 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:18:43,554 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:18:43,558 - root - INFO - Database tables created +2025-12-12 11:18:43,559 - root - INFO - Database initialized +2025-12-12 11:18:52,468 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:18:52,468 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:18:52,468 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:18:52,468 - root - INFO - Clearing user context +2025-12-12 11:18:52,469 - root - INFO - User context cleared before authentication +2025-12-12 11:18:52,469 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:18:52,495 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:18:52,496 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:18:52,496 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:18:52,496 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:18:52,501 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:18:52,502 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:18:52,502 - root - INFO - Looking for user with username: admin +2025-12-12 11:18:52,504 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:18:52,505 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:18:52,505 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:18:52,510 - th_agenter.services.document - ERROR - Failed to upload document: File type .doc not allowed +2025-12-12 11:18:52,511 - root - ERROR - Database session error: 500: Failed to upload document: File type .doc not allowed +2025-12-12 11:18:52,511 - root - INFO - Clearing user context +2025-12-12 11:19:12,728 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:19:12,729 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:19:12,729 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:19:12,729 - root - INFO - Clearing user context +2025-12-12 11:19:12,729 - root - INFO - User context cleared before authentication +2025-12-12 11:19:12,730 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:19:12,731 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:19:12,731 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:19:12,732 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:19:12,732 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:19:12,734 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:19:12,735 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:19:12,735 - root - INFO - Looking for user with username: admin +2025-12-12 11:19:12,737 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:19:12,737 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:19:12,738 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:19:12,739 - th_agenter.services.document - ERROR - Failed to upload document: File type .doc not allowed +2025-12-12 11:19:12,740 - root - ERROR - Database session error: 500: Failed to upload document: File type .doc not allowed +2025-12-12 11:19:12,741 - root - INFO - Clearing user context +2025-12-12 11:20:15,839 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 11:20:24,885 - root - INFO - Logging configured successfully +2025-12-12 11:20:24,999 - root - INFO - Logging configured successfully +2025-12-12 11:20:25,096 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:20:25,106 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:20:25,110 - root - INFO - Database tables created +2025-12-12 11:20:25,110 - root - INFO - Database initialized +2025-12-12 11:20:34,053 - root - INFO - Logging configured successfully +2025-12-12 11:20:34,157 - root - INFO - Logging configured successfully +2025-12-12 11:20:34,246 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:20:34,254 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:20:34,258 - root - INFO - Database tables created +2025-12-12 11:20:34,259 - root - INFO - Database initialized +2025-12-12 11:20:42,738 - root - INFO - Logging configured successfully +2025-12-12 11:20:42,843 - root - INFO - Logging configured successfully +2025-12-12 11:20:42,932 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:20:42,939 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:20:42,943 - root - INFO - Database tables created +2025-12-12 11:20:42,943 - root - INFO - Database initialized +2025-12-12 11:20:51,417 - root - INFO - Logging configured successfully +2025-12-12 11:20:51,516 - root - INFO - Logging configured successfully +2025-12-12 11:20:51,609 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:20:51,616 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:20:51,621 - root - INFO - Database tables created +2025-12-12 11:20:51,622 - root - INFO - Database initialized +2025-12-12 11:20:59,369 - root - INFO - Logging configured successfully +2025-12-12 11:20:59,475 - root - INFO - Logging configured successfully +2025-12-12 11:20:59,568 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:20:59,577 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:20:59,580 - root - INFO - Database tables created +2025-12-12 11:20:59,581 - root - INFO - Database initialized +2025-12-12 11:23:11,179 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 11:23:22,620 - root - INFO - Logging configured successfully +2025-12-12 11:23:22,724 - root - INFO - Logging configured successfully +2025-12-12 11:23:22,813 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:23:22,819 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:23:22,823 - root - INFO - Database tables created +2025-12-12 11:23:22,823 - root - INFO - Database initialized +2025-12-12 11:23:32,756 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 11:23:32,757 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:32,757 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 11:23:32,757 - root - INFO - Clearing user context +2025-12-12 11:23:32,758 - root - INFO - User context cleared before authentication +2025-12-12 11:23:32,758 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:32,783 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:32,784 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,784 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:32,784 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:32,787 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:23:32,788 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:23:32,789 - root - INFO - Looking for user with username: admin +2025-12-12 11:23:32,790 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:23:32,790 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,790 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:23:32,798 - root - INFO - Clearing user context +2025-12-12 11:23:32,804 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 11:23:32,804 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:32,805 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 11:23:32,805 - root - INFO - Clearing user context +2025-12-12 11:23:32,805 - root - INFO - User context cleared before authentication +2025-12-12 11:23:32,806 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:32,808 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:32,808 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,808 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:32,809 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:32,810 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:23:32,810 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:23:32,810 - root - INFO - Looking for user with username: admin +2025-12-12 11:23:32,812 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:23:32,812 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,812 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:23:32,818 - root - INFO - Clearing user context +2025-12-12 11:23:32,986 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:23:32,986 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:32,987 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:23:32,987 - root - INFO - Clearing user context +2025-12-12 11:23:32,987 - root - INFO - User context cleared before authentication +2025-12-12 11:23:32,987 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:32,989 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:32,989 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,989 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:32,989 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:32,990 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 11:23:32,990 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:32,990 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 11:23:32,990 - root - INFO - Clearing user context +2025-12-12 11:23:32,990 - root - INFO - User context cleared before authentication +2025-12-12 11:23:32,991 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:32,992 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:32,992 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:32,992 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:32,992 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:32,996 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:23:32,997 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:23:32,998 - root - INFO - Looking for user with username: admin +2025-12-12 11:23:33,003 - root - INFO - Clearing user context +2025-12-12 11:23:33,004 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:23:33,004 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:33,005 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:23:33,027 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 11:23:33,027 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:33,027 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 11:23:33,027 - root - INFO - Clearing user context +2025-12-12 11:23:33,028 - root - INFO - User context cleared before authentication +2025-12-12 11:23:33,028 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:33,030 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:33,030 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:33,031 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:33,031 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:33,033 - root - INFO - Clearing user context +2025-12-12 11:23:33,037 - root - INFO - Clearing user context +2025-12-12 11:23:34,734 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:23:34,735 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:34,735 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:23:34,735 - root - INFO - Clearing user context +2025-12-12 11:23:34,736 - root - INFO - User context cleared before authentication +2025-12-12 11:23:34,736 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:34,737 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:34,737 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:34,738 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:34,738 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:34,740 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:23:34,740 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:23:34,740 - root - INFO - Looking for user with username: admin +2025-12-12 11:23:34,742 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:23:34,742 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:34,742 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:23:34,749 - root - INFO - Clearing user context +2025-12-12 11:23:39,139 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:23:39,140 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:23:39,140 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:23:39,141 - root - INFO - Clearing user context +2025-12-12 11:23:39,141 - root - INFO - User context cleared before authentication +2025-12-12 11:23:39,141 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:23:39,142 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:23:39,143 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:39,143 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:23:39,143 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:23:39,146 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:23:39,147 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:23:39,147 - root - INFO - Looking for user with username: admin +2025-12-12 11:23:39,148 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:23:39,148 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:23:39,149 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:23:39,151 - th_agenter.services.document - ERROR - Failed to upload document: File type .doc not allowed +2025-12-12 11:23:39,152 - root - ERROR - Database session error: 500: Failed to upload document: File type .doc not allowed +2025-12-12 11:23:39,153 - root - INFO - Clearing user context +2025-12-12 11:26:19,068 - root - INFO - Shutting down TH-Agenter application... +2025-12-12 11:26:28,095 - root - INFO - Logging configured successfully +2025-12-12 11:26:28,221 - root - INFO - Logging configured successfully +2025-12-12 11:26:28,332 - root - INFO - Starting up TH-Agenter application... +2025-12-12 11:26:28,341 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-12 11:26:28,344 - root - INFO - Database tables created +2025-12-12 11:26:28,345 - root - INFO - Database initialized +2025-12-12 11:26:34,726 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-12 11:26:34,727 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:34,727 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-12 11:26:34,727 - root - INFO - Clearing user context +2025-12-12 11:26:34,727 - root - INFO - User context cleared before authentication +2025-12-12 11:26:34,728 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:34,750 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:34,750 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,751 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:34,751 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:34,753 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:34,755 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:34,755 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:34,756 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:34,756 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,756 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:34,761 - root - INFO - Clearing user context +2025-12-12 11:26:34,769 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-12 11:26:34,769 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:34,769 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-12 11:26:34,770 - root - INFO - Clearing user context +2025-12-12 11:26:34,770 - root - INFO - User context cleared before authentication +2025-12-12 11:26:34,770 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:34,771 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:34,772 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,772 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:34,772 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:34,774 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:34,774 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:34,774 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:34,776 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:34,776 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,776 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:34,782 - root - INFO - Clearing user context +2025-12-12 11:26:34,990 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-12 11:26:34,990 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:34,990 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-12 11:26:34,991 - root - INFO - Clearing user context +2025-12-12 11:26:34,991 - root - INFO - User context cleared before authentication +2025-12-12 11:26:34,991 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:34,993 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:34,993 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,994 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:34,994 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:34,995 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-12 11:26:34,995 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:34,995 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-12 11:26:34,995 - root - INFO - Clearing user context +2025-12-12 11:26:34,995 - root - INFO - User context cleared before authentication +2025-12-12 11:26:34,995 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:34,997 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:34,997 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:34,997 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:34,997 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:35,005 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:35,007 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:35,007 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:35,008 - root - INFO - Clearing user context +2025-12-12 11:26:35,009 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:35,009 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:35,010 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:35,029 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-12 11:26:35,029 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:35,030 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-12 11:26:35,030 - root - INFO - Clearing user context +2025-12-12 11:26:35,031 - root - INFO - User context cleared before authentication +2025-12-12 11:26:35,031 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:35,032 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:35,032 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:35,033 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:35,033 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:35,034 - root - INFO - Clearing user context +2025-12-12 11:26:35,038 - root - INFO - Clearing user context +2025-12-12 11:26:37,533 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:26:37,534 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:37,534 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:26:37,535 - root - INFO - Clearing user context +2025-12-12 11:26:37,535 - root - INFO - User context cleared before authentication +2025-12-12 11:26:37,535 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:37,537 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:37,537 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:37,538 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:37,538 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:37,540 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:37,540 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:37,541 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:37,542 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:37,543 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:37,543 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:37,550 - root - INFO - Clearing user context +2025-12-12 11:26:42,236 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:26:42,237 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:42,237 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:26:42,237 - root - INFO - Clearing user context +2025-12-12 11:26:42,238 - root - INFO - User context cleared before authentication +2025-12-12 11:26:42,238 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:42,239 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:42,239 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:42,239 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:42,239 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:42,242 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:42,243 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:42,243 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:42,244 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:42,245 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:42,245 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:42,355 - th_agenter.services.document - INFO - Uploaded document: 链家租房合同.doc to KB 6 (Doc ID: 4) +2025-12-12 11:26:42,361 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-12 11:26:42,429 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-12 11:26:42,434 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-12 11:26:42,436 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 4, 路径: E:\Work\HXF\backend\data\uploads\kb_6\8421beca-842b-4475-af39-3369acd081bc_链家租房合同.doc +2025-12-12 11:26:42,437 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF\backend\data\uploads\kb_6\8421beca-842b-4475-af39-3369acd081bc_链家租房合同.doc: No module named 'docx2txt' +2025-12-12 11:26:42,438 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 4: No module named 'docx2txt' +2025-12-12 11:26:42,443 - root - INFO - Clearing user context +2025-12-12 11:26:44,467 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:26:44,467 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:26:44,467 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:26:44,467 - root - INFO - Clearing user context +2025-12-12 11:26:44,467 - root - INFO - User context cleared before authentication +2025-12-12 11:26:44,467 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:26:44,469 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:26:44,469 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:44,469 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:26:44,469 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:26:44,470 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:26:44,471 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:26:44,471 - root - INFO - Looking for user with username: admin +2025-12-12 11:26:44,472 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:26:44,472 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:26:44,472 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:26:44,475 - root - INFO - Clearing user context +2025-12-12 11:27:10,974 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:27:10,975 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:10,975 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:27:10,975 - root - INFO - Clearing user context +2025-12-12 11:27:10,976 - root - INFO - User context cleared before authentication +2025-12-12 11:27:10,977 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:10,978 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:10,979 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:10,980 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:10,980 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:10,982 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:10,983 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:10,983 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:10,984 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:10,985 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:10,985 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:11,711 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:27:11,775 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 11:27:11,778 - root - INFO - Clearing user context +2025-12-12 11:27:35,765 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents/3/chunks +2025-12-12 11:27:35,766 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/3/chunks against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:35,766 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/3/chunks +2025-12-12 11:27:35,766 - root - INFO - Clearing user context +2025-12-12 11:27:35,766 - root - INFO - User context cleared before authentication +2025-12-12 11:27:35,767 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:35,768 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:35,768 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:35,769 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:35,769 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:35,770 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:35,771 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:35,771 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:35,773 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:35,774 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:35,774 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:35,848 - th_agenter.services.document_processor - INFO - 通过SQLAlchemy连接池查询获取到文档 3 的 7 个分段 +2025-12-12 11:27:35,849 - th_agenter.services.document - INFO - Retrieved 7 chunks for document 3 +2025-12-12 11:27:35,850 - root - INFO - Clearing user context +2025-12-12 11:27:41,071 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/6/documents/3 +2025-12-12 11:27:41,072 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/3 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:41,073 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/3 +2025-12-12 11:27:41,073 - root - INFO - Clearing user context +2025-12-12 11:27:41,073 - root - INFO - User context cleared before authentication +2025-12-12 11:27:41,073 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:41,074 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:41,075 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:41,075 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:41,075 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:41,077 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:41,077 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:41,078 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:41,080 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:41,080 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:41,080 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:41,088 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF\backend\data\uploads\kb_6\65483448-1076-499a-915e-4ded81664153_周报.txt +2025-12-12 11:27:41,171 - th_agenter.services.document_processor - INFO - 成功删除 7 个文档块: document_id=3 +2025-12-12 11:27:41,172 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=3 +2025-12-12 11:27:41,183 - th_agenter.services.document - INFO - Deleted document: 65483448-1076-499a-915e-4ded81664153_周报.txt (ID: 3) +2025-12-12 11:27:41,185 - root - INFO - Clearing user context +2025-12-12 11:27:41,499 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:27:41,499 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:41,500 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:27:41,500 - root - INFO - Clearing user context +2025-12-12 11:27:41,500 - root - INFO - User context cleared before authentication +2025-12-12 11:27:41,500 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:41,502 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:41,504 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:41,505 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:41,505 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:41,507 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:41,508 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:41,508 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:41,510 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:41,510 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:41,510 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:41,515 - root - INFO - Clearing user context +2025-12-12 11:27:44,981 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:27:44,981 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:44,982 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:27:44,982 - root - INFO - Clearing user context +2025-12-12 11:27:44,983 - root - INFO - User context cleared before authentication +2025-12-12 11:27:44,983 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:44,985 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:44,985 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:44,985 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:44,986 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:44,987 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:44,987 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:44,988 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:44,989 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:44,989 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:44,989 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:44,993 - root - INFO - Clearing user context +2025-12-12 11:27:52,810 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:27:52,810 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:27:52,810 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:27:52,810 - root - INFO - Clearing user context +2025-12-12 11:27:52,811 - root - INFO - User context cleared before authentication +2025-12-12 11:27:52,811 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:27:52,812 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:27:52,812 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:52,812 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:27:52,812 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:27:52,814 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:27:52,814 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:27:52,814 - root - INFO - Looking for user with username: admin +2025-12-12 11:27:52,815 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:27:52,815 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:27:52,815 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:27:53,100 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:27:53,151 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:27:53,153 - root - INFO - Clearing user context +2025-12-12 11:28:04,934 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:28:04,934 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:28:04,934 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:28:04,934 - root - INFO - Clearing user context +2025-12-12 11:28:04,935 - root - INFO - User context cleared before authentication +2025-12-12 11:28:04,935 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:28:04,936 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:28:04,936 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:28:04,937 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:28:04,937 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:28:04,940 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:28:04,941 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:28:04,941 - root - INFO - Looking for user with username: admin +2025-12-12 11:28:04,942 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:28:04,943 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:28:04,943 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:28:05,247 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:28:05,298 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:28:05,299 - root - INFO - Clearing user context +2025-12-12 11:28:14,259 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:28:14,259 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:28:14,259 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:28:14,260 - root - INFO - Clearing user context +2025-12-12 11:28:14,260 - root - INFO - User context cleared before authentication +2025-12-12 11:28:14,260 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:28:14,261 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:28:14,261 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:28:14,262 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:28:14,262 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:28:14,263 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:28:14,263 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:28:14,263 - root - INFO - Looking for user with username: admin +2025-12-12 11:28:14,264 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:28:14,264 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:28:14,264 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:28:14,472 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:28:14,523 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:28:14,525 - root - INFO - Clearing user context +2025-12-12 11:29:03,181 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:29:03,181 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:29:03,182 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:29:03,182 - root - INFO - Clearing user context +2025-12-12 11:29:03,182 - root - INFO - User context cleared before authentication +2025-12-12 11:29:03,182 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:29:03,184 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:29:03,184 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:29:03,184 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:29:03,185 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:29:03,187 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:29:03,187 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:29:03,187 - root - INFO - Looking for user with username: admin +2025-12-12 11:29:03,188 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:29:03,188 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:29:03,189 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:29:03,474 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:29:03,525 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:29:03,526 - root - INFO - Clearing user context +2025-12-12 11:30:32,003 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/6/documents/4 +2025-12-12 11:30:32,004 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/4 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:32,004 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/4 +2025-12-12 11:30:32,004 - root - INFO - Clearing user context +2025-12-12 11:30:32,004 - root - INFO - User context cleared before authentication +2025-12-12 11:30:32,005 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:32,006 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:32,006 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:32,006 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:32,006 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:32,007 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:32,007 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:32,007 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:32,008 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:32,008 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:32,008 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:32,010 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF\backend\data\uploads\kb_6\8421beca-842b-4475-af39-3369acd081bc_链家租房合同.doc +2025-12-12 11:30:32,060 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=4 +2025-12-12 11:30:32,061 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=4 +2025-12-12 11:30:32,067 - th_agenter.services.document - INFO - Deleted document: 8421beca-842b-4475-af39-3369acd081bc_链家租房合同.doc (ID: 4) +2025-12-12 11:30:32,068 - root - INFO - Clearing user context +2025-12-12 11:30:32,268 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:30:32,268 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:32,268 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:32,268 - root - INFO - Clearing user context +2025-12-12 11:30:32,269 - root - INFO - User context cleared before authentication +2025-12-12 11:30:32,269 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:32,270 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:32,270 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:32,270 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:32,271 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:32,272 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:32,272 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:32,272 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:32,273 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:32,273 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:32,274 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:32,277 - root - INFO - Clearing user context +2025-12-12 11:30:35,426 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:30:35,427 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:35,427 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:35,427 - root - INFO - Clearing user context +2025-12-12 11:30:35,427 - root - INFO - User context cleared before authentication +2025-12-12 11:30:35,428 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:35,429 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:35,430 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:35,430 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:35,430 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:35,450 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:35,450 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:35,451 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:35,452 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:35,452 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:35,453 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:35,471 - th_agenter.services.document - INFO - Uploaded document: 发明专利申请说明书CN202411808464.5.pdf to KB 6 (Doc ID: 3) +2025-12-12 11:30:35,474 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 3, 路径: E:\Work\HXF\backend\data\uploads\kb_6\3b7f98d3-ba4c-49e2-a410-690ef42ec2e6_发明专利申请说明书CN202411808464.5.pdf +2025-12-12 11:30:35,497 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF\backend\data\uploads\kb_6\3b7f98d3-ba4c-49e2-a410-690ef42ec2e6_发明专利申请说明书CN202411808464.5.pdf, 页数: 0 +2025-12-12 11:30:35,497 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-12 11:30:35,555 - th_agenter.services.document_processor - WARNING - 连接现有向量存储失败,创建新的向量存储: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 11:30:35,606 - th_agenter.services.document_processor - ERROR - 创建向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 11:30:35,607 - th_agenter.services.document_processor - ERROR - 添加文档到向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 11:30:35,607 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 3: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-12 11:30:35,609 - root - INFO - Clearing user context +2025-12-12 11:30:37,933 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:30:37,934 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:37,934 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:37,934 - root - INFO - Clearing user context +2025-12-12 11:30:37,934 - root - INFO - User context cleared before authentication +2025-12-12 11:30:37,934 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:37,935 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:37,936 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:37,936 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:37,936 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:37,937 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:37,938 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:37,938 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:37,939 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:37,939 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:37,940 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:37,943 - root - INFO - Clearing user context +2025-12-12 11:30:38,652 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:30:38,653 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:38,653 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:38,654 - root - INFO - Clearing user context +2025-12-12 11:30:38,655 - root - INFO - User context cleared before authentication +2025-12-12 11:30:38,655 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:38,657 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:38,657 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:38,658 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:38,658 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:38,661 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:38,662 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:38,662 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:38,664 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:38,665 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:38,665 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:38,671 - root - INFO - Clearing user context +2025-12-12 11:30:44,406 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:30:44,406 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:44,406 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:30:44,406 - root - INFO - Clearing user context +2025-12-12 11:30:44,407 - root - INFO - User context cleared before authentication +2025-12-12 11:30:44,407 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:44,408 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:44,408 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:44,408 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:44,409 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:44,410 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:44,410 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:44,410 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:44,411 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:44,411 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:44,411 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:44,710 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:44,763 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:30:44,764 - root - INFO - Clearing user context +2025-12-12 11:30:53,186 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-12 11:30:53,186 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:53,186 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:53,186 - root - INFO - Clearing user context +2025-12-12 11:30:53,186 - root - INFO - User context cleared before authentication +2025-12-12 11:30:53,187 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:53,187 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:53,188 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:53,188 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:53,188 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:53,190 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:53,190 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:53,190 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:53,191 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:53,191 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:53,191 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:53,205 - th_agenter.services.document - INFO - Uploaded document: 周报.txt to KB 6 (Doc ID: 4) +2025-12-12 11:30:53,208 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 4, 路径: E:\Work\HXF\backend\data\uploads\kb_6\7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt +2025-12-12 11:30:53,209 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF\backend\data\uploads\kb_6\7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt, 页数: 1 +2025-12-12 11:30:53,213 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-12 11:30:53,214 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-12 11:30:53,215 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 7 个文档块 +2025-12-12 11:30:53,499 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:53,636 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:53,777 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:53,910 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:54,027 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:54,137 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:54,243 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:30:54,310 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_6 +2025-12-12 11:30:54,321 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 4, 'status': 'success', 'chunks_count': 7, 'message': '文档处理完成'} +2025-12-12 11:30:54,330 - th_agenter.services.document - INFO - Processed document: 7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt (ID: 4) +2025-12-12 11:30:54,331 - root - INFO - Clearing user context +2025-12-12 11:30:56,338 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:30:56,338 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:30:56,338 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:30:56,339 - root - INFO - Clearing user context +2025-12-12 11:30:56,339 - root - INFO - User context cleared before authentication +2025-12-12 11:30:56,339 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:30:56,340 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:30:56,340 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:56,340 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:30:56,340 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:30:56,341 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:30:56,341 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:30:56,341 - root - INFO - Looking for user with username: admin +2025-12-12 11:30:56,343 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:30:56,343 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:30:56,343 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:30:56,347 - root - INFO - Clearing user context +2025-12-12 11:31:00,568 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:31:00,568 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:31:00,568 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:31:00,569 - root - INFO - Clearing user context +2025-12-12 11:31:00,569 - root - INFO - User context cleared before authentication +2025-12-12 11:31:00,569 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:31:00,570 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:31:00,570 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:31:00,570 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:31:00,570 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:31:00,572 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:31:00,572 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:31:00,572 - root - INFO - Looking for user with username: admin +2025-12-12 11:31:00,573 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:31:00,573 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:31:00,573 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:31:00,919 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:31:00,966 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-12 11:31:00,968 - root - INFO - Clearing user context +2025-12-12 11:33:14,112 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/6/documents/4 +2025-12-12 11:33:14,112 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents/4 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:33:14,112 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents/4 +2025-12-12 11:33:14,112 - root - INFO - Clearing user context +2025-12-12 11:33:14,112 - root - INFO - User context cleared before authentication +2025-12-12 11:33:14,112 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:33:14,113 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:33:14,113 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:14,113 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:33:14,113 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:33:14,114 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:33:14,114 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:33:14,114 - root - INFO - Looking for user with username: admin +2025-12-12 11:33:14,116 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:33:14,116 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:14,116 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:33:14,117 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF\backend\data\uploads\kb_6\7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt +2025-12-12 11:33:14,169 - th_agenter.services.document_processor - INFO - 成功删除 7 个文档块: document_id=4 +2025-12-12 11:33:14,170 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=4 +2025-12-12 11:33:14,180 - th_agenter.services.document - INFO - Deleted document: 7d5d2079-231b-44c3-abbe-87d40d1c0e9f_周报.txt (ID: 4) +2025-12-12 11:33:14,180 - root - INFO - Clearing user context +2025-12-12 11:33:14,379 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-12 11:33:14,379 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:33:14,380 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-12 11:33:14,380 - root - INFO - Clearing user context +2025-12-12 11:33:14,380 - root - INFO - User context cleared before authentication +2025-12-12 11:33:14,381 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:33:14,382 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:33:14,382 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:14,383 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:33:14,383 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:33:14,385 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:33:14,385 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:33:14,385 - root - INFO - Looking for user with username: admin +2025-12-12 11:33:14,387 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:33:14,387 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:14,387 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:33:14,391 - root - INFO - Clearing user context +2025-12-12 11:33:31,137 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:33:31,137 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:33:31,137 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:33:31,137 - root - INFO - Clearing user context +2025-12-12 11:33:31,138 - root - INFO - User context cleared before authentication +2025-12-12 11:33:31,138 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:33:31,139 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:33:31,139 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:31,139 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:33:31,139 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:33:31,141 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:33:31,141 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:33:31,141 - root - INFO - Looking for user with username: admin +2025-12-12 11:33:31,142 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:33:31,142 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:33:31,142 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:33:31,395 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:33:31,446 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:33:31,447 - root - INFO - Clearing user context +2025-12-12 11:34:18,141 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-12 11:34:18,142 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-12 11:34:18,142 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-12 11:34:18,143 - root - INFO - Clearing user context +2025-12-12 11:34:18,143 - root - INFO - User context cleared before authentication +2025-12-12 11:34:18,143 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-12 11:34:18,145 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-12 11:34:18,146 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:34:18,146 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-12 11:34:18,147 - root - INFO - Verified current user ID in context: 2 +2025-12-12 11:34:18,149 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-12 11:34:18,150 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765522807} +2025-12-12 11:34:18,150 - root - INFO - Looking for user with username: admin +2025-12-12 11:34:18,152 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-12 11:34:18,153 - root - INFO - Verification - ContextVar user: admin +2025-12-12 11:34:18,153 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-12 11:34:18,438 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-12 11:34:18,487 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-12 11:34:18,488 - root - INFO - Clearing user context +2025-12-13 09:11:40,748 - root - INFO - Logging configured successfully +2025-12-13 09:11:40,848 - root - INFO - Logging configured successfully +2025-12-13 09:11:40,945 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:11:40,959 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:11:40,975 - root - INFO - Database tables created +2025-12-13 09:11:40,975 - root - INFO - Database initialized +2025-12-13 09:12:49,119 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 09:12:49,119 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:49,119 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 09:12:49,119 - root - INFO - Clearing user context +2025-12-13 09:12:49,119 - root - INFO - User context cleared before authentication +2025-12-13 09:12:49,119 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-13 09:12:49,119 - root - ERROR - Token verification failed: Signature has expired +2025-12-13 09:12:49,119 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:49,119 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-13 09:12:49,119 - root - ERROR - Algorithm: HS256 +2025-12-13 09:12:49,281 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 09:12:49,282 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:49,283 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 09:12:49,283 - root - INFO - Clearing user context +2025-12-13 09:12:49,284 - root - INFO - User context cleared before authentication +2025-12-13 09:12:49,284 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-13 09:12:49,284 - root - ERROR - Token verification failed: Signature has expired +2025-12-13 09:12:49,284 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:49,285 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-13 09:12:49,285 - root - ERROR - Algorithm: HS256 +2025-12-13 09:12:49,756 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 09:12:49,756 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:49,756 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 09:12:49,756 - root - INFO - Clearing user context +2025-12-13 09:12:49,756 - root - INFO - User context cleared before authentication +2025-12-13 09:12:49,756 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTUyMjgwN30.n5-OFuwNd0KoAllZQljLOTuBRYPary0TBuwRBJulfTQ +2025-12-13 09:12:49,756 - root - ERROR - Token verification failed: Signature has expired +2025-12-13 09:12:49,756 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:49,756 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-13 09:12:49,756 - root - ERROR - Algorithm: HS256 +2025-12-13 09:12:53,813 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-13 09:12:53,813 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:53,814 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-13 09:12:53,814 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-13 09:12:54,157 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 09:12:54,157 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,157 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 09:12:54,157 - root - INFO - Clearing user context +2025-12-13 09:12:54,157 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,157 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,163 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,170 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,170 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,170 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,174 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:54,176 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:12:54,181 - root - INFO - Looking for user with username: admin +2025-12-13 09:12:54,183 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:12:54,184 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,186 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:12:54,196 - root - INFO - Clearing user context +2025-12-13 09:12:54,202 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-13 09:12:54,202 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,202 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-13 09:12:54,202 - root - INFO - Clearing user context +2025-12-13 09:12:54,202 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,202 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,206 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,207 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,207 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,207 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,209 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:54,210 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:12:54,210 - root - INFO - Looking for user with username: admin +2025-12-13 09:12:54,211 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:12:54,212 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,212 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:12:54,220 - root - INFO - Clearing user context +2025-12-13 09:12:54,309 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 09:12:54,310 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,311 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 09:12:54,311 - root - INFO - Clearing user context +2025-12-13 09:12:54,311 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,312 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,312 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,312 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,322 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,323 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,324 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 09:12:54,325 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,325 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 09:12:54,326 - root - INFO - Clearing user context +2025-12-13 09:12:54,326 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,326 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,332 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,333 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,335 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,335 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,360 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:54,360 - root - INFO - Clearing user context +2025-12-13 09:12:54,361 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:12:54,363 - root - INFO - Looking for user with username: admin +2025-12-13 09:12:54,363 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:12:54,363 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 09:12:54,378 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,377 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,379 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 09:12:54,379 - root - INFO - Clearing user context +2025-12-13 09:12:54,379 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:12:54,388 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,389 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,392 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,393 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,393 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,397 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,436 - root - INFO - Clearing user context +2025-12-13 09:12:54,439 - root - INFO - Clearing user context +2025-12-13 09:12:54,702 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 09:12:54,702 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,702 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 09:12:54,702 - root - INFO - Clearing user context +2025-12-13 09:12:54,702 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,702 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,702 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,702 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,702 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,702 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,709 - root - INFO - Clearing user context +2025-12-13 09:12:54,747 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 09:12:54,747 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,747 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 09:12:54,747 - root - INFO - Clearing user context +2025-12-13 09:12:54,747 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,747 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,748 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,749 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,749 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,749 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,749 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 09:12:54,750 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:54,750 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 09:12:54,750 - root - INFO - Clearing user context +2025-12-13 09:12:54,750 - root - INFO - User context cleared before authentication +2025-12-13 09:12:54,750 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:54,751 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:54,751 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,751 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:54,751 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:54,752 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:12:54,753 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:12:54,753 - root - INFO - Looking for user with username: admin +2025-12-13 09:12:54,757 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:12:54,757 - root - INFO - Clearing user context +2025-12-13 09:12:54,765 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:54,765 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:12:54,778 - root - INFO - Clearing user context +2025-12-13 09:12:55,015 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 09:12:55,015 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:55,015 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 09:12:55,015 - root - INFO - Clearing user context +2025-12-13 09:12:55,015 - root - INFO - User context cleared before authentication +2025-12-13 09:12:55,015 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:55,015 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:55,015 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:55,015 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:55,015 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:55,032 - root - INFO - Clearing user context +2025-12-13 09:12:55,335 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 09:12:55,351 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:12:55,351 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 09:12:55,351 - root - INFO - Clearing user context +2025-12-13 09:12:55,351 - root - INFO - User context cleared before authentication +2025-12-13 09:12:55,351 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:12:55,351 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:12:55,351 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:12:55,351 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:12:55,351 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:12:55,361 - root - INFO - Clearing user context +2025-12-13 09:13:17,237 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 09:13:17,237 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:13:17,239 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 09:13:17,239 - root - INFO - Clearing user context +2025-12-13 09:13:17,239 - root - INFO - User context cleared before authentication +2025-12-13 09:13:17,240 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:13:17,242 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:13:17,242 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:17,242 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:13:17,244 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:13:17,247 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:13:17,248 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:13:17,248 - root - INFO - Looking for user with username: admin +2025-12-13 09:13:17,249 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:13:17,252 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:17,252 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:13:17,259 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 09:13:17,292 - th_agenter.conversation_service - INFO - Successfully created conversation 62 for user 2 +2025-12-13 09:13:17,292 - root - INFO - Clearing user context +2025-12-13 09:13:17,607 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/62/chat/stream +2025-12-13 09:13:17,607 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/62/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:13:17,607 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/62/chat/stream +2025-12-13 09:13:17,607 - root - INFO - Clearing user context +2025-12-13 09:13:17,607 - root - INFO - User context cleared before authentication +2025-12-13 09:13:17,607 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:13:17,613 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:13:17,619 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:17,624 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:13:17,626 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:13:17,659 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 09:13:18,360 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:13:18,367 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 09:13:18,383 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 09:13:18,383 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:13:18,383 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 09:13:18,383 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 09:13:18,383 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 09:13:18,383 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 09:13:18,400 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 09:13:18,400 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 09:13:18,400 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 09:13:18,400 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 09:13:18,400 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 09:13:18,400 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 09:13:18,400 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 09:13:18,407 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 09:13:18,411 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 09:13:18,411 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 09:13:18,415 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 09:13:18,419 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 09:13:18,420 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend and Agent support +2025-12-13 09:13:18,421 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 62 via LangChain +2025-12-13 09:13:18,421 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 62 +2025-12-13 09:13:18,468 - root - INFO - Clearing user context +2025-12-13 09:13:19,462 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 09:13:20,250 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 62 +2025-12-13 09:13:37,761 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 09:13:37,762 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:13:37,762 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 09:13:37,763 - root - INFO - Clearing user context +2025-12-13 09:13:37,763 - root - INFO - User context cleared before authentication +2025-12-13 09:13:37,763 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:13:37,765 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:13:37,765 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:37,766 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:13:37,766 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:13:37,768 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 09:13:37,769 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 09:13:37,770 - root - INFO - Looking for user with username: admin +2025-12-13 09:13:37,773 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 09:13:37,773 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:37,773 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 09:13:37,774 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 09:13:37,787 - th_agenter.conversation_service - INFO - Successfully created conversation 63 for user 2 +2025-12-13 09:13:37,790 - root - INFO - Clearing user context +2025-12-13 09:13:52,860 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/63/chat/stream +2025-12-13 09:13:52,860 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/63/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:13:52,860 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/63/chat/stream +2025-12-13 09:13:52,860 - root - INFO - Clearing user context +2025-12-13 09:13:52,860 - root - INFO - User context cleared before authentication +2025-12-13 09:13:52,860 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:13:52,864 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:13:52,864 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:13:52,864 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:13:52,864 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:13:52,865 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 09:13:52,866 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:13:52,866 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 09:13:52,904 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 09:13:52,904 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:13:52,904 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 09:13:52,915 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 09:13:52,915 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 09:13:52,915 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend and Agent support +2025-12-13 09:13:52,947 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 63 via LangChain +2025-12-13 09:13:52,947 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 63 +2025-12-13 09:13:52,976 - root - INFO - Clearing user context +2025-12-13 09:13:53,939 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 09:13:55,242 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 63 +2025-12-13 09:14:14,935 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/63/chat/stream +2025-12-13 09:14:14,936 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/63/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 09:14:14,936 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/63/chat/stream +2025-12-13 09:14:14,937 - root - INFO - Clearing user context +2025-12-13 09:14:14,937 - root - INFO - User context cleared before authentication +2025-12-13 09:14:14,937 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 09:14:14,937 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 09:14:14,937 - root - INFO - Verification - ContextVar user: admin +2025-12-13 09:14:14,937 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 09:14:14,937 - root - INFO - Verified current user ID in context: 2 +2025-12-13 09:14:14,943 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 09:14:14,949 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:14:14,961 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 09:14:14,980 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 09:14:14,980 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 +2025-12-13 09:14:14,980 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 09:14:14,991 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 09:14:14,991 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 09:14:14,991 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend and Agent support +2025-12-13 09:14:15,010 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 63 via LangChain +2025-12-13 09:14:15,010 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 63 +2025-12-13 09:14:15,057 - root - INFO - Clearing user context +2025-12-13 09:14:16,578 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 09:14:18,026 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 63 +2025-12-13 09:41:23,179 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 09:41:51,102 - root - INFO - Logging configured successfully +2025-12-13 09:41:51,396 - root - INFO - Logging configured successfully +2025-12-13 09:41:51,625 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:41:51,655 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:41:51,664 - root - INFO - Database tables created +2025-12-13 09:41:51,666 - root - INFO - Database initialized +2025-12-13 09:42:12,727 - root - INFO - Logging configured successfully +2025-12-13 09:42:13,011 - root - INFO - Logging configured successfully +2025-12-13 09:42:13,283 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:42:13,301 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:42:13,321 - root - INFO - Database tables created +2025-12-13 09:42:13,322 - root - INFO - Database initialized +2025-12-13 09:42:31,675 - root - INFO - Logging configured successfully +2025-12-13 09:42:31,905 - root - INFO - Logging configured successfully +2025-12-13 09:42:32,081 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:42:32,094 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:42:32,101 - root - INFO - Database tables created +2025-12-13 09:42:32,105 - root - INFO - Database initialized +2025-12-13 09:42:35,398 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 09:42:57,828 - root - INFO - Logging configured successfully +2025-12-13 09:42:58,099 - root - INFO - Logging configured successfully +2025-12-13 09:42:58,336 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:42:58,356 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:42:58,364 - root - INFO - Database tables created +2025-12-13 09:42:58,365 - root - INFO - Database initialized +2025-12-13 09:43:19,234 - root - INFO - Logging configured successfully +2025-12-13 09:43:19,441 - root - INFO - Logging configured successfully +2025-12-13 09:43:19,624 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:43:19,640 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:43:19,645 - root - INFO - Database tables created +2025-12-13 09:43:19,646 - root - INFO - Database initialized +2025-12-13 09:43:44,506 - root - INFO - Logging configured successfully +2025-12-13 09:43:44,721 - root - INFO - Logging configured successfully +2025-12-13 09:43:44,901 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:43:44,918 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:43:44,939 - root - INFO - Database tables created +2025-12-13 09:43:44,939 - root - INFO - Database initialized +2025-12-13 09:44:04,951 - root - INFO - Logging configured successfully +2025-12-13 09:44:05,198 - root - INFO - Logging configured successfully +2025-12-13 09:44:05,369 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:44:05,381 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:44:05,388 - root - INFO - Database tables created +2025-12-13 09:44:05,389 - root - INFO - Database initialized +2025-12-13 09:44:38,925 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 09:44:59,750 - root - INFO - Logging configured successfully +2025-12-13 09:44:59,967 - root - INFO - Logging configured successfully +2025-12-13 09:45:00,135 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:45:00,147 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:45:00,157 - root - INFO - Database tables created +2025-12-13 09:45:00,159 - root - INFO - Database initialized +2025-12-13 09:46:52,054 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 09:47:12,448 - root - INFO - Logging configured successfully +2025-12-13 09:47:12,667 - root - INFO - Logging configured successfully +2025-12-13 09:47:12,830 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:47:12,843 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:47:12,852 - root - INFO - Database tables created +2025-12-13 09:47:12,852 - root - INFO - Database initialized +2025-12-13 09:47:19,449 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 09:47:39,405 - root - INFO - Logging configured successfully +2025-12-13 09:47:39,622 - root - INFO - Logging configured successfully +2025-12-13 09:47:39,802 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:47:39,817 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:47:39,824 - root - INFO - Database tables created +2025-12-13 09:47:39,826 - root - INFO - Database initialized +2025-12-13 09:48:00,266 - root - INFO - Logging configured successfully +2025-12-13 09:48:00,497 - root - INFO - Logging configured successfully +2025-12-13 09:48:00,679 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:48:00,692 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:48:00,699 - root - INFO - Database tables created +2025-12-13 09:48:00,699 - root - INFO - Database initialized +2025-12-13 09:48:20,583 - root - INFO - Logging configured successfully +2025-12-13 09:48:20,816 - root - INFO - Logging configured successfully +2025-12-13 09:48:21,042 - root - INFO - Starting up TH-Agenter application... +2025-12-13 09:48:21,057 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 09:48:21,065 - root - INFO - Database tables created +2025-12-13 09:48:21,066 - root - INFO - Database initialized +2025-12-13 09:49:54,187 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 10:45:28,501 - root - INFO - Logging configured successfully +2025-12-13 10:45:28,623 - root - INFO - Logging configured successfully +2025-12-13 10:45:28,723 - root - INFO - Starting up TH-Agenter application... +2025-12-13 10:45:28,733 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 10:45:28,745 - root - INFO - Database tables created +2025-12-13 10:45:28,746 - root - INFO - Database initialized +2025-12-13 10:46:42,208 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 10:54:14,405 - root - INFO - Logging configured successfully +2025-12-13 10:54:14,536 - root - INFO - Logging configured successfully +2025-12-13 10:54:14,631 - root - INFO - Starting up TH-Agenter application... +2025-12-13 10:54:14,638 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 10:54:14,642 - root - INFO - Database tables created +2025-12-13 10:54:14,642 - root - INFO - Database initialized +2025-12-13 10:56:09,883 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 10:56:22,780 - root - INFO - Logging configured successfully +2025-12-13 10:56:22,883 - root - INFO - Logging configured successfully +2025-12-13 10:56:22,971 - root - INFO - Starting up TH-Agenter application... +2025-12-13 10:56:22,978 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 10:56:22,983 - root - INFO - Database tables created +2025-12-13 10:56:22,983 - root - INFO - Database initialized +2025-12-13 11:49:32,952 - root - INFO - Logging configured successfully +2025-12-13 11:49:33,065 - root - INFO - Logging configured successfully +2025-12-13 11:49:33,153 - root - INFO - Starting up TH-Agenter application... +2025-12-13 11:49:33,166 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 11:49:33,185 - root - INFO - Database tables created +2025-12-13 11:49:33,185 - root - INFO - Database initialized +2025-12-13 11:49:57,900 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 11:49:57,901 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:49:57,902 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 11:49:57,903 - root - INFO - Clearing user context +2025-12-13 11:49:57,903 - root - INFO - User context cleared before authentication +2025-12-13 11:49:57,903 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:49:57,958 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:49:57,959 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:57,960 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:49:57,960 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:49:57,970 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:49:57,971 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:49:57,971 - root - INFO - Looking for user with username: admin +2025-12-13 11:49:57,974 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:49:57,974 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:57,975 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:49:57,989 - root - INFO - Clearing user context +2025-12-13 11:49:57,999 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-13 11:49:58,000 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:49:58,000 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-13 11:49:58,001 - root - INFO - Clearing user context +2025-12-13 11:49:58,001 - root - INFO - User context cleared before authentication +2025-12-13 11:49:58,001 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:49:58,006 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:49:58,008 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,009 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:49:58,009 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:49:58,013 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:49:58,014 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:49:58,015 - root - INFO - Looking for user with username: admin +2025-12-13 11:49:58,017 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:49:58,017 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,018 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:49:58,026 - root - INFO - Clearing user context +2025-12-13 11:49:58,794 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 11:49:58,795 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:49:58,795 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 11:49:58,795 - root - INFO - Clearing user context +2025-12-13 11:49:58,795 - root - INFO - User context cleared before authentication +2025-12-13 11:49:58,796 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:49:58,797 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:49:58,797 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,807 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:49:58,808 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:49:58,809 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 11:49:58,816 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:49:58,817 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 11:49:58,818 - root - INFO - Clearing user context +2025-12-13 11:49:58,818 - root - INFO - User context cleared before authentication +2025-12-13 11:49:58,819 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:49:58,824 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:49:58,824 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,825 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:49:58,825 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:49:58,829 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:49:58,834 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:49:58,835 - root - INFO - Looking for user with username: admin +2025-12-13 11:49:58,845 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:49:58,846 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,848 - root - INFO - Clearing user context +2025-12-13 11:49:58,848 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:49:58,882 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 11:49:58,883 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:49:58,883 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 11:49:58,883 - root - INFO - Clearing user context +2025-12-13 11:49:58,884 - root - INFO - User context cleared before authentication +2025-12-13 11:49:58,885 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:49:58,887 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:49:58,892 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:49:58,896 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:49:58,900 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:49:58,903 - root - INFO - Clearing user context +2025-12-13 11:49:58,909 - root - INFO - Clearing user context +2025-12-13 11:50:02,001 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 11:50:02,001 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,002 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 11:50:02,002 - root - INFO - Clearing user context +2025-12-13 11:50:02,002 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,003 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,006 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,008 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,009 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,010 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,012 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 11:50:02,016 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,016 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 11:50:02,016 - root - INFO - Clearing user context +2025-12-13 11:50:02,017 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,017 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,019 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,020 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,022 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,022 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,031 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:50:02,032 - root - INFO - Clearing user context +2025-12-13 11:50:02,032 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:50:02,033 - root - INFO - Looking for user with username: admin +2025-12-13 11:50:02,035 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:50:02,035 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,037 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 11:50:02,038 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:50:02,038 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,038 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 11:50:02,039 - root - INFO - Clearing user context +2025-12-13 11:50:02,040 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,040 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,042 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,042 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,043 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,044 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,072 - root - INFO - Clearing user context +2025-12-13 11:50:02,074 - root - INFO - Clearing user context +2025-12-13 11:50:02,159 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 11:50:02,159 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,159 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 11:50:02,160 - root - INFO - Clearing user context +2025-12-13 11:50:02,160 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,161 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,163 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,163 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,164 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,164 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,168 - root - INFO - Clearing user context +2025-12-13 11:50:02,350 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 11:50:02,351 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,353 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 11:50:02,353 - root - INFO - Clearing user context +2025-12-13 11:50:02,353 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,353 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,356 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,356 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,358 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,362 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,366 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:50:02,367 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:50:02,368 - root - INFO - Looking for user with username: admin +2025-12-13 11:50:02,372 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:50:02,374 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,376 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:50:02,396 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 11:50:02,397 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:02,398 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 11:50:02,398 - root - INFO - Clearing user context +2025-12-13 11:50:02,398 - root - INFO - User context cleared before authentication +2025-12-13 11:50:02,399 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:02,400 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:02,401 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:02,401 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:02,401 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:02,404 - root - INFO - Clearing user context +2025-12-13 11:50:02,409 - root - INFO - Clearing user context +2025-12-13 11:50:15,520 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 11:50:15,523 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:15,523 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 11:50:15,524 - root - INFO - Clearing user context +2025-12-13 11:50:15,525 - root - INFO - User context cleared before authentication +2025-12-13 11:50:15,525 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:15,526 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:15,526 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:15,527 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:15,527 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:15,533 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 11:50:15,534 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 11:50:15,535 - root - INFO - Looking for user with username: admin +2025-12-13 11:50:15,536 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 11:50:15,537 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:15,537 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 11:50:15,543 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 11:50:15,568 - th_agenter.conversation_service - INFO - Successfully created conversation 64 for user 2 +2025-12-13 11:50:15,569 - root - INFO - Clearing user context +2025-12-13 11:50:15,784 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 11:50:15,785 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 11:50:15,786 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 11:50:15,786 - root - INFO - Clearing user context +2025-12-13 11:50:15,787 - root - INFO - User context cleared before authentication +2025-12-13 11:50:15,787 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 11:50:15,789 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 11:50:15,798 - root - INFO - Verification - ContextVar user: admin +2025-12-13 11:50:15,798 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 11:50:15,798 - root - INFO - Verified current user ID in context: 2 +2025-12-13 11:50:15,809 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 11:50:17,035 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 11:50:17,036 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 11:50:17,046 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 11:50:17,066 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 11:50:17,072 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 11:50:17,073 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 11:50:17,077 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 11:50:17,077 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 11:50:17,078 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 11:50:17,078 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 11:50:17,079 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 11:50:17,080 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 11:50:17,082 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 11:50:17,083 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 11:50:17,084 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 11:50:17,086 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 11:50:17,087 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 11:50:17,087 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 11:50:17,094 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 11:50:17,096 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 11:50:17,102 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 11:50:17,104 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 11:50:17,111 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 11:50:17,112 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 11:50:17,115 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 11:50:17,116 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 11:50:17,170 - root - INFO - Clearing user context +2025-12-13 11:50:18,430 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 11:50:19,532 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:10:20,746 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:10:20,748 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:10:20,748 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:10:20,748 - root - INFO - Clearing user context +2025-12-13 13:10:20,749 - root - INFO - User context cleared before authentication +2025-12-13 13:10:20,749 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:10:20,750 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:10:20,751 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:10:20,752 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:10:20,752 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:10:20,756 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:10:20,780 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:20,784 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:10:20,792 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:10:20,819 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:10:20,830 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:20,834 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:10:20,838 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:10:20,839 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:10:20,839 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:10:20,846 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:20,847 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:10:20,849 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:10:20,849 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:10:20,894 - root - INFO - Clearing user context +2025-12-13 13:10:21,729 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:10:22,825 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:10:35,722 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:10:35,723 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:10:35,723 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:10:35,724 - root - INFO - Clearing user context +2025-12-13 13:10:35,724 - root - INFO - User context cleared before authentication +2025-12-13 13:10:35,724 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:10:35,726 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:10:35,727 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:10:35,727 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:10:35,728 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:10:35,730 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:10:35,747 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:35,747 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:10:35,754 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:10:35,775 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:10:35,783 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:35,784 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:10:35,784 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:10:35,786 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:10:35,787 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:10:35,793 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:10:35,794 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:10:35,796 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:10:35,797 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:10:35,824 - root - INFO - Clearing user context +2025-12-13 13:10:36,492 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:10:37,278 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:11:02,879 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:11:02,881 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:11:02,881 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:11:02,883 - root - INFO - Clearing user context +2025-12-13 13:11:02,884 - root - INFO - User context cleared before authentication +2025-12-13 13:11:02,884 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:11:02,886 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:11:02,887 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:11:02,894 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:11:02,895 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:11:02,898 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:11:02,910 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:11:02,910 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:11:02,917 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:11:02,932 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:11:02,939 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:11:02,944 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:11:02,945 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:11:02,950 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:11:02,950 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:11:02,963 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:11:02,967 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:11:02,968 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:11:02,969 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:11:02,997 - root - INFO - Clearing user context +2025-12-13 13:11:03,724 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:11:04,815 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:11:54,070 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:12:56,676 - root - INFO - Logging configured successfully +2025-12-13 13:12:56,775 - root - INFO - Logging configured successfully +2025-12-13 13:12:56,861 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:12:56,870 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:12:56,875 - root - INFO - Database tables created +2025-12-13 13:12:56,876 - root - INFO - Database initialized +2025-12-13 13:13:32,305 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:13:32,306 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:13:32,306 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:13:32,306 - root - INFO - Clearing user context +2025-12-13 13:13:32,307 - root - INFO - User context cleared before authentication +2025-12-13 13:13:32,307 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:13:32,352 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:13:32,353 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:13:32,353 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:13:32,354 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:13:32,379 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:13:33,215 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:33,216 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:13:33,232 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:13:33,259 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:13:33,266 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:33,271 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:13:33,274 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 13:13:33,274 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 13:13:33,275 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 13:13:33,276 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 13:13:33,276 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 13:13:33,280 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 13:13:33,282 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 13:13:33,283 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 13:13:33,287 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 13:13:33,288 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 13:13:33,289 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 13:13:33,291 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 13:13:33,299 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 13:13:33,301 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:13:33,305 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:13:33,306 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:13:33,316 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:33,319 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:13:33,321 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:13:33,327 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:13:33,386 - root - INFO - Clearing user context +2025-12-13 13:13:34,357 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:13:35,997 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:13:47,532 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:13:47,532 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:13:47,532 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:13:47,533 - root - INFO - Clearing user context +2025-12-13 13:13:47,533 - root - INFO - User context cleared before authentication +2025-12-13 13:13:47,533 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:13:47,535 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:13:47,537 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:13:47,537 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:13:47,538 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:13:47,541 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:13:47,553 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:47,554 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:13:47,559 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:13:47,577 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:13:47,583 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:47,584 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:13:47,585 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:13:47,587 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:13:47,588 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:13:47,594 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:13:47,595 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:13:47,597 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:13:47,598 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:13:47,630 - root - INFO - Clearing user context +2025-12-13 13:13:48,262 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:13:50,729 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:17:08,223 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:17:08,223 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:17:08,224 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:17:08,224 - root - INFO - Clearing user context +2025-12-13 13:17:08,224 - root - INFO - User context cleared before authentication +2025-12-13 13:17:08,224 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:17:08,226 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:17:08,228 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:08,229 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:17:08,229 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:17:08,232 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:17:08,233 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:17:08,234 - root - INFO - Looking for user with username: admin +2025-12-13 13:17:08,235 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:17:08,236 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:08,236 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:17:08,273 - root - INFO - Clearing user context +2025-12-13 13:17:09,500 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-13 13:17:09,500 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:17:09,500 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-13 13:17:09,501 - root - INFO - Clearing user context +2025-12-13 13:17:09,501 - root - INFO - User context cleared before authentication +2025-12-13 13:17:09,501 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:17:09,503 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:17:09,503 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:09,504 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:17:09,504 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:17:09,506 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:17:09,506 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:17:09,507 - root - INFO - Looking for user with username: admin +2025-12-13 13:17:09,508 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:17:09,508 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:09,510 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:17:09,523 - root - INFO - Clearing user context +2025-12-13 13:17:19,493 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:17:35,803 - root - INFO - Logging configured successfully +2025-12-13 13:17:36,046 - root - INFO - Logging configured successfully +2025-12-13 13:17:36,226 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:17:36,243 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:17:36,262 - root - INFO - Database tables created +2025-12-13 13:17:36,265 - root - INFO - Database initialized +2025-12-13 13:17:36,282 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/documents +2025-12-13 13:17:36,283 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:17:36,285 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-13 13:17:36,287 - root - INFO - Clearing user context +2025-12-13 13:17:36,290 - root - INFO - User context cleared before authentication +2025-12-13 13:17:36,293 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:17:36,344 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:17:36,346 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:36,346 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:17:36,346 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:17:36,354 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:17:36,356 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:17:36,356 - root - INFO - Looking for user with username: admin +2025-12-13 13:17:36,358 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:17:36,359 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:36,359 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:17:36,571 - th_agenter.services.document - INFO - Uploaded document: 周报.txt to KB 6 (Doc ID: 4) +2025-12-13 13:17:36,581 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:17:36,682 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:17:36,695 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-13 13:17:36,696 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 4, 路径: E:\Work\HXF\backend\data\uploads\kb_6\47a6f3b3-f860-4b12-8472-5374918aedb9_周报.txt +2025-12-13 13:17:36,701 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF\backend\data\uploads\kb_6\47a6f3b3-f860-4b12-8472-5374918aedb9_周报.txt, 页数: 1 +2025-12-13 13:17:36,728 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-13 13:17:36,729 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-13 13:17:36,731 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 7 个文档块 +2025-12-13 13:17:37,810 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:37,963 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,116 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,256 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,393 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,512 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,641 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:17:38,722 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_6 +2025-12-13 13:17:38,737 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 4, 'status': 'success', 'chunks_count': 7, 'message': '文档处理完成'} +2025-12-13 13:17:38,750 - th_agenter.services.document - INFO - Processed document: 47a6f3b3-f860-4b12-8472-5374918aedb9_周报.txt (ID: 4) +2025-12-13 13:17:38,753 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-13 13:17:38,753 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:17:38,753 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-13 13:17:38,753 - root - INFO - Clearing user context +2025-12-13 13:17:38,754 - root - INFO - User context cleared before authentication +2025-12-13 13:17:38,754 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:17:38,757 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:17:38,757 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:38,757 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:17:38,758 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:17:38,759 - root - INFO - Clearing user context +2025-12-13 13:17:38,763 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:17:38,764 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:17:38,764 - root - INFO - Looking for user with username: admin +2025-12-13 13:17:38,768 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:17:38,768 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:38,769 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:17:39,068 - root - INFO - Clearing user context +2025-12-13 13:17:41,084 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-13 13:17:41,086 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:17:41,087 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-13 13:17:41,087 - root - INFO - Clearing user context +2025-12-13 13:17:41,088 - root - INFO - User context cleared before authentication +2025-12-13 13:17:41,088 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:17:41,091 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:17:41,091 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:41,091 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:17:41,095 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:17:41,100 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:17:41,101 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:17:41,102 - root - INFO - Looking for user with username: admin +2025-12-13 13:17:41,108 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:17:41,115 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:17:41,115 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:17:41,120 - root - INFO - Clearing user context +2025-12-13 13:17:51,715 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:18:08,946 - root - INFO - Logging configured successfully +2025-12-13 13:18:09,149 - root - INFO - Logging configured successfully +2025-12-13 13:18:09,323 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:18:09,348 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:18:09,363 - root - INFO - Database tables created +2025-12-13 13:18:09,366 - root - INFO - Database initialized +2025-12-13 13:18:09,382 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-13 13:18:09,386 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:18:09,388 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-13 13:18:09,390 - root - INFO - Clearing user context +2025-12-13 13:18:09,392 - root - INFO - User context cleared before authentication +2025-12-13 13:18:09,394 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:18:09,452 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:18:09,454 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:09,454 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:18:09,455 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:18:09,459 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:18:09,460 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:18:09,460 - root - INFO - Looking for user with username: admin +2025-12-13 13:18:09,462 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:18:09,462 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:09,462 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:18:09,473 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:18:09,563 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:18:09,568 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-13 13:18:10,274 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:18:10,346 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-13 13:18:10,348 - root - INFO - Clearing user context +2025-12-13 13:18:20,290 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-13 13:18:20,290 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:18:20,290 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-13 13:18:20,291 - root - INFO - Clearing user context +2025-12-13 13:18:20,291 - root - INFO - User context cleared before authentication +2025-12-13 13:18:20,291 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:18:20,293 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:18:20,293 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:20,293 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:18:20,294 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:18:20,296 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:18:20,296 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:18:20,297 - root - INFO - Looking for user with username: admin +2025-12-13 13:18:20,299 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:18:20,299 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:20,300 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:18:20,581 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:18:20,649 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-13 13:18:20,653 - root - INFO - Clearing user context +2025-12-13 13:18:54,295 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/6/search +2025-12-13 13:18:54,299 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:18:54,300 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/search +2025-12-13 13:18:54,304 - root - INFO - Clearing user context +2025-12-13 13:18:54,305 - root - INFO - User context cleared before authentication +2025-12-13 13:18:54,305 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:18:54,311 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:18:54,314 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:54,314 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:18:54,315 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:18:54,317 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:18:54,318 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:18:54,318 - root - INFO - Looking for user with username: admin +2025-12-13 13:18:54,319 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:18:54,322 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:18:54,324 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:18:54,646 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-13 13:18:54,722 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-13 13:18:54,726 - root - INFO - Clearing user context +2025-12-13 13:20:03,400 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:20:12,554 - root - INFO - Logging configured successfully +2025-12-13 13:20:12,663 - root - INFO - Logging configured successfully +2025-12-13 13:20:12,758 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:20:12,765 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:20:12,768 - root - INFO - Database tables created +2025-12-13 13:20:12,768 - root - INFO - Database initialized +2025-12-13 13:20:45,064 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 13:20:45,065 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:45,065 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 13:20:45,065 - root - INFO - Clearing user context +2025-12-13 13:20:45,067 - root - INFO - User context cleared before authentication +2025-12-13 13:20:45,068 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:45,125 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:45,125 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,125 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:45,125 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:45,131 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:45,134 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:45,140 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:45,143 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:45,144 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,145 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:45,168 - root - INFO - Clearing user context +2025-12-13 13:20:45,178 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-13 13:20:45,179 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:45,180 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-13 13:20:45,180 - root - INFO - Clearing user context +2025-12-13 13:20:45,180 - root - INFO - User context cleared before authentication +2025-12-13 13:20:45,181 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:45,183 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:45,187 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,187 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:45,188 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:45,189 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:45,193 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:45,196 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:45,198 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:45,199 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,200 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:45,209 - root - INFO - Clearing user context +2025-12-13 13:20:45,828 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:20:45,829 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:45,829 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:20:45,831 - root - INFO - Clearing user context +2025-12-13 13:20:45,832 - root - INFO - User context cleared before authentication +2025-12-13 13:20:45,832 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:45,835 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:45,836 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,837 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:45,837 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:45,840 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:20:45,840 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:45,841 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:20:45,841 - root - INFO - Clearing user context +2025-12-13 13:20:45,842 - root - INFO - User context cleared before authentication +2025-12-13 13:20:45,843 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:45,848 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:45,849 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,849 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:45,849 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:45,860 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:45,861 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:45,861 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:45,871 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:45,872 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,872 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:45,873 - root - INFO - Clearing user context +2025-12-13 13:20:45,911 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:20:45,912 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:45,912 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:20:45,912 - root - INFO - Clearing user context +2025-12-13 13:20:45,913 - root - INFO - User context cleared before authentication +2025-12-13 13:20:45,913 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:45,915 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:45,917 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:45,918 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:45,918 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:45,919 - root - INFO - Clearing user context +2025-12-13 13:20:45,927 - root - INFO - Clearing user context +2025-12-13 13:20:47,501 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 13:20:47,501 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:47,501 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 13:20:47,502 - root - INFO - Clearing user context +2025-12-13 13:20:47,502 - root - INFO - User context cleared before authentication +2025-12-13 13:20:47,502 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:47,504 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:47,504 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,505 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:47,505 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:47,507 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:47,507 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:47,508 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:47,510 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:47,510 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,511 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:47,513 - root - INFO - Clearing user context +2025-12-13 13:20:47,520 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-13 13:20:47,521 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:47,522 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-13 13:20:47,524 - root - INFO - Clearing user context +2025-12-13 13:20:47,524 - root - INFO - User context cleared before authentication +2025-12-13 13:20:47,525 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:47,529 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:47,531 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,531 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:47,531 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:47,534 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:47,535 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:47,537 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:47,537 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:47,538 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,538 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:47,545 - root - INFO - Clearing user context +2025-12-13 13:20:47,640 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:20:47,640 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:47,641 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:20:47,641 - root - INFO - Clearing user context +2025-12-13 13:20:47,641 - root - INFO - User context cleared before authentication +2025-12-13 13:20:47,642 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:47,643 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:47,644 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,644 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:47,645 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:47,647 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:47,647 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:47,647 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:47,649 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:47,649 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,650 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:47,667 - root - INFO - Clearing user context +2025-12-13 13:20:47,768 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:20:47,768 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:47,769 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:20:47,769 - root - INFO - Clearing user context +2025-12-13 13:20:47,769 - root - INFO - User context cleared before authentication +2025-12-13 13:20:47,771 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:47,773 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:47,774 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,774 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:47,775 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:47,783 - root - INFO - Clearing user context +2025-12-13 13:20:47,791 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:20:47,792 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:47,792 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:20:47,792 - root - INFO - Clearing user context +2025-12-13 13:20:47,793 - root - INFO - User context cleared before authentication +2025-12-13 13:20:47,793 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:47,796 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:47,796 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:47,797 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:47,797 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:47,801 - root - INFO - Clearing user context +2025-12-13 13:20:51,501 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:20:51,501 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,501 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:20:51,501 - root - INFO - Clearing user context +2025-12-13 13:20:51,502 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,502 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,504 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,504 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,504 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,505 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,506 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:20:51,508 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,509 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:20:51,510 - root - INFO - Clearing user context +2025-12-13 13:20:51,512 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,512 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,515 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,518 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,518 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,518 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,525 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:51,526 - root - INFO - Clearing user context +2025-12-13 13:20:51,527 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:51,529 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:51,531 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:51,531 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,532 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:51,548 - root - INFO - Clearing user context +2025-12-13 13:20:51,681 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:20:51,682 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,683 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:20:51,683 - root - INFO - Clearing user context +2025-12-13 13:20:51,684 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,684 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,687 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,687 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,692 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,692 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,696 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:20:51,697 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,697 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:20:51,698 - root - INFO - Clearing user context +2025-12-13 13:20:51,699 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,700 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,701 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,702 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,704 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,704 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,706 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:20:51,707 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,707 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:20:51,707 - root - INFO - Clearing user context +2025-12-13 13:20:51,708 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,708 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,712 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,713 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,714 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,714 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,725 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:20:51,725 - root - INFO - Clearing user context +2025-12-13 13:20:51,727 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:20:51,729 - root - INFO - Clearing user context +2025-12-13 13:20:51,730 - root - INFO - Looking for user with username: admin +2025-12-13 13:20:51,732 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:20:51,732 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,733 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:20:51,747 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:20:51,748 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:51,748 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:20:51,749 - root - INFO - Clearing user context +2025-12-13 13:20:51,749 - root - INFO - User context cleared before authentication +2025-12-13 13:20:51,749 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:51,751 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:51,751 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:51,752 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:51,752 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:51,753 - root - INFO - Clearing user context +2025-12-13 13:20:51,757 - root - INFO - Clearing user context +2025-12-13 13:20:53,160 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/64 +2025-12-13 13:20:53,160 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:53,160 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64 +2025-12-13 13:20:53,160 - root - INFO - Clearing user context +2025-12-13 13:20:53,160 - root - INFO - User context cleared before authentication +2025-12-13 13:20:53,162 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:53,163 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:53,163 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:53,164 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:53,164 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:53,168 - root - INFO - Clearing user context +2025-12-13 13:20:53,175 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/64/messages +2025-12-13 13:20:53,176 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:20:53,176 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/messages +2025-12-13 13:20:53,176 - root - INFO - Clearing user context +2025-12-13 13:20:53,176 - root - INFO - User context cleared before authentication +2025-12-13 13:20:53,177 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:20:53,181 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:20:53,182 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:20:53,183 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:20:53,184 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:20:53,205 - root - INFO - Clearing user context +2025-12-13 13:21:04,655 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/64/chat/stream +2025-12-13 13:21:04,656 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:21:04,656 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/chat/stream +2025-12-13 13:21:04,657 - root - INFO - Clearing user context +2025-12-13 13:21:04,657 - root - INFO - User context cleared before authentication +2025-12-13 13:21:04,657 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:21:04,658 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:21:04,659 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:21:04,659 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:21:04,659 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:21:04,671 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:21:05,237 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:21:05,239 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:21:05,239 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:21:05,249 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:21:05,270 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:21:05,275 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:21:05,276 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:21:05,277 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:21:05,279 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 13:21:05,280 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 13:21:05,280 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 13:21:05,282 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 13:21:05,283 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 13:21:05,284 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 13:21:05,285 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 13:21:05,286 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 13:21:05,287 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 13:21:05,290 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 13:21:05,291 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 13:21:05,292 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 13:21:05,298 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 13:21:05,299 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:21:05,305 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:21:05,305 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:21:05,312 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:21:05,314 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:21:05,316 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:21:05,317 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 64 via LangChain +2025-12-13 13:21:05,321 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 64 +2025-12-13 13:21:05,663 - root - INFO - Clearing user context +2025-12-13 13:21:06,527 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:21:07,651 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 64 +2025-12-13 13:21:23,473 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/64 +2025-12-13 13:21:23,474 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:21:23,474 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64 +2025-12-13 13:21:23,474 - root - INFO - Clearing user context +2025-12-13 13:21:23,474 - root - INFO - User context cleared before authentication +2025-12-13 13:21:23,474 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:21:23,476 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:21:23,476 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:21:23,476 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:21:23,477 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:21:23,479 - root - INFO - Clearing user context +2025-12-13 13:21:23,793 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/64/messages +2025-12-13 13:21:23,794 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/64/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:21:23,794 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/64/messages +2025-12-13 13:21:23,794 - root - INFO - Clearing user context +2025-12-13 13:21:23,794 - root - INFO - User context cleared before authentication +2025-12-13 13:21:23,794 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:21:23,795 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:21:23,797 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:21:23,797 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:21:23,797 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:21:23,801 - root - INFO - Clearing user context +2025-12-13 13:22:17,111 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 13:22:17,111 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:22:17,112 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:22:17,112 - root - INFO - Clearing user context +2025-12-13 13:22:17,112 - root - INFO - User context cleared before authentication +2025-12-13 13:22:17,113 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:22:17,116 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:22:17,116 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:22:17,117 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:22:17,118 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:22:17,120 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:22:17,121 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:22:17,121 - root - INFO - Looking for user with username: admin +2025-12-13 13:22:17,124 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:22:17,125 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:22:17,125 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:22:17,130 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 13:22:17,151 - th_agenter.conversation_service - INFO - Successfully created conversation 65 for user 2 +2025-12-13 13:22:17,158 - root - INFO - Clearing user context +2025-12-13 13:22:18,824 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65 +2025-12-13 13:22:18,826 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:22:18,826 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65 +2025-12-13 13:22:18,826 - root - INFO - Clearing user context +2025-12-13 13:22:18,826 - root - INFO - User context cleared before authentication +2025-12-13 13:22:18,827 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:22:18,829 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:22:18,830 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:22:18,830 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:22:18,831 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:22:18,842 - root - INFO - Clearing user context +2025-12-13 13:22:19,086 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65/messages +2025-12-13 13:22:19,087 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:22:19,087 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/messages +2025-12-13 13:22:19,088 - root - INFO - Clearing user context +2025-12-13 13:22:19,088 - root - INFO - User context cleared before authentication +2025-12-13 13:22:19,089 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:22:19,091 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:22:19,094 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:22:19,094 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:22:19,095 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:22:19,101 - root - INFO - Clearing user context +2025-12-13 13:22:24,577 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/65/chat/stream +2025-12-13 13:22:24,577 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:22:24,578 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/chat/stream +2025-12-13 13:22:24,578 - root - INFO - Clearing user context +2025-12-13 13:22:24,578 - root - INFO - User context cleared before authentication +2025-12-13 13:22:24,579 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:22:24,581 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:22:24,582 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:22:24,582 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:22:24,583 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:22:24,586 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:22:24,599 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:22:24,602 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:22:24,602 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:22:24,609 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:22:24,626 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:22:24,633 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:22:24,634 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:22:24,635 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:22:24,636 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:22:24,638 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:22:24,639 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:22:24,646 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:22:24,650 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:22:24,651 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:22:24,653 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 65 via LangChain +2025-12-13 13:22:24,653 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 65 +2025-12-13 13:22:24,689 - root - INFO - Clearing user context +2025-12-13 13:22:25,814 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:22:26,939 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 65 +2025-12-13 13:25:14,776 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/65/chat/stream +2025-12-13 13:25:14,776 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:25:14,779 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/chat/stream +2025-12-13 13:25:14,779 - root - INFO - Clearing user context +2025-12-13 13:25:14,779 - root - INFO - User context cleared before authentication +2025-12-13 13:25:14,780 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:25:14,782 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:25:14,782 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:25:14,783 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:25:14,783 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:25:14,786 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:25:14,796 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:14,799 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:14,802 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:25:14,810 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:25:14,831 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:25:14,838 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:14,840 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:14,841 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:25:14,842 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:25:14,844 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:25:14,844 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:25:14,851 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:14,853 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:14,853 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:25:14,855 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 65 via LangChain +2025-12-13 13:25:14,855 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 65 +2025-12-13 13:25:14,879 - root - INFO - Clearing user context +2025-12-13 13:25:15,713 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:25:16,358 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 65 +2025-12-13 13:25:40,239 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/65/chat/stream +2025-12-13 13:25:40,240 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:25:40,240 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/chat/stream +2025-12-13 13:25:40,240 - root - INFO - Clearing user context +2025-12-13 13:25:40,241 - root - INFO - User context cleared before authentication +2025-12-13 13:25:40,241 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:25:40,243 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:25:40,243 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:25:40,243 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:25:40,244 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:25:40,248 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:25:40,259 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:40,261 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:40,262 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:25:40,269 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:25:40,288 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:25:40,294 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:40,295 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:40,295 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:25:40,297 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:25:40,299 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:25:40,300 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:25:40,309 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:25:40,310 - th_agenter.redis_memory_service - INFO - Conversation history directory: conversation_history +2025-12-13 13:25:40,311 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:25:40,312 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 65 via LangChain +2025-12-13 13:25:40,312 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 65 +2025-12-13 13:25:40,338 - root - INFO - Clearing user context +2025-12-13 13:25:41,400 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:25:56,003 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 65 +2025-12-13 13:27:38,743 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:27:48,392 - root - INFO - Logging configured successfully +2025-12-13 13:27:48,498 - root - INFO - Logging configured successfully +2025-12-13 13:27:48,588 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:27:48,598 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:27:48,603 - root - INFO - Database tables created +2025-12-13 13:27:48,603 - root - INFO - Database initialized +2025-12-13 13:27:56,841 - root - INFO - Logging configured successfully +2025-12-13 13:27:56,948 - root - INFO - Logging configured successfully +2025-12-13 13:27:57,048 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:27:57,057 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:27:57,061 - root - INFO - Database tables created +2025-12-13 13:27:57,061 - root - INFO - Database initialized +2025-12-13 13:28:00,657 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:28:09,382 - root - INFO - Logging configured successfully +2025-12-13 13:28:09,498 - root - INFO - Logging configured successfully +2025-12-13 13:28:09,601 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:28:09,609 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:28:09,613 - root - INFO - Database tables created +2025-12-13 13:28:09,613 - root - INFO - Database initialized +2025-12-13 13:28:18,136 - root - INFO - Logging configured successfully +2025-12-13 13:28:18,335 - root - INFO - Logging configured successfully +2025-12-13 13:28:18,494 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:28:18,508 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:28:18,513 - root - INFO - Database tables created +2025-12-13 13:28:18,514 - root - INFO - Database initialized +2025-12-13 13:28:26,107 - root - INFO - Logging configured successfully +2025-12-13 13:28:26,211 - root - INFO - Logging configured successfully +2025-12-13 13:28:26,302 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:28:26,311 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:28:26,314 - root - INFO - Database tables created +2025-12-13 13:28:26,315 - root - INFO - Database initialized +2025-12-13 13:28:34,416 - root - INFO - Logging configured successfully +2025-12-13 13:28:34,516 - root - INFO - Logging configured successfully +2025-12-13 13:28:34,611 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:28:34,619 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:28:34,624 - root - INFO - Database tables created +2025-12-13 13:28:34,625 - root - INFO - Database initialized +2025-12-13 13:29:29,698 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:29:48,291 - root - INFO - Logging configured successfully +2025-12-13 13:29:48,567 - root - INFO - Logging configured successfully +2025-12-13 13:29:48,800 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:29:48,823 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:29:48,832 - root - INFO - Database tables created +2025-12-13 13:29:48,832 - root - INFO - Database initialized +2025-12-13 13:30:24,910 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:30:42,512 - root - INFO - Logging configured successfully +2025-12-13 13:30:42,703 - root - INFO - Logging configured successfully +2025-12-13 13:30:42,882 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:30:42,899 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:30:42,908 - root - INFO - Database tables created +2025-12-13 13:30:42,908 - root - INFO - Database initialized +2025-12-13 13:31:24,465 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:31:43,949 - root - INFO - Logging configured successfully +2025-12-13 13:31:44,210 - root - INFO - Logging configured successfully +2025-12-13 13:31:44,399 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:31:44,409 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:31:44,418 - root - INFO - Database tables created +2025-12-13 13:31:44,423 - root - INFO - Database initialized +2025-12-13 13:32:40,351 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:32:58,269 - root - INFO - Logging configured successfully +2025-12-13 13:32:58,539 - root - INFO - Logging configured successfully +2025-12-13 13:32:58,770 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:32:58,788 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:32:58,796 - root - INFO - Database tables created +2025-12-13 13:32:58,798 - root - INFO - Database initialized +2025-12-13 13:33:09,154 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:33:24,431 - root - INFO - Logging configured successfully +2025-12-13 13:33:24,657 - root - INFO - Logging configured successfully +2025-12-13 13:33:24,852 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:33:24,867 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:33:24,875 - root - INFO - Database tables created +2025-12-13 13:33:24,875 - root - INFO - Database initialized +2025-12-13 13:33:39,375 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:33:55,039 - root - INFO - Logging configured successfully +2025-12-13 13:33:55,263 - root - INFO - Logging configured successfully +2025-12-13 13:33:55,451 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:33:55,464 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:33:55,470 - root - INFO - Database tables created +2025-12-13 13:33:55,471 - root - INFO - Database initialized +2025-12-13 13:34:13,085 - root - INFO - Logging configured successfully +2025-12-13 13:34:13,282 - root - INFO - Logging configured successfully +2025-12-13 13:34:13,461 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:34:13,477 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:34:13,486 - root - INFO - Database tables created +2025-12-13 13:34:13,487 - root - INFO - Database initialized +2025-12-13 13:34:14,249 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:34:25,648 - root - INFO - Logging configured successfully +2025-12-13 13:34:25,768 - root - INFO - Logging configured successfully +2025-12-13 13:34:25,867 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:34:25,875 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:34:25,878 - root - INFO - Database tables created +2025-12-13 13:34:25,878 - root - INFO - Database initialized +2025-12-13 13:35:16,692 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:35:25,187 - root - INFO - Logging configured successfully +2025-12-13 13:35:25,307 - root - INFO - Logging configured successfully +2025-12-13 13:35:25,404 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:35:25,411 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:35:25,415 - root - INFO - Database tables created +2025-12-13 13:35:25,415 - root - INFO - Database initialized +2025-12-13 13:35:33,628 - root - INFO - Logging configured successfully +2025-12-13 13:35:33,733 - root - INFO - Logging configured successfully +2025-12-13 13:35:33,825 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:35:33,831 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:35:33,836 - root - INFO - Database tables created +2025-12-13 13:35:33,836 - root - INFO - Database initialized +2025-12-13 13:35:46,135 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:35:54,273 - root - INFO - Logging configured successfully +2025-12-13 13:35:54,396 - root - INFO - Logging configured successfully +2025-12-13 13:35:54,498 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:35:54,506 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:35:54,511 - root - INFO - Database tables created +2025-12-13 13:35:54,511 - root - INFO - Database initialized +2025-12-13 13:36:02,683 - root - INFO - Logging configured successfully +2025-12-13 13:36:02,790 - root - INFO - Logging configured successfully +2025-12-13 13:36:02,891 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:36:02,900 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:36:02,904 - root - INFO - Database tables created +2025-12-13 13:36:02,904 - root - INFO - Database initialized +2025-12-13 13:37:53,892 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:38:19,167 - root - INFO - Logging configured successfully +2025-12-13 13:38:19,452 - root - INFO - Logging configured successfully +2025-12-13 13:38:19,700 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:38:19,727 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:38:19,757 - root - INFO - Database tables created +2025-12-13 13:38:19,758 - root - INFO - Database initialized +2025-12-13 13:38:38,150 - root - INFO - Logging configured successfully +2025-12-13 13:38:38,332 - root - INFO - Logging configured successfully +2025-12-13 13:38:38,448 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:38:38,457 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:38:38,461 - root - INFO - Database tables created +2025-12-13 13:38:38,462 - root - INFO - Database initialized +2025-12-13 13:42:39,337 - root - INFO - Logging configured successfully +2025-12-13 13:42:39,444 - root - INFO - Logging configured successfully +2025-12-13 13:42:39,537 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:42:39,547 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:42:39,573 - root - INFO - Database tables created +2025-12-13 13:42:39,574 - root - INFO - Database initialized +2025-12-13 13:42:58,278 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-13 13:42:58,278 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,280 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-13 13:42:58,280 - root - INFO - Clearing user context +2025-12-13 13:42:58,281 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,281 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,341 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,342 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,343 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,354 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,363 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:42:58,363 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:42:58,364 - root - INFO - Looking for user with username: admin +2025-12-13 13:42:58,366 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:42:58,366 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,367 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:42:58,386 - root - INFO - Clearing user context +2025-12-13 13:42:58,401 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-13 13:42:58,402 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,403 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-13 13:42:58,403 - root - INFO - Clearing user context +2025-12-13 13:42:58,403 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,403 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,409 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,410 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,410 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,411 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,414 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:42:58,415 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:42:58,416 - root - INFO - Looking for user with username: admin +2025-12-13 13:42:58,419 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:42:58,421 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,421 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:42:58,428 - root - INFO - Clearing user context +2025-12-13 13:42:58,657 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:42:58,657 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,657 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:42:58,657 - root - INFO - Clearing user context +2025-12-13 13:42:58,657 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,657 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,660 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,661 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,661 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,662 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,666 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:42:58,667 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,667 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:42:58,667 - root - INFO - Clearing user context +2025-12-13 13:42:58,668 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,669 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,672 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,672 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,673 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,673 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,694 - root - INFO - Clearing user context +2025-12-13 13:42:58,694 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:42:58,696 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:42:58,697 - root - INFO - Looking for user with username: admin +2025-12-13 13:42:58,698 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:42:58,701 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:42:58,702 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,703 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,704 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:42:58,704 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:42:58,705 - root - INFO - Clearing user context +2025-12-13 13:42:58,705 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,706 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,718 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,718 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,718 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,721 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,760 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:42:58,760 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,761 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:42:58,761 - root - INFO - Clearing user context +2025-12-13 13:42:58,762 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,762 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,765 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,765 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,766 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,767 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,774 - root - INFO - Clearing user context +2025-12-13 13:42:58,782 - root - INFO - Clearing user context +2025-12-13 13:42:58,786 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-13 13:42:58,786 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,787 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-13 13:42:58,787 - root - INFO - Clearing user context +2025-12-13 13:42:58,787 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,789 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,792 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,794 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,794 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,795 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,797 - root - INFO - Clearing user context +2025-12-13 13:42:58,800 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-13 13:42:58,800 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:58,801 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:42:58,801 - root - INFO - Clearing user context +2025-12-13 13:42:58,801 - root - INFO - User context cleared before authentication +2025-12-13 13:42:58,803 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:58,807 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:58,808 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,808 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:58,809 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:58,811 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:42:58,814 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:42:58,816 - root - INFO - Looking for user with username: admin +2025-12-13 13:42:58,817 - root - INFO - Clearing user context +2025-12-13 13:42:58,819 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:42:58,820 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:58,821 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:42:58,844 - root - INFO - Clearing user context +2025-12-13 13:42:59,117 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:42:59,121 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:59,122 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:42:59,122 - root - INFO - Clearing user context +2025-12-13 13:42:59,122 - root - INFO - User context cleared before authentication +2025-12-13 13:42:59,122 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:59,124 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:59,124 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:59,125 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:59,125 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:59,133 - root - INFO - Clearing user context +2025-12-13 13:42:59,445 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-13 13:42:59,447 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:42:59,447 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-13 13:42:59,447 - root - INFO - Clearing user context +2025-12-13 13:42:59,448 - root - INFO - User context cleared before authentication +2025-12-13 13:42:59,448 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:42:59,449 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:42:59,449 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:42:59,449 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:42:59,451 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:42:59,453 - root - INFO - Clearing user context +2025-12-13 13:43:02,034 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65 +2025-12-13 13:43:02,035 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:02,035 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65 +2025-12-13 13:43:02,036 - root - INFO - Clearing user context +2025-12-13 13:43:02,036 - root - INFO - User context cleared before authentication +2025-12-13 13:43:02,036 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:02,037 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:02,038 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:02,038 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:02,038 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:02,042 - root - INFO - Clearing user context +2025-12-13 13:43:02,358 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65/messages +2025-12-13 13:43:02,359 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:02,359 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/messages +2025-12-13 13:43:02,360 - root - INFO - Clearing user context +2025-12-13 13:43:02,360 - root - INFO - User context cleared before authentication +2025-12-13 13:43:02,360 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:02,362 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:02,362 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:02,362 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:02,363 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:02,378 - root - INFO - Clearing user context +2025-12-13 13:43:05,146 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65 +2025-12-13 13:43:05,146 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:05,146 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65 +2025-12-13 13:43:05,146 - root - INFO - Clearing user context +2025-12-13 13:43:05,146 - root - INFO - User context cleared before authentication +2025-12-13 13:43:05,146 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:05,148 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:05,148 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:05,148 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:05,148 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:05,151 - root - INFO - Clearing user context +2025-12-13 13:43:05,468 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/65/messages +2025-12-13 13:43:05,470 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/65/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:05,470 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/65/messages +2025-12-13 13:43:05,470 - root - INFO - Clearing user context +2025-12-13 13:43:05,471 - root - INFO - User context cleared before authentication +2025-12-13 13:43:05,471 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:05,472 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:05,472 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:05,472 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:05,473 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:05,475 - root - INFO - Clearing user context +2025-12-13 13:43:07,045 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/chat/conversations +2025-12-13 13:43:07,046 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:07,046 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:43:07,047 - root - INFO - Clearing user context +2025-12-13 13:43:07,047 - root - INFO - User context cleared before authentication +2025-12-13 13:43:07,047 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:07,050 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:07,054 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:07,054 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:07,054 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:07,057 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:43:07,057 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:43:07,057 - root - INFO - Looking for user with username: admin +2025-12-13 13:43:07,060 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:43:07,060 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:07,060 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:43:07,090 - th_agenter.conversation_service - INFO - Successfully deleted all conversations for user 2 +2025-12-13 13:43:07,092 - root - INFO - Clearing user context +2025-12-13 13:43:09,195 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 13:43:09,196 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:09,196 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:43:09,197 - root - INFO - Clearing user context +2025-12-13 13:43:09,197 - root - INFO - User context cleared before authentication +2025-12-13 13:43:09,197 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:09,200 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:09,200 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:09,201 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:09,201 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:09,206 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:43:09,206 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:43:09,207 - root - INFO - Looking for user with username: admin +2025-12-13 13:43:09,208 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:43:09,208 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:09,209 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:43:09,216 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 13:43:09,236 - th_agenter.conversation_service - INFO - Successfully created conversation 2 for user 2 +2025-12-13 13:43:09,238 - root - INFO - Clearing user context +2025-12-13 13:43:18,805 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/2/chat/stream +2025-12-13 13:43:18,806 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/2/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:18,806 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/2/chat/stream +2025-12-13 13:43:18,807 - root - INFO - Clearing user context +2025-12-13 13:43:18,807 - root - INFO - User context cleared before authentication +2025-12-13 13:43:18,807 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:18,811 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:18,811 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:18,812 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:18,812 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:18,825 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:43:20,010 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:20,013 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:20,014 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:20,015 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:43:20,023 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:43:20,077 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:43:20,083 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:20,085 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:20,085 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:20,086 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:43:20,101 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 13:43:20,102 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 13:43:20,103 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 13:43:20,104 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 13:43:20,106 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 13:43:20,107 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 13:43:20,108 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 13:43:20,108 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 13:43:20,110 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 13:43:20,110 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 13:43:20,110 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 13:43:20,112 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 13:43:20,120 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 13:43:20,121 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:43:20,123 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:43:20,125 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:43:20,131 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:20,134 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:20,134 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:20,135 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:43:20,136 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 2 via LangChain +2025-12-13 13:43:20,137 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 2 +2025-12-13 13:43:20,532 - root - INFO - Clearing user context +2025-12-13 13:43:20,692 - openai._base_client - INFO - Retrying request to /chat/completions in 0.389504 seconds +2025-12-13 13:43:21,225 - openai._base_client - INFO - Retrying request to /chat/completions in 0.760109 seconds +2025-12-13 13:43:22,104 - th_agenter.langchain_chat_service - ERROR - Failed to process LangChain streaming chat request for conversation 2: Connection error. +Traceback (most recent call last): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 101, in map_httpcore_exceptions + yield + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 394, in handle_async_request + resp = await self._pool.handle_async_request(req) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection_pool.py", line 256, in handle_async_request + raise exc from None + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection_pool.py", line 236, in handle_async_request + response = await connection.handle_async_request( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\http_proxy.py", line 288, in handle_async_request + connect_response = await self._connection.handle_async_request( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 101, in handle_async_request + raise exc + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 78, in handle_async_request + stream = await self._connect(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 156, in _connect + stream = await stream.start_tls(**kwargs) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_backends\anyio.py", line 67, in start_tls + with map_exceptions(exc_map): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\contextlib.py", line 153, in __exit__ + self.gen.throw(typ, value, traceback) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_exceptions.py", line 14, in map_exceptions + raise to_exc(exc) from exc +httpcore.ConnectError + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1529, in request + response = await self._client.send( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1629, in send + response = await self._send_handling_auth( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1657, in _send_handling_auth + response = await self._send_handling_redirects( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1694, in _send_handling_redirects + response = await self._send_single_request(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1730, in _send_single_request + response = await transport.handle_async_request(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 393, in handle_async_request + with map_httpcore_exceptions(): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\contextlib.py", line 153, in __exit__ + self.gen.throw(typ, value, traceback) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 118, in map_httpcore_exceptions + raise mapped_exc(message) from exc +httpx.ConnectError + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "E:\Work\HXF\backend\th_agenter\services\langchain_chat.py", line 282, in chat_stream + async for chunk in streaming_llm_to_use.astream(langchain_messages): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_core\language_models\chat_models.py", line 664, in astream + async for chunk in self._astream( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_openai\chat_models\base.py", line 2997, in _astream + async for chunk in super()._astream(*args, **kwargs): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_openai\chat_models\base.py", line 1514, in _astream + response = await self.async_client.create(**payload) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\resources\chat\completions\completions.py", line 2672, in create + return await self._post( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1794, in post + return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1561, in request + raise APIConnectionError(request=request) from err +openai.APIConnectionError: Connection error. +2025-12-13 13:43:26,682 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-13 13:43:26,683 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:26,683 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-13 13:43:26,683 - root - INFO - Clearing user context +2025-12-13 13:43:26,684 - root - INFO - User context cleared before authentication +2025-12-13 13:43:26,684 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:26,686 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:26,688 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:26,688 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:26,689 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:26,693 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-13 13:43:26,695 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765606374} +2025-12-13 13:43:26,696 - root - INFO - Looking for user with username: admin +2025-12-13 13:43:26,698 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-13 13:43:26,698 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:26,700 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-13 13:43:26,701 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-13 13:43:26,718 - th_agenter.conversation_service - INFO - Successfully created conversation 3 for user 2 +2025-12-13 13:43:26,720 - root - INFO - Clearing user context +2025-12-13 13:43:28,473 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/3/chat/stream +2025-12-13 13:43:28,473 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:43:28,474 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/chat/stream +2025-12-13 13:43:28,474 - root - INFO - Clearing user context +2025-12-13 13:43:28,474 - root - INFO - User context cleared before authentication +2025-12-13 13:43:28,475 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:43:28,477 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:43:28,477 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:43:28,478 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:43:28,478 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:43:28,498 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:43:28,521 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:28,524 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:28,524 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:28,524 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:43:28,538 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:43:28,590 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:43:28,595 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:28,596 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:28,598 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:28,599 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:43:28,599 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:43:28,602 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:43:28,604 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:43:28,610 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:43:28,611 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:43:28,613 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:43:28,613 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:43:28,615 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 3 via LangChain +2025-12-13 13:43:28,616 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 3 +2025-12-13 13:43:28,658 - root - INFO - Clearing user context +2025-12-13 13:43:28,759 - openai._base_client - INFO - Retrying request to /chat/completions in 0.463663 seconds +2025-12-13 13:43:29,386 - openai._base_client - INFO - Retrying request to /chat/completions in 0.868292 seconds +2025-12-13 13:43:30,351 - th_agenter.langchain_chat_service - ERROR - Failed to process LangChain streaming chat request for conversation 3: Connection error. +Traceback (most recent call last): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 101, in map_httpcore_exceptions + yield + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 394, in handle_async_request + resp = await self._pool.handle_async_request(req) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection_pool.py", line 256, in handle_async_request + raise exc from None + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection_pool.py", line 236, in handle_async_request + response = await connection.handle_async_request( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\http_proxy.py", line 288, in handle_async_request + connect_response = await self._connection.handle_async_request( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 101, in handle_async_request + raise exc + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 78, in handle_async_request + stream = await self._connect(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_async\connection.py", line 156, in _connect + stream = await stream.start_tls(**kwargs) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_backends\anyio.py", line 67, in start_tls + with map_exceptions(exc_map): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\contextlib.py", line 153, in __exit__ + self.gen.throw(typ, value, traceback) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpcore\_exceptions.py", line 14, in map_exceptions + raise to_exc(exc) from exc +httpcore.ConnectError + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1529, in request + response = await self._client.send( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1629, in send + response = await self._send_handling_auth( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1657, in _send_handling_auth + response = await self._send_handling_redirects( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1694, in _send_handling_redirects + response = await self._send_single_request(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_client.py", line 1730, in _send_single_request + response = await transport.handle_async_request(request) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 393, in handle_async_request + with map_httpcore_exceptions(): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\contextlib.py", line 153, in __exit__ + self.gen.throw(typ, value, traceback) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\httpx\_transports\default.py", line 118, in map_httpcore_exceptions + raise mapped_exc(message) from exc +httpx.ConnectError + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "E:\Work\HXF\backend\th_agenter\services\langchain_chat.py", line 282, in chat_stream + async for chunk in streaming_llm_to_use.astream(langchain_messages): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_core\language_models\chat_models.py", line 664, in astream + async for chunk in self._astream( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_openai\chat_models\base.py", line 2997, in _astream + async for chunk in super()._astream(*args, **kwargs): + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain_openai\chat_models\base.py", line 1514, in _astream + response = await self.async_client.create(**payload) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\resources\chat\completions\completions.py", line 2672, in create + return await self._post( + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1794, in post + return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls) + File "D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\openai\_base_client.py", line 1561, in request + raise APIConnectionError(request=request) from err +openai.APIConnectionError: Connection error. +2025-12-13 13:45:16,677 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:45:27,380 - root - INFO - Logging configured successfully +2025-12-13 13:45:27,496 - root - INFO - Logging configured successfully +2025-12-13 13:45:27,599 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:45:27,609 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:45:27,614 - root - INFO - Database tables created +2025-12-13 13:45:27,614 - root - INFO - Database initialized +2025-12-13 13:46:04,229 - root - INFO - Shutting down TH-Agenter application... +2025-12-13 13:46:13,239 - root - INFO - Logging configured successfully +2025-12-13 13:46:13,343 - root - INFO - Logging configured successfully +2025-12-13 13:46:13,432 - root - INFO - Starting up TH-Agenter application... +2025-12-13 13:46:13,440 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-13 13:46:13,445 - root - INFO - Database tables created +2025-12-13 13:46:13,445 - root - INFO - Database initialized +2025-12-13 13:46:32,924 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/3/chat/stream +2025-12-13 13:46:32,927 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-13 13:46:32,928 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/chat/stream +2025-12-13 13:46:32,929 - root - INFO - Clearing user context +2025-12-13 13:46:32,929 - root - INFO - User context cleared before authentication +2025-12-13 13:46:32,929 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-13 13:46:32,978 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-13 13:46:32,979 - root - INFO - Verification - ContextVar user: admin +2025-12-13 13:46:32,980 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-13 13:46:32,980 - root - INFO - Verified current user ID in context: 2 +2025-12-13 13:46:32,997 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-13 13:46:33,581 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:46:33,585 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:46:33,586 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:46:33,586 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:46:33,598 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-13 13:46:33,619 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-13 13:46:33,626 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:46:33,629 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:46:33,629 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:46:33,630 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-13 13:46:33,635 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-13 13:46:33,636 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-13 13:46:33,636 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-13 13:46:33,637 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-13 13:46:33,645 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-13 13:46:33,651 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-13 13:46:33,651 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-13 13:46:33,652 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-13 13:46:33,652 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-13 13:46:33,653 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-13 13:46:33,653 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-13 13:46:33,656 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-13 13:46:33,664 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-13 13:46:33,665 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-13 13:46:33,669 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-13 13:46:33,671 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-13 13:46:33,689 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-13 13:46:33,690 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-13 13:46:33,691 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF\backend +2025-12-13 13:46:33,692 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-13 13:46:33,693 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 3 via LangChain +2025-12-13 13:46:33,694 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 3 +2025-12-13 13:46:33,744 - root - INFO - Clearing user context +2025-12-13 13:46:34,689 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-13 13:46:35,498 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 3 +2025-12-15 09:44:10,489 - root - INFO - Logging configured successfully +2025-12-15 09:44:10,618 - root - INFO - Logging configured successfully +2025-12-15 09:44:10,731 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:44:10,744 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:44:10,760 - root - INFO - Database tables created +2025-12-15 09:44:10,761 - root - INFO - Database initialized +2025-12-15 09:44:14,152 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,154 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,155 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,155 - root - INFO - Clearing user context +2025-12-15 09:44:14,157 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,157 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,159 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,163 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,163 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,163 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,266 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:14,268 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,268 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:14,271 - root - INFO - Clearing user context +2025-12-15 09:44:14,275 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,275 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,276 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,277 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,278 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,278 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,334 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 09:44:14,334 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,334 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:44:14,335 - root - INFO - Clearing user context +2025-12-15 09:44:14,335 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,335 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,335 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,336 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,336 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,336 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,396 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,397 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,397 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,397 - root - INFO - Clearing user context +2025-12-15 09:44:14,397 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,398 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,398 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,398 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,399 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,399 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,400 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:14,400 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,401 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:14,407 - root - INFO - Clearing user context +2025-12-15 09:44:14,407 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,407 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,408 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,408 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,409 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,409 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,415 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 09:44:14,419 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,420 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:44:14,420 - root - INFO - Clearing user context +2025-12-15 09:44:14,420 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,421 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,421 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,421 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,421 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,422 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,474 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,475 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,475 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,475 - root - INFO - Clearing user context +2025-12-15 09:44:14,475 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,475 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,475 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,476 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,476 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,476 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,582 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:14,583 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,583 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:14,583 - root - INFO - Clearing user context +2025-12-15 09:44:14,583 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,583 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,584 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,584 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,585 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,585 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,646 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,647 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,647 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,647 - root - INFO - Clearing user context +2025-12-15 09:44:14,648 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,648 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,649 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,649 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,649 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,651 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,709 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,710 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,711 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,712 - root - INFO - Clearing user context +2025-12-15 09:44:14,712 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,713 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,713 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,714 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,716 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,716 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,721 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,721 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,722 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,722 - root - INFO - Clearing user context +2025-12-15 09:44:14,722 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,723 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,724 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,724 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,724 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,725 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:14,832 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:14,833 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:14,833 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:14,834 - root - INFO - Clearing user context +2025-12-15 09:44:14,835 - root - INFO - User context cleared before authentication +2025-12-15 09:44:14,836 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:14,837 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:14,837 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:14,837 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:14,837 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,037 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,038 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,038 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,038 - root - INFO - Clearing user context +2025-12-15 09:44:15,039 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,039 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,039 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,039 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,039 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,040 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,149 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,149 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,149 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,149 - root - INFO - Clearing user context +2025-12-15 09:44:15,150 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,150 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,150 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,150 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,151 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,151 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,295 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,296 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,297 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,297 - root - INFO - Clearing user context +2025-12-15 09:44:15,298 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,298 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,299 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,299 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,299 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,300 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,409 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,411 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,412 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,414 - root - INFO - Clearing user context +2025-12-15 09:44:15,416 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,416 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,417 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,417 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,419 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,421 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,530 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,530 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,531 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,531 - root - INFO - Clearing user context +2025-12-15 09:44:15,531 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,532 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,532 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,533 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,533 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,533 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:15,947 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:15,948 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:15,948 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:15,948 - root - INFO - Clearing user context +2025-12-15 09:44:15,949 - root - INFO - User context cleared before authentication +2025-12-15 09:44:15,949 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:15,950 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:15,950 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:15,950 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:15,950 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:16,424 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:16,425 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:16,426 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:16,426 - root - INFO - Clearing user context +2025-12-15 09:44:16,429 - root - INFO - User context cleared before authentication +2025-12-15 09:44:16,431 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTYwNjM3NH0.eOERo6DJN_rm74zNsrldygYg-nI_ACB4IAV8sgNcZvc +2025-12-15 09:44:16,433 - root - ERROR - Token verification failed: Signature has expired +2025-12-15 09:44:16,434 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:16,434 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-15 09:44:16,435 - root - ERROR - Algorithm: HS256 +2025-12-15 09:44:18,906 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-15 09:44:18,906 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:18,907 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-15 09:44:18,907 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-15 09:44:19,254 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 09:44:19,255 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,256 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 09:44:19,256 - root - INFO - Clearing user context +2025-12-15 09:44:19,256 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,257 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,261 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,261 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,262 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,262 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,264 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:19,265 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:44:19,266 - root - INFO - Looking for user with username: admin +2025-12-15 09:44:19,268 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:44:19,268 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,269 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:44:19,278 - root - INFO - Clearing user context +2025-12-15 09:44:19,286 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 09:44:19,286 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,287 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 09:44:19,287 - root - INFO - Clearing user context +2025-12-15 09:44:19,287 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,288 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,291 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,291 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,292 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,292 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,294 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:19,297 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:44:19,297 - root - INFO - Looking for user with username: admin +2025-12-15 09:44:19,299 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:44:19,299 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,300 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:44:19,307 - root - INFO - Clearing user context +2025-12-15 09:44:19,747 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:19,748 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,748 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:19,749 - root - INFO - Clearing user context +2025-12-15 09:44:19,749 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,750 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,752 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,753 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,754 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,758 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,760 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 09:44:19,762 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,762 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:44:19,763 - root - INFO - Clearing user context +2025-12-15 09:44:19,764 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,764 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,766 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,768 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,769 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,775 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,794 - root - INFO - Clearing user context +2025-12-15 09:44:19,794 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:19,797 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:44:19,799 - root - INFO - Looking for user with username: admin +2025-12-15 09:44:19,802 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:19,803 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:44:19,804 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,806 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:19,807 - root - INFO - Clearing user context +2025-12-15 09:44:19,804 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,807 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,807 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:44:19,808 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,816 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,816 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,817 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,819 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,855 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 09:44:19,856 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,857 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 09:44:19,858 - root - INFO - Clearing user context +2025-12-15 09:44:19,858 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,860 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,862 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,867 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,868 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,869 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,873 - root - INFO - Clearing user context +2025-12-15 09:44:19,881 - root - INFO - Clearing user context +2025-12-15 09:44:19,885 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 09:44:19,891 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,891 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:44:19,892 - root - INFO - Clearing user context +2025-12-15 09:44:19,892 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,893 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,897 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,898 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,898 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,899 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,900 - root - INFO - Clearing user context +2025-12-15 09:44:19,902 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 09:44:19,903 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:19,903 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 09:44:19,903 - root - INFO - Clearing user context +2025-12-15 09:44:19,904 - root - INFO - User context cleared before authentication +2025-12-15 09:44:19,904 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:19,907 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:19,907 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,908 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:19,908 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:19,913 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:44:19,916 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:44:19,916 - root - INFO - Clearing user context +2025-12-15 09:44:19,917 - root - INFO - Looking for user with username: admin +2025-12-15 09:44:19,919 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:44:19,920 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:19,921 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:44:19,940 - root - INFO - Clearing user context +2025-12-15 09:44:20,211 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 09:44:20,211 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:20,212 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 09:44:20,212 - root - INFO - Clearing user context +2025-12-15 09:44:20,212 - root - INFO - User context cleared before authentication +2025-12-15 09:44:20,212 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:20,214 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:20,214 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:20,214 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:20,214 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:20,217 - root - INFO - Clearing user context +2025-12-15 09:44:20,527 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 09:44:20,527 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:20,528 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 09:44:20,528 - root - INFO - Clearing user context +2025-12-15 09:44:20,529 - root - INFO - User context cleared before authentication +2025-12-15 09:44:20,529 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:20,531 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:20,532 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:20,532 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:20,534 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:20,539 - root - INFO - Clearing user context +2025-12-15 09:44:21,143 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/3 +2025-12-15 09:44:21,143 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:21,144 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3 +2025-12-15 09:44:21,144 - root - INFO - Clearing user context +2025-12-15 09:44:21,144 - root - INFO - User context cleared before authentication +2025-12-15 09:44:21,145 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:21,146 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:21,147 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:21,147 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:21,147 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:21,152 - root - INFO - Clearing user context +2025-12-15 09:44:21,462 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/3/messages +2025-12-15 09:44:21,462 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:21,463 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/messages +2025-12-15 09:44:21,463 - root - INFO - Clearing user context +2025-12-15 09:44:21,463 - root - INFO - User context cleared before authentication +2025-12-15 09:44:21,463 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:21,464 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:21,464 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:21,464 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:21,465 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:21,471 - root - INFO - Clearing user context +2025-12-15 09:44:33,473 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/3/chat/stream +2025-12-15 09:44:33,473 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:44:33,474 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/chat/stream +2025-12-15 09:44:33,474 - root - INFO - Clearing user context +2025-12-15 09:44:33,475 - root - INFO - User context cleared before authentication +2025-12-15 09:44:33,475 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:44:33,477 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:44:33,477 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:44:33,478 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:44:33,478 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:44:33,489 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-15 09:44:34,244 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-15 09:44:34,246 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF_AI\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-15 09:44:34,246 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF_AI\HXF\backend +2025-12-15 09:44:34,246 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-15 09:44:34,255 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 09:44:34,270 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 09:44:34,277 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-15 09:44:34,278 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF_AI\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-15 09:44:34,281 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF_AI\HXF\backend +2025-12-15 09:44:34,282 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-15 09:44:34,285 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-15 09:44:34,286 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-15 09:44:34,287 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-15 09:44:34,287 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-15 09:44:34,288 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-15 09:44:34,288 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-15 09:44:34,288 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-15 09:44:34,289 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-15 09:44:34,289 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-15 09:44:34,289 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-15 09:44:34,289 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-15 09:44:34,289 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-15 09:44:34,292 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-15 09:44:34,296 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-15 09:44:34,298 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-15 09:44:34,299 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-15 09:44:34,305 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-15 09:44:34,306 - th_agenter.redis_memory_service - INFO - Conversation history directory: E:\Work\HXF_AI\HXF\backend\th_agenter\services\..\..\conversation_history (exists: True) +2025-12-15 09:44:34,306 - th_agenter.redis_memory_service - INFO - Current working directory: E:\Work\HXF_AI\HXF\backend +2025-12-15 09:44:34,307 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-15 09:44:34,308 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 3 via LangChain +2025-12-15 09:44:34,308 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 3 +2025-12-15 09:44:34,647 - root - INFO - Clearing user context +2025-12-15 09:44:36,139 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-15 09:44:37,806 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 3 +2025-12-15 09:45:12,619 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 09:45:12,619 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:12,619 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:45:12,620 - root - INFO - Clearing user context +2025-12-15 09:45:12,620 - root - INFO - User context cleared before authentication +2025-12-15 09:45:12,620 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:12,623 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:12,623 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:12,623 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:12,624 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:12,626 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:12,627 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:12,627 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:12,629 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:12,630 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:12,631 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:12,643 - root - INFO - Clearing user context +2025-12-15 09:45:13,863 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/6/documents +2025-12-15 09:45:13,863 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/6/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:13,863 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/6/documents +2025-12-15 09:45:13,864 - root - INFO - Clearing user context +2025-12-15 09:45:13,864 - root - INFO - User context cleared before authentication +2025-12-15 09:45:13,864 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:13,866 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:13,866 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:13,867 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:13,867 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:13,869 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:13,869 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:13,870 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:13,872 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:13,872 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:13,872 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:13,880 - root - INFO - Clearing user context +2025-12-15 09:45:28,814 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/ +2025-12-15 09:45:28,814 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:28,815 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 09:45:28,816 - root - INFO - Clearing user context +2025-12-15 09:45:28,816 - root - INFO - User context cleared before authentication +2025-12-15 09:45:28,817 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:28,818 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:28,819 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:28,819 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:28,819 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:28,822 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:28,822 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:28,822 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:28,823 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:28,824 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:28,824 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:28,843 - th_agenter.services.knowledge_base - INFO - Created knowledge base: jcq_test1 (ID: 7) +2025-12-15 09:45:28,844 - root - INFO - Clearing user context +2025-12-15 09:45:30,609 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:45:30,610 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:30,610 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:45:30,611 - root - INFO - Clearing user context +2025-12-15 09:45:30,611 - root - INFO - User context cleared before authentication +2025-12-15 09:45:30,612 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:30,613 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:30,614 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:30,614 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:30,615 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:30,617 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:30,618 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:30,619 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:30,622 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:30,623 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:30,623 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:30,629 - root - INFO - Clearing user context +2025-12-15 09:45:48,029 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 09:45:48,030 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:48,031 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:45:48,031 - root - INFO - Clearing user context +2025-12-15 09:45:48,032 - root - INFO - User context cleared before authentication +2025-12-15 09:45:48,032 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:48,034 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:48,035 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:48,040 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:48,041 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:48,056 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:48,057 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:48,057 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:48,060 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:48,061 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:48,061 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:48,198 - th_agenter.services.document - INFO - Uploaded document: 发明专利申请说明书CN202411808464.5.pdf to KB 7 (Doc ID: 5) +2025-12-15 09:45:48,204 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 09:45:48,217 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 09:45:48,224 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 09:45:48,226 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f86b8ae2-1f23-46c3-97df-e27c8475381d_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 09:45:48,249 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f86b8ae2-1f23-46c3-97df-e27c8475381d_发明专利申请说明书CN202411808464.5.pdf, 页数: 0 +2025-12-15 09:45:48,253 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 09:45:48,369 - th_agenter.services.document_processor - WARNING - 连接现有向量存储失败,创建新的向量存储: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:45:48,424 - th_agenter.services.document_processor - ERROR - 创建向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:45:48,426 - th_agenter.services.document_processor - ERROR - 添加文档到向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:45:48,429 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:45:48,436 - root - INFO - Clearing user context +2025-12-15 09:45:50,447 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:45:50,448 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:50,448 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:45:50,448 - root - INFO - Clearing user context +2025-12-15 09:45:50,448 - root - INFO - User context cleared before authentication +2025-12-15 09:45:50,448 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:50,449 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:50,449 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:50,450 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:50,450 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:50,451 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:50,451 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:50,452 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:50,453 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:50,454 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:50,457 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:50,463 - root - INFO - Clearing user context +2025-12-15 09:45:57,507 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 09:45:57,508 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:45:57,508 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 09:45:57,508 - root - INFO - Clearing user context +2025-12-15 09:45:57,508 - root - INFO - User context cleared before authentication +2025-12-15 09:45:57,508 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:45:57,509 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:45:57,510 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:57,510 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:45:57,510 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:45:57,512 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:45:57,512 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:45:57,512 - root - INFO - Looking for user with username: admin +2025-12-15 09:45:57,513 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:45:57,514 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:45:57,514 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:45:57,854 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:45:57,904 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 09:45:57,905 - root - INFO - Clearing user context +2025-12-15 09:49:09,884 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 09:49:09,885 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:49:09,886 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 09:49:09,886 - root - INFO - Clearing user context +2025-12-15 09:49:09,886 - root - INFO - User context cleared before authentication +2025-12-15 09:49:09,887 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:49:09,888 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:49:09,889 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:09,889 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:49:09,890 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:49:09,893 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:49:09,894 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:49:09,894 - root - INFO - Looking for user with username: admin +2025-12-15 09:49:09,894 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:49:09,896 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:09,896 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:49:09,906 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f86b8ae2-1f23-46c3-97df-e27c8475381d_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 09:49:09,940 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 09:49:09,940 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 09:49:09,952 - th_agenter.services.document - INFO - Deleted document: f86b8ae2-1f23-46c3-97df-e27c8475381d_发明专利申请说明书CN202411808464.5.pdf (ID: 5) +2025-12-15 09:49:09,953 - root - INFO - Clearing user context +2025-12-15 09:49:10,133 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:49:10,133 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:49:10,134 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:49:10,134 - root - INFO - Clearing user context +2025-12-15 09:49:10,135 - root - INFO - User context cleared before authentication +2025-12-15 09:49:10,135 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:49:10,136 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:49:10,136 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:10,136 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:49:10,137 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:49:10,138 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:49:10,139 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:49:10,139 - root - INFO - Looking for user with username: admin +2025-12-15 09:49:10,140 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:49:10,141 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:10,141 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:49:10,144 - root - INFO - Clearing user context +2025-12-15 09:49:13,138 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 09:49:13,139 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:49:13,139 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:49:13,140 - root - INFO - Clearing user context +2025-12-15 09:49:13,142 - root - INFO - User context cleared before authentication +2025-12-15 09:49:13,143 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:49:13,146 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:49:13,148 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:13,149 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:49:13,149 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:49:13,152 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:49:13,154 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:49:13,154 - root - INFO - Looking for user with username: admin +2025-12-15 09:49:13,156 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:49:13,156 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:13,157 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:49:13,175 - th_agenter.services.document - INFO - Uploaded document: 周报.txt to KB 7 (Doc ID: 5) +2025-12-15 09:49:13,179 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d9857870-20aa-44c6-9022-43502b369956_周报.txt +2025-12-15 09:49:13,180 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d9857870-20aa-44c6-9022-43502b369956_周报.txt, 页数: 1 +2025-12-15 09:49:13,191 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-15 09:49:13,192 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 09:49:13,194 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 7 个文档块 +2025-12-15 09:49:13,508 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:13,640 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:13,805 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:13,936 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:14,053 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:14,172 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:14,297 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:14,369 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-15 09:49:14,379 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 5, 'status': 'success', 'chunks_count': 7, 'message': '文档处理完成'} +2025-12-15 09:49:14,386 - th_agenter.services.document - INFO - Processed document: d9857870-20aa-44c6-9022-43502b369956_周报.txt (ID: 5) +2025-12-15 09:49:14,387 - root - INFO - Clearing user context +2025-12-15 09:49:16,710 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:49:16,713 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:49:16,713 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:49:16,714 - root - INFO - Clearing user context +2025-12-15 09:49:16,714 - root - INFO - User context cleared before authentication +2025-12-15 09:49:16,715 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:49:16,716 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:49:16,717 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:16,717 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:49:16,718 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:49:16,719 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:49:16,720 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:49:16,720 - root - INFO - Looking for user with username: admin +2025-12-15 09:49:16,722 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:49:16,722 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:16,723 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:49:16,727 - root - INFO - Clearing user context +2025-12-15 09:49:21,402 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 09:49:21,403 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:49:21,403 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 09:49:21,404 - root - INFO - Clearing user context +2025-12-15 09:49:21,404 - root - INFO - User context cleared before authentication +2025-12-15 09:49:21,404 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:49:21,406 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:49:21,406 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:21,406 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:49:21,407 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:49:21,409 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:49:21,410 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:49:21,410 - root - INFO - Looking for user with username: admin +2025-12-15 09:49:21,412 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:49:21,412 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:49:21,413 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:49:21,711 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:49:21,767 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-15 09:49:21,769 - root - INFO - Clearing user context +2025-12-15 09:53:04,488 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 09:53:04,488 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:04,488 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 09:53:04,489 - root - INFO - Clearing user context +2025-12-15 09:53:04,489 - root - INFO - User context cleared before authentication +2025-12-15 09:53:04,490 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:04,491 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:04,492 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:04,492 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:04,492 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:04,494 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:04,495 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:04,496 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:04,498 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:04,498 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:04,498 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:04,500 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d9857870-20aa-44c6-9022-43502b369956_周报.txt +2025-12-15 09:53:04,571 - th_agenter.services.document_processor - INFO - 成功删除 7 个文档块: document_id=5 +2025-12-15 09:53:04,571 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 09:53:04,577 - th_agenter.services.document - INFO - Deleted document: d9857870-20aa-44c6-9022-43502b369956_周报.txt (ID: 5) +2025-12-15 09:53:04,579 - root - INFO - Clearing user context +2025-12-15 09:53:04,757 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:53:04,758 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:04,758 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:53:04,759 - root - INFO - Clearing user context +2025-12-15 09:53:04,759 - root - INFO - User context cleared before authentication +2025-12-15 09:53:04,759 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:04,761 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:04,762 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:04,762 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:04,763 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:04,765 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:04,765 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:04,766 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:04,767 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:04,767 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:04,768 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:04,774 - root - INFO - Clearing user context +2025-12-15 09:53:08,777 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 09:53:08,777 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:08,778 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:53:08,778 - root - INFO - Clearing user context +2025-12-15 09:53:08,778 - root - INFO - User context cleared before authentication +2025-12-15 09:53:08,779 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:08,781 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:08,782 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:08,782 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:08,783 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:08,795 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:08,796 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:08,797 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:08,798 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:08,799 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:08,800 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:08,819 - th_agenter.services.document - INFO - Uploaded document: 发明专利申请说明书CN202411808464.5.pdf to KB 7 (Doc ID: 5) +2025-12-15 09:53:08,822 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\20b12291-406f-4028-9e12-a1e809873e3a_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 09:53:08,855 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\20b12291-406f-4028-9e12-a1e809873e3a_发明专利申请说明书CN202411808464.5.pdf, 页数: 0 +2025-12-15 09:53:08,856 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 09:53:08,923 - th_agenter.services.document_processor - WARNING - 连接现有向量存储失败,创建新的向量存储: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:53:08,984 - th_agenter.services.document_processor - ERROR - 创建向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:53:08,985 - th_agenter.services.document_processor - ERROR - 添加文档到向量存储失败: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:53:08,986 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: (psycopg.errors.NotNullViolation) null value in column "id" of relation "langchain_pg_embedding" violates not-null constraint +DETAIL: Failing row contains (null, null, null, null, null). +[SQL: INSERT INTO langchain_pg_embedding DEFAULT VALUES ON CONFLICT (id) DO UPDATE SET embedding = excluded.embedding, document = excluded.document, cmetadata = excluded.cmetadata] +(Background on this error at: https://sqlalche.me/e/20/gkpj) +2025-12-15 09:53:08,996 - root - INFO - Clearing user context +2025-12-15 09:53:11,324 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:53:11,324 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:11,324 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:53:11,324 - root - INFO - Clearing user context +2025-12-15 09:53:11,324 - root - INFO - User context cleared before authentication +2025-12-15 09:53:11,325 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:11,326 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:11,327 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:11,327 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:11,327 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:11,329 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:11,329 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:11,329 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:11,330 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:11,334 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:11,334 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:11,352 - root - INFO - Clearing user context +2025-12-15 09:53:12,048 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 09:53:12,049 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:12,049 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 09:53:12,050 - root - INFO - Clearing user context +2025-12-15 09:53:12,050 - root - INFO - User context cleared before authentication +2025-12-15 09:53:12,050 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:12,052 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:12,052 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:12,053 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:12,053 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:12,055 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:12,056 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:12,056 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:12,058 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:12,058 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:12,059 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:12,064 - root - INFO - Clearing user context +2025-12-15 09:53:20,636 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 09:53:20,640 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:20,640 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 09:53:20,641 - root - INFO - Clearing user context +2025-12-15 09:53:20,641 - root - INFO - User context cleared before authentication +2025-12-15 09:53:20,641 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:20,643 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:20,643 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:20,643 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:20,643 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:20,646 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:20,647 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:20,647 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:20,649 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:20,649 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:20,650 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:20,986 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:53:21,046 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 09:53:21,048 - root - INFO - Clearing user context +2025-12-15 09:53:25,632 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 09:53:25,633 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:25,633 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 09:53:25,633 - root - INFO - Clearing user context +2025-12-15 09:53:25,633 - root - INFO - User context cleared before authentication +2025-12-15 09:53:25,634 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:25,635 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:25,636 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:25,636 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:25,636 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:25,639 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:25,640 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:25,641 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:25,642 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:25,643 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:25,644 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:25,873 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:53:25,926 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 09:53:25,927 - root - INFO - Clearing user context +2025-12-15 09:53:30,096 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 09:53:30,097 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 09:53:30,097 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 09:53:30,097 - root - INFO - Clearing user context +2025-12-15 09:53:30,097 - root - INFO - User context cleared before authentication +2025-12-15 09:53:30,098 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 09:53:30,099 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 09:53:30,099 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:30,099 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 09:53:30,100 - root - INFO - Verified current user ID in context: 2 +2025-12-15 09:53:30,101 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 09:53:30,101 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 09:53:30,101 - root - INFO - Looking for user with username: admin +2025-12-15 09:53:30,102 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 09:53:30,102 - root - INFO - Verification - ContextVar user: admin +2025-12-15 09:53:30,102 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 09:53:30,328 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 09:53:30,384 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 09:53:30,386 - root - INFO - Clearing user context +2025-12-15 09:56:40,189 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 09:56:52,498 - root - INFO - Logging configured successfully +2025-12-15 09:56:52,638 - root - INFO - Logging configured successfully +2025-12-15 09:56:52,759 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:56:52,772 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:56:52,777 - root - INFO - Database tables created +2025-12-15 09:56:52,777 - root - INFO - Database initialized +2025-12-15 09:57:17,536 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 09:57:27,404 - root - INFO - Logging configured successfully +2025-12-15 09:57:27,556 - root - INFO - Logging configured successfully +2025-12-15 09:57:27,694 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:57:27,705 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:57:27,710 - root - INFO - Database tables created +2025-12-15 09:57:27,710 - root - INFO - Database initialized +2025-12-15 09:57:44,396 - root - INFO - Logging configured successfully +2025-12-15 09:57:44,592 - root - INFO - Logging configured successfully +2025-12-15 09:57:44,748 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:57:44,763 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:57:44,778 - root - INFO - Database tables created +2025-12-15 09:57:44,779 - root - INFO - Database initialized +2025-12-15 09:58:12,108 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 09:58:32,826 - root - INFO - Logging configured successfully +2025-12-15 09:58:33,056 - root - INFO - Logging configured successfully +2025-12-15 09:58:33,247 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:58:33,260 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:58:33,269 - root - INFO - Database tables created +2025-12-15 09:58:33,269 - root - INFO - Database initialized +2025-12-15 09:58:45,181 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 09:59:01,403 - root - INFO - Logging configured successfully +2025-12-15 09:59:01,606 - root - INFO - Logging configured successfully +2025-12-15 09:59:01,775 - root - INFO - Starting up TH-Agenter application... +2025-12-15 09:59:01,789 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 09:59:01,796 - root - INFO - Database tables created +2025-12-15 09:59:01,797 - root - INFO - Database initialized +2025-12-15 10:01:14,419 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:01:14,419 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:14,419 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:01:14,419 - root - INFO - Clearing user context +2025-12-15 10:01:14,419 - root - INFO - User context cleared before authentication +2025-12-15 10:01:14,419 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:14,444 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:14,444 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:14,444 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:14,445 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:14,448 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:14,448 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:14,449 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:14,450 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:14,450 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:14,450 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:14,460 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\20b12291-406f-4028-9e12-a1e809873e3a_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 10:01:14,464 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:01:14,573 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:01:14,584 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:01:14,738 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:01:14,739 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:01:14,753 - th_agenter.services.document - INFO - Deleted document: 20b12291-406f-4028-9e12-a1e809873e3a_发明专利申请说明书CN202411808464.5.pdf (ID: 5) +2025-12-15 10:01:14,753 - root - INFO - Clearing user context +2025-12-15 10:01:14,760 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:01:14,760 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:14,761 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:01:14,761 - root - INFO - Clearing user context +2025-12-15 10:01:14,761 - root - INFO - User context cleared before authentication +2025-12-15 10:01:14,761 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:14,763 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:14,763 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:14,763 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:14,763 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:14,764 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:14,764 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:14,765 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:14,765 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:14,766 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:14,766 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:14,777 - root - INFO - Clearing user context +2025-12-15 10:01:20,419 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:01:20,425 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:20,426 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:01:20,427 - root - INFO - Clearing user context +2025-12-15 10:01:20,428 - root - INFO - User context cleared before authentication +2025-12-15 10:01:20,428 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:20,436 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:20,437 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:20,437 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:20,437 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:20,442 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:20,443 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:20,444 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:20,445 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:20,446 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:20,446 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:20,613 - th_agenter.services.document - INFO - Uploaded document: testpdf.pdf to KB 7 (Doc ID: 5) +2025-12-15 10:01:20,616 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf +2025-12-15 10:01:21,293 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf, 页数: 2 +2025-12-15 10:01:21,299 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-15 10:01:21,300 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 10:01:21,302 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 4 个文档块 +2025-12-15 10:01:22,463 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:22,589 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:22,745 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:22,869 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:22,946 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-15 10:01:22,962 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 5, 'status': 'success', 'chunks_count': 4, 'message': '文档处理完成'} +2025-12-15 10:01:22,973 - th_agenter.services.document - INFO - Processed document: 6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf (ID: 5) +2025-12-15 10:01:22,974 - root - INFO - Clearing user context +2025-12-15 10:01:24,984 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:01:24,984 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:24,984 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:01:24,984 - root - INFO - Clearing user context +2025-12-15 10:01:24,984 - root - INFO - User context cleared before authentication +2025-12-15 10:01:24,984 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:24,985 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:24,985 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:24,985 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:24,986 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:24,986 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:24,987 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:24,987 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:24,990 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:24,991 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:24,992 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:24,997 - root - INFO - Clearing user context +2025-12-15 10:01:39,011 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 10:01:39,012 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:39,012 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 10:01:39,013 - root - INFO - Clearing user context +2025-12-15 10:01:39,013 - root - INFO - User context cleared before authentication +2025-12-15 10:01:39,013 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:39,015 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:39,016 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:39,017 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:39,018 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:39,020 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:39,020 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:39,021 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:39,023 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:39,024 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:39,025 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:39,352 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:39,403 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 4 个相关文档 +2025-12-15 10:01:39,404 - root - INFO - Clearing user context +2025-12-15 10:01:46,896 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 10:01:46,897 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:01:46,897 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 10:01:46,898 - root - INFO - Clearing user context +2025-12-15 10:01:46,898 - root - INFO - User context cleared before authentication +2025-12-15 10:01:46,898 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:01:46,900 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:01:46,900 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:46,901 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:01:46,901 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:01:46,905 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:01:46,906 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:01:46,907 - root - INFO - Looking for user with username: admin +2025-12-15 10:01:46,908 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:01:46,908 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:01:46,909 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:01:47,188 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:01:47,243 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 4 个相关文档 +2025-12-15 10:01:47,244 - root - INFO - Clearing user context +2025-12-15 10:03:05,912 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:09:54,155 - root - INFO - Logging configured successfully +2025-12-15 10:09:54,330 - root - INFO - Logging configured successfully +2025-12-15 10:09:54,473 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:09:54,482 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:09:54,487 - root - INFO - Database tables created +2025-12-15 10:09:54,487 - root - INFO - Database initialized +2025-12-15 10:10:14,240 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:10:14,241 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:14,241 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:10:14,242 - root - INFO - Clearing user context +2025-12-15 10:10:14,242 - root - INFO - User context cleared before authentication +2025-12-15 10:10:14,242 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:14,301 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:14,302 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:14,302 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:14,302 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:14,308 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:14,309 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:14,310 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:14,314 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:14,315 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:14,316 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:14,494 - th_agenter.services.document - INFO - Uploaded document: testdoc.doc to KB 7 (Doc ID: 6) +2025-12-15 10:10:14,500 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:10:14,591 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:10:14,596 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:10:14,600 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 6, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9a5bf938-37f8-4726-a095-841e45081f3a_testdoc.doc +2025-12-15 10:10:14,602 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9a5bf938-37f8-4726-a095-841e45081f3a_testdoc.doc: No module named 'docx2txt' +2025-12-15 10:10:14,603 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 6: No module named 'docx2txt' +2025-12-15 10:10:14,610 - root - INFO - Clearing user context +2025-12-15 10:10:16,919 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:10:16,920 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:16,920 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:10:16,920 - root - INFO - Clearing user context +2025-12-15 10:10:16,920 - root - INFO - User context cleared before authentication +2025-12-15 10:10:16,920 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:16,921 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:16,922 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:16,922 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:16,922 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:16,925 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:16,925 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:16,926 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:16,927 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:16,928 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:16,928 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:16,943 - root - INFO - Clearing user context +2025-12-15 10:10:20,961 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:10:20,962 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:20,962 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:10:20,962 - root - INFO - Clearing user context +2025-12-15 10:10:20,962 - root - INFO - User context cleared before authentication +2025-12-15 10:10:20,963 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:20,965 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:20,965 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:20,965 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:20,966 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:20,968 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:20,968 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:20,969 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:20,970 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:20,971 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:20,971 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:20,977 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf +2025-12-15 10:10:21,103 - th_agenter.services.document_processor - INFO - 成功删除 4 个文档块: document_id=5 +2025-12-15 10:10:21,104 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:10:21,118 - th_agenter.services.document - INFO - Deleted document: 6cfe36cf-273c-4c3f-b8cf-2f9dea0b4790_testpdf.pdf (ID: 5) +2025-12-15 10:10:21,121 - root - INFO - Clearing user context +2025-12-15 10:10:21,434 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:10:21,434 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:21,434 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:10:21,434 - root - INFO - Clearing user context +2025-12-15 10:10:21,435 - root - INFO - User context cleared before authentication +2025-12-15 10:10:21,435 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:21,436 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:21,436 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:21,436 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:21,436 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:21,437 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:21,438 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:21,438 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:21,439 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:21,439 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:21,440 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:21,443 - root - INFO - Clearing user context +2025-12-15 10:10:27,045 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 10:10:27,046 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:27,046 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 10:10:27,046 - root - INFO - Clearing user context +2025-12-15 10:10:27,046 - root - INFO - User context cleared before authentication +2025-12-15 10:10:27,047 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:27,049 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:27,049 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:27,049 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:27,050 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:27,052 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:27,053 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:27,055 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:27,057 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:27,057 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:27,058 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:27,870 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:10:28,273 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 10:10:28,275 - root - INFO - Clearing user context +2025-12-15 10:10:32,748 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/6 +2025-12-15 10:10:32,748 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/6 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:32,748 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/6 +2025-12-15 10:10:32,749 - root - INFO - Clearing user context +2025-12-15 10:10:32,749 - root - INFO - User context cleared before authentication +2025-12-15 10:10:32,749 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:32,750 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:32,750 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:32,750 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:32,751 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:32,751 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:32,752 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:32,752 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:32,752 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:32,753 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:32,753 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:32,754 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9a5bf938-37f8-4726-a095-841e45081f3a_testdoc.doc +2025-12-15 10:10:32,819 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=6 +2025-12-15 10:10:32,820 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=6 +2025-12-15 10:10:32,833 - th_agenter.services.document - INFO - Deleted document: 9a5bf938-37f8-4726-a095-841e45081f3a_testdoc.doc (ID: 6) +2025-12-15 10:10:32,834 - root - INFO - Clearing user context +2025-12-15 10:10:33,015 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:10:33,016 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:10:33,016 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:10:33,017 - root - INFO - Clearing user context +2025-12-15 10:10:33,018 - root - INFO - User context cleared before authentication +2025-12-15 10:10:33,018 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:10:33,020 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:10:33,020 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:33,020 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:10:33,021 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:10:33,023 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:10:33,024 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:10:33,024 - root - INFO - Looking for user with username: admin +2025-12-15 10:10:33,025 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:10:33,026 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:10:33,026 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:10:33,033 - root - INFO - Clearing user context +2025-12-15 10:11:19,728 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:11:19,729 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:19,730 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:19,730 - root - INFO - Clearing user context +2025-12-15 10:11:19,730 - root - INFO - User context cleared before authentication +2025-12-15 10:11:19,731 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:19,733 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:19,733 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:19,733 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:19,734 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:19,741 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:19,741 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:19,742 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:19,745 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:19,745 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:19,746 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:19,765 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:11:19,769 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\13410d79-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc +2025-12-15 10:11:19,772 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\13410d79-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc: No module named 'docx2txt' +2025-12-15 10:11:19,772 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: No module named 'docx2txt' +2025-12-15 10:11:19,777 - root - INFO - Clearing user context +2025-12-15 10:11:22,105 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:11:22,106 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:22,106 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:22,106 - root - INFO - Clearing user context +2025-12-15 10:11:22,106 - root - INFO - User context cleared before authentication +2025-12-15 10:11:22,106 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:22,107 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:22,108 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:22,108 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:22,108 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:22,109 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:22,109 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:22,110 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:22,110 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:22,110 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:22,111 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:22,113 - root - INFO - Clearing user context +2025-12-15 10:11:27,768 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 10:11:27,769 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:27,769 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 10:11:27,769 - root - INFO - Clearing user context +2025-12-15 10:11:27,770 - root - INFO - User context cleared before authentication +2025-12-15 10:11:27,770 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:27,772 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:27,772 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:27,772 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:27,773 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:27,776 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:27,778 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:27,779 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:27,781 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:27,781 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:27,782 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:28,195 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:11:28,255 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 10:11:28,256 - root - INFO - Clearing user context +2025-12-15 10:11:44,078 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:11:44,079 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:44,079 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:44,080 - root - INFO - Clearing user context +2025-12-15 10:11:44,081 - root - INFO - User context cleared before authentication +2025-12-15 10:11:44,081 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:44,083 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:44,084 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:44,085 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:44,085 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:44,090 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:44,092 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:44,093 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:44,094 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:44,095 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:44,095 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:44,117 - th_agenter.services.document - INFO - Uploaded document: testpdf.pdf to KB 7 (Doc ID: 6) +2025-12-15 10:11:44,120 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 6, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf +2025-12-15 10:11:44,719 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf, 页数: 2 +2025-12-15 10:11:44,726 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-15 10:11:44,727 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 10:11:44,727 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 4 个文档块 +2025-12-15 10:11:45,025 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:11:45,190 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:11:45,348 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:11:45,494 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 10:11:45,570 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-15 10:11:45,587 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 6, 'status': 'success', 'chunks_count': 4, 'message': '文档处理完成'} +2025-12-15 10:11:45,607 - th_agenter.services.document - INFO - Processed document: 7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf (ID: 6) +2025-12-15 10:11:45,611 - root - INFO - Clearing user context +2025-12-15 10:11:47,622 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:11:47,623 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:47,623 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:47,623 - root - INFO - Clearing user context +2025-12-15 10:11:47,624 - root - INFO - User context cleared before authentication +2025-12-15 10:11:47,624 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:47,627 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:47,630 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:47,631 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:47,631 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:47,636 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:47,637 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:47,638 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:47,640 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:47,640 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:47,640 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:47,645 - root - INFO - Clearing user context +2025-12-15 10:11:51,234 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:11:51,234 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:51,235 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:11:51,235 - root - INFO - Clearing user context +2025-12-15 10:11:51,236 - root - INFO - User context cleared before authentication +2025-12-15 10:11:51,236 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:51,239 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:51,239 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:51,240 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:51,240 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:51,243 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:51,244 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:51,244 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:51,245 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:51,246 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:51,246 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:51,249 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\13410d79-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc +2025-12-15 10:11:51,312 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:11:51,313 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:11:51,324 - th_agenter.services.document - INFO - Deleted document: 13410d79-ff5c-4cca-a88f-afdd4a3c326f_testdoc1.doc (ID: 5) +2025-12-15 10:11:51,327 - root - INFO - Clearing user context +2025-12-15 10:11:51,501 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:11:51,501 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:51,501 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:51,501 - root - INFO - Clearing user context +2025-12-15 10:11:51,502 - root - INFO - User context cleared before authentication +2025-12-15 10:11:51,502 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:51,503 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:51,503 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:51,503 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:51,503 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:51,504 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:51,505 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:51,505 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:51,506 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:51,506 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:51,506 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:51,509 - root - INFO - Clearing user context +2025-12-15 10:11:58,225 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/6 +2025-12-15 10:11:58,226 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/6 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:58,226 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/6 +2025-12-15 10:11:58,227 - root - INFO - Clearing user context +2025-12-15 10:11:58,227 - root - INFO - User context cleared before authentication +2025-12-15 10:11:58,227 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:58,229 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:58,230 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:58,230 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:58,231 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:58,233 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:58,234 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:58,234 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:58,235 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:58,236 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:58,236 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:58,239 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf +2025-12-15 10:11:58,317 - th_agenter.services.document_processor - INFO - 成功删除 4 个文档块: document_id=6 +2025-12-15 10:11:58,318 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=6 +2025-12-15 10:11:58,332 - th_agenter.services.document - INFO - Deleted document: 7932d340-5bf8-4b2c-8c33-2d824baa4d65_testpdf.pdf (ID: 6) +2025-12-15 10:11:58,333 - root - INFO - Clearing user context +2025-12-15 10:11:58,656 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:11:58,656 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:11:58,657 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:11:58,657 - root - INFO - Clearing user context +2025-12-15 10:11:58,657 - root - INFO - User context cleared before authentication +2025-12-15 10:11:58,658 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:11:58,659 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:11:58,659 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:58,659 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:11:58,659 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:11:58,662 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:11:58,662 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:11:58,663 - root - INFO - Looking for user with username: admin +2025-12-15 10:11:58,664 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:11:58,665 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:11:58,665 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:11:58,671 - root - INFO - Clearing user context +2025-12-15 10:12:01,457 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:12:01,459 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:12:01,460 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:12:01,461 - root - INFO - Clearing user context +2025-12-15 10:12:01,461 - root - INFO - User context cleared before authentication +2025-12-15 10:12:01,462 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:12:01,464 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:12:01,465 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:12:01,466 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:12:01,467 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:12:01,470 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:12:01,471 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:12:01,471 - root - INFO - Looking for user with username: admin +2025-12-15 10:12:01,473 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:12:01,473 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:12:01,474 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:12:01,497 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:12:01,501 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\b3379b05-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc +2025-12-15 10:12:01,504 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\b3379b05-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc: No module named 'docx2txt' +2025-12-15 10:12:01,505 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: No module named 'docx2txt' +2025-12-15 10:12:01,509 - root - INFO - Clearing user context +2025-12-15 10:12:03,840 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:12:03,841 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:12:03,841 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:12:03,842 - root - INFO - Clearing user context +2025-12-15 10:12:03,842 - root - INFO - User context cleared before authentication +2025-12-15 10:12:03,842 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:12:03,843 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:12:03,844 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:12:03,844 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:12:03,844 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:12:03,845 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:12:03,845 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:12:03,845 - root - INFO - Looking for user with username: admin +2025-12-15 10:12:03,846 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:12:03,846 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:12:03,846 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:12:03,850 - root - INFO - Clearing user context +2025-12-15 10:14:58,558 - root - INFO - Logging configured successfully +2025-12-15 10:14:58,722 - root - INFO - Logging configured successfully +2025-12-15 10:14:58,865 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:14:58,879 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:14:58,884 - root - INFO - Database tables created +2025-12-15 10:14:58,884 - root - INFO - Database initialized +2025-12-15 10:15:09,264 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 10:15:09,266 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:09,267 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 10:15:09,268 - root - INFO - Clearing user context +2025-12-15 10:15:09,268 - root - INFO - User context cleared before authentication +2025-12-15 10:15:09,268 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:09,316 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:09,316 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,317 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:09,317 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:09,320 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:09,320 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:09,321 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:09,322 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:09,322 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,322 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:09,327 - root - INFO - Clearing user context +2025-12-15 10:15:09,334 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 10:15:09,334 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:09,334 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 10:15:09,334 - root - INFO - Clearing user context +2025-12-15 10:15:09,335 - root - INFO - User context cleared before authentication +2025-12-15 10:15:09,335 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:09,336 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:09,336 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,336 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:09,336 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:09,340 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:09,341 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:09,341 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:09,343 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:09,344 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,345 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:09,357 - root - INFO - Clearing user context +2025-12-15 10:15:09,760 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 10:15:09,760 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:09,760 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 10:15:09,760 - root - INFO - Clearing user context +2025-12-15 10:15:09,761 - root - INFO - User context cleared before authentication +2025-12-15 10:15:09,761 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:09,765 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:09,776 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,777 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:09,778 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:09,780 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 10:15:09,783 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:09,784 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 10:15:09,785 - root - INFO - Clearing user context +2025-12-15 10:15:09,787 - root - INFO - User context cleared before authentication +2025-12-15 10:15:09,789 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:09,792 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:09,793 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,793 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:09,794 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:09,808 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:09,809 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:09,810 - root - INFO - Clearing user context +2025-12-15 10:15:09,811 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:09,815 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:09,816 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,817 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:09,855 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 10:15:09,855 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:09,855 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 10:15:09,856 - root - INFO - Clearing user context +2025-12-15 10:15:09,856 - root - INFO - User context cleared before authentication +2025-12-15 10:15:09,856 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:09,858 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:09,859 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:09,859 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:09,859 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:09,861 - root - INFO - Clearing user context +2025-12-15 10:15:09,866 - root - INFO - Clearing user context +2025-12-15 10:15:54,044 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 10:15:54,044 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:54,044 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 10:15:54,044 - root - INFO - Clearing user context +2025-12-15 10:15:54,044 - root - INFO - User context cleared before authentication +2025-12-15 10:15:54,045 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:54,047 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:54,048 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,049 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:54,049 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:54,052 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:54,052 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:54,053 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:54,054 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:54,055 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,055 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:54,057 - root - INFO - Clearing user context +2025-12-15 10:15:54,261 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 10:15:54,261 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:54,262 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 10:15:54,262 - root - INFO - Clearing user context +2025-12-15 10:15:54,262 - root - INFO - User context cleared before authentication +2025-12-15 10:15:54,262 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:54,263 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:54,263 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,263 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:54,263 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:54,264 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:54,265 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:54,265 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:54,266 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:54,267 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,267 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:54,270 - root - INFO - Clearing user context +2025-12-15 10:15:54,382 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 10:15:54,384 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:54,385 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 10:15:54,385 - root - INFO - Clearing user context +2025-12-15 10:15:54,386 - root - INFO - User context cleared before authentication +2025-12-15 10:15:54,387 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:54,391 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:54,392 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,393 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:54,393 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:54,396 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 10:15:54,396 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:54,401 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 10:15:54,402 - root - INFO - Clearing user context +2025-12-15 10:15:54,403 - root - INFO - User context cleared before authentication +2025-12-15 10:15:54,403 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:54,406 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:54,407 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,409 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:54,410 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:54,422 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:54,424 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:54,424 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:54,425 - root - INFO - Clearing user context +2025-12-15 10:15:54,426 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:54,427 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,428 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:54,452 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 10:15:54,453 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:54,454 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 10:15:54,454 - root - INFO - Clearing user context +2025-12-15 10:15:54,455 - root - INFO - User context cleared before authentication +2025-12-15 10:15:54,456 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:54,459 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:54,461 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:54,462 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:54,466 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:54,468 - root - INFO - Clearing user context +2025-12-15 10:15:54,474 - root - INFO - Clearing user context +2025-12-15 10:15:55,457 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:15:55,458 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:55,458 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:15:55,459 - root - INFO - Clearing user context +2025-12-15 10:15:55,459 - root - INFO - User context cleared before authentication +2025-12-15 10:15:55,459 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:55,461 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:55,462 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:55,462 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:55,463 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:55,466 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:55,467 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:55,468 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:55,469 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:55,470 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:55,470 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:55,476 - root - INFO - Clearing user context +2025-12-15 10:15:58,497 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:15:58,498 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:58,498 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:15:58,498 - root - INFO - Clearing user context +2025-12-15 10:15:58,499 - root - INFO - User context cleared before authentication +2025-12-15 10:15:58,499 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:58,501 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:58,501 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:58,502 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:58,502 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:58,503 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:58,504 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:58,504 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:58,505 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:58,505 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:58,506 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:58,517 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\b3379b05-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc +2025-12-15 10:15:58,527 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:15:58,684 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:15:58,696 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:15:58,775 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:15:58,775 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:15:58,792 - th_agenter.services.document - INFO - Deleted document: b3379b05-ba6c-4b6d-bb76-48a9d6153eb8_testdoc1.doc (ID: 5) +2025-12-15 10:15:58,804 - root - INFO - Clearing user context +2025-12-15 10:15:58,815 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:15:58,817 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:15:58,818 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:15:58,818 - root - INFO - Clearing user context +2025-12-15 10:15:58,818 - root - INFO - User context cleared before authentication +2025-12-15 10:15:58,818 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:15:58,820 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:15:58,820 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:58,820 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:15:58,821 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:15:58,823 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:15:58,823 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:15:58,823 - root - INFO - Looking for user with username: admin +2025-12-15 10:15:58,824 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:15:58,825 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:15:58,825 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:15:58,828 - root - INFO - Clearing user context +2025-12-15 10:16:02,236 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:16:02,236 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:16:02,236 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:16:02,237 - root - INFO - Clearing user context +2025-12-15 10:16:02,237 - root - INFO - User context cleared before authentication +2025-12-15 10:16:02,237 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:16:02,240 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:16:02,240 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:16:02,240 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:16:02,241 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:16:02,245 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:16:02,245 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:16:02,246 - root - INFO - Looking for user with username: admin +2025-12-15 10:16:02,247 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:16:02,247 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:16:02,247 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:16:02,423 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:16:02,427 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\ea34fe48-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc +2025-12-15 10:16:02,431 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\ea34fe48-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc: No module named 'docx2txt' +2025-12-15 10:16:02,432 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: No module named 'docx2txt' +2025-12-15 10:16:02,443 - root - INFO - Clearing user context +2025-12-15 10:16:04,473 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:16:04,478 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:16:04,478 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:16:04,478 - root - INFO - Clearing user context +2025-12-15 10:16:04,478 - root - INFO - User context cleared before authentication +2025-12-15 10:16:04,478 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:16:04,480 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:16:04,480 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:16:04,481 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:16:04,481 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:16:04,484 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:16:04,494 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:16:04,495 - root - INFO - Looking for user with username: admin +2025-12-15 10:16:04,497 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:16:04,497 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:16:04,498 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:16:04,501 - root - INFO - Clearing user context +2025-12-15 10:18:19,458 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:18:30,892 - root - INFO - Logging configured successfully +2025-12-15 10:18:31,031 - root - INFO - Logging configured successfully +2025-12-15 10:18:31,150 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:18:31,163 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:18:31,167 - root - INFO - Database tables created +2025-12-15 10:18:31,167 - root - INFO - Database initialized +2025-12-15 10:18:50,828 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:19:01,776 - root - INFO - Logging configured successfully +2025-12-15 10:19:01,921 - root - INFO - Logging configured successfully +2025-12-15 10:19:02,043 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:19:02,053 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:19:02,057 - root - INFO - Database tables created +2025-12-15 10:19:02,058 - root - INFO - Database initialized +2025-12-15 10:19:12,937 - root - INFO - Logging configured successfully +2025-12-15 10:19:13,090 - root - INFO - Logging configured successfully +2025-12-15 10:19:13,226 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:19:13,236 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:19:13,241 - root - INFO - Database tables created +2025-12-15 10:19:13,241 - root - INFO - Database initialized +2025-12-15 10:19:52,316 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:20:02,838 - root - INFO - Logging configured successfully +2025-12-15 10:20:02,968 - root - INFO - Logging configured successfully +2025-12-15 10:20:03,081 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:20:03,089 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:20:03,094 - root - INFO - Database tables created +2025-12-15 10:20:03,094 - root - INFO - Database initialized +2025-12-15 10:20:42,623 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:20:42,625 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:20:42,625 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:20:42,625 - root - INFO - Clearing user context +2025-12-15 10:20:42,626 - root - INFO - User context cleared before authentication +2025-12-15 10:20:42,626 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:20:42,652 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:20:42,653 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:42,653 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:20:42,653 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:20:42,656 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:20:42,657 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:20:42,657 - root - INFO - Looking for user with username: admin +2025-12-15 10:20:42,658 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:20:42,658 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:42,659 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:20:42,667 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\ea34fe48-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc +2025-12-15 10:20:42,673 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:20:42,746 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:20:42,749 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:20:42,816 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:20:42,816 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:20:42,827 - th_agenter.services.document - INFO - Deleted document: ea34fe48-b70f-46c8-bb7e-5dabf874deb1_testdoc1.doc (ID: 5) +2025-12-15 10:20:42,829 - root - INFO - Clearing user context +2025-12-15 10:20:42,886 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:20:42,886 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:20:42,886 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:20:42,887 - root - INFO - Clearing user context +2025-12-15 10:20:42,887 - root - INFO - User context cleared before authentication +2025-12-15 10:20:42,887 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:20:42,889 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:20:42,889 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:42,889 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:20:42,889 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:20:42,890 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:20:42,891 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:20:42,891 - root - INFO - Looking for user with username: admin +2025-12-15 10:20:42,892 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:20:42,892 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:42,893 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:20:42,900 - root - INFO - Clearing user context +2025-12-15 10:20:49,222 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:20:49,222 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:20:49,222 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:20:49,222 - root - INFO - Clearing user context +2025-12-15 10:20:49,223 - root - INFO - User context cleared before authentication +2025-12-15 10:20:49,223 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:20:49,225 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:20:49,225 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:49,225 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:20:49,226 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:20:49,228 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:20:49,229 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:20:49,229 - root - INFO - Looking for user with username: admin +2025-12-15 10:20:49,230 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:20:49,231 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:49,231 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:20:49,321 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:20:49,324 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9f1f03f8-7e00-4527-9d35-297be432e7f2_testdoc1.doc +2025-12-15 10:20:49,326 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9f1f03f8-7e00-4527-9d35-297be432e7f2_testdoc1.doc: No module named 'docx2txt' +2025-12-15 10:20:49,326 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: No module named 'docx2txt' +2025-12-15 10:20:49,330 - root - INFO - Clearing user context +2025-12-15 10:20:51,659 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:20:51,659 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:20:51,659 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:20:51,660 - root - INFO - Clearing user context +2025-12-15 10:20:51,660 - root - INFO - User context cleared before authentication +2025-12-15 10:20:51,660 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:20:51,662 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:20:51,662 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:51,662 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:20:51,662 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:20:51,664 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:20:51,665 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:20:51,665 - root - INFO - Looking for user with username: admin +2025-12-15 10:20:51,666 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:20:51,666 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:20:51,666 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:20:51,670 - root - INFO - Clearing user context +2025-12-15 10:21:31,648 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:21:31,649 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:21:31,649 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:21:31,650 - root - INFO - Clearing user context +2025-12-15 10:21:31,650 - root - INFO - User context cleared before authentication +2025-12-15 10:21:31,650 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:21:31,651 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:21:31,652 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:21:31,652 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:21:31,653 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:21:31,655 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:21:31,655 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:21:31,656 - root - INFO - Looking for user with username: admin +2025-12-15 10:21:31,657 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:21:31,657 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:21:31,658 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:21:31,660 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\9f1f03f8-7e00-4527-9d35-297be432e7f2_testdoc1.doc +2025-12-15 10:21:31,723 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:21:31,725 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:21:31,739 - th_agenter.services.document - INFO - Deleted document: 9f1f03f8-7e00-4527-9d35-297be432e7f2_testdoc1.doc (ID: 5) +2025-12-15 10:21:31,741 - root - INFO - Clearing user context +2025-12-15 10:21:32,057 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:21:32,058 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:21:32,058 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:21:32,058 - root - INFO - Clearing user context +2025-12-15 10:21:32,058 - root - INFO - User context cleared before authentication +2025-12-15 10:21:32,059 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:21:32,060 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:21:32,061 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:21:32,061 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:21:32,061 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:21:32,064 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:21:32,064 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:21:32,065 - root - INFO - Looking for user with username: admin +2025-12-15 10:21:32,066 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:21:32,066 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:21:32,067 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:21:32,072 - root - INFO - Clearing user context +2025-12-15 10:23:54,102 - root - INFO - Logging configured successfully +2025-12-15 10:23:54,256 - root - INFO - Logging configured successfully +2025-12-15 10:23:54,393 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:23:54,402 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:23:54,407 - root - INFO - Database tables created +2025-12-15 10:23:54,408 - root - INFO - Database initialized +2025-12-15 10:24:15,453 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 10:24:15,454 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:15,454 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 10:24:15,454 - root - INFO - Clearing user context +2025-12-15 10:24:15,455 - root - INFO - User context cleared before authentication +2025-12-15 10:24:15,455 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:15,498 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:15,498 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:15,499 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:15,499 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:15,504 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:15,505 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:15,505 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:15,506 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:15,507 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:15,507 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:15,513 - root - INFO - Clearing user context +2025-12-15 10:24:15,524 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 10:24:15,524 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:15,525 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 10:24:15,525 - root - INFO - Clearing user context +2025-12-15 10:24:15,526 - root - INFO - User context cleared before authentication +2025-12-15 10:24:15,526 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:15,528 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:15,529 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:15,529 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:15,529 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:15,532 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:15,532 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:15,533 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:15,535 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:15,535 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:15,535 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:15,545 - root - INFO - Clearing user context +2025-12-15 10:24:16,077 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 10:24:16,078 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:16,078 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 10:24:16,079 - root - INFO - Clearing user context +2025-12-15 10:24:16,079 - root - INFO - User context cleared before authentication +2025-12-15 10:24:16,080 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:16,082 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:16,083 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:16,084 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:16,084 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:16,086 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 10:24:16,087 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:16,087 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 10:24:16,088 - root - INFO - Clearing user context +2025-12-15 10:24:16,088 - root - INFO - User context cleared before authentication +2025-12-15 10:24:16,089 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:16,091 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:16,092 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:16,092 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:16,093 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:16,098 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:16,104 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:16,106 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:16,109 - root - INFO - Clearing user context +2025-12-15 10:24:16,112 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:16,112 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:16,113 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:16,148 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 10:24:16,148 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:16,149 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 10:24:16,149 - root - INFO - Clearing user context +2025-12-15 10:24:16,150 - root - INFO - User context cleared before authentication +2025-12-15 10:24:16,150 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:16,152 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:16,152 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:16,153 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:16,153 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:16,155 - root - INFO - Clearing user context +2025-12-15 10:24:16,161 - root - INFO - Clearing user context +2025-12-15 10:24:18,270 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 10:24:18,271 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:18,272 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 10:24:18,272 - root - INFO - Clearing user context +2025-12-15 10:24:18,273 - root - INFO - User context cleared before authentication +2025-12-15 10:24:18,273 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:18,275 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:18,275 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,276 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:18,276 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:18,278 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:18,278 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:18,279 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:18,281 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:18,281 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,281 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:18,284 - root - INFO - Clearing user context +2025-12-15 10:24:18,291 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 10:24:18,291 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:18,291 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 10:24:18,292 - root - INFO - Clearing user context +2025-12-15 10:24:18,292 - root - INFO - User context cleared before authentication +2025-12-15 10:24:18,293 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:18,295 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:18,295 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,296 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:18,296 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:18,299 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:18,299 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:18,299 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:18,300 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:18,301 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,301 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:18,305 - root - INFO - Clearing user context +2025-12-15 10:24:18,411 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 10:24:18,411 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:18,412 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 10:24:18,412 - root - INFO - Clearing user context +2025-12-15 10:24:18,413 - root - INFO - User context cleared before authentication +2025-12-15 10:24:18,413 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:18,414 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:18,415 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,416 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:18,416 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:18,419 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:18,419 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:18,420 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:18,421 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:18,421 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,422 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:18,436 - root - INFO - Clearing user context +2025-12-15 10:24:18,528 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 10:24:18,528 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:18,529 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 10:24:18,529 - root - INFO - Clearing user context +2025-12-15 10:24:18,530 - root - INFO - User context cleared before authentication +2025-12-15 10:24:18,530 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:18,532 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:18,532 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,533 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:18,533 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:18,538 - root - INFO - Clearing user context +2025-12-15 10:24:18,546 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 10:24:18,547 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:18,547 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 10:24:18,548 - root - INFO - Clearing user context +2025-12-15 10:24:18,548 - root - INFO - User context cleared before authentication +2025-12-15 10:24:18,548 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:18,550 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:18,551 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:18,551 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:18,551 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:18,556 - root - INFO - Clearing user context +2025-12-15 10:24:26,773 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:24:26,774 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:26,774 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:24:26,774 - root - INFO - Clearing user context +2025-12-15 10:24:26,775 - root - INFO - User context cleared before authentication +2025-12-15 10:24:26,776 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:26,778 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:26,778 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:26,778 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:26,779 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:26,781 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:26,782 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:26,782 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:26,784 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:26,785 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:26,785 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:26,793 - root - INFO - Clearing user context +2025-12-15 10:24:28,895 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:24:28,896 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:28,896 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:24:28,897 - root - INFO - Clearing user context +2025-12-15 10:24:28,897 - root - INFO - User context cleared before authentication +2025-12-15 10:24:28,897 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:28,899 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:28,899 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:28,900 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:28,900 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:28,902 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:28,902 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:28,903 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:28,904 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:28,904 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:28,905 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:28,909 - root - INFO - Clearing user context +2025-12-15 10:24:31,745 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:24:31,746 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:31,746 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:24:31,746 - root - INFO - Clearing user context +2025-12-15 10:24:31,746 - root - INFO - User context cleared before authentication +2025-12-15 10:24:31,747 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:31,748 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:31,748 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:31,748 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:31,748 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:31,750 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:31,751 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:31,751 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:31,752 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:31,752 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:31,753 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:31,835 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:24:31,841 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:24:31,911 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:24:31,916 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:24:31,918 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4af161ff-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc +2025-12-15 10:24:31,920 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4af161ff-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc: No module named 'docx2txt' +2025-12-15 10:24:31,920 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: No module named 'docx2txt' +2025-12-15 10:24:31,924 - root - INFO - Clearing user context +2025-12-15 10:24:34,243 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:24:34,244 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:24:34,244 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:24:34,244 - root - INFO - Clearing user context +2025-12-15 10:24:34,245 - root - INFO - User context cleared before authentication +2025-12-15 10:24:34,245 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:24:34,246 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:24:34,247 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:34,247 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:24:34,247 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:24:34,249 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:24:34,249 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:24:34,249 - root - INFO - Looking for user with username: admin +2025-12-15 10:24:34,251 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:24:34,251 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:24:34,251 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:24:34,254 - root - INFO - Clearing user context +2025-12-15 10:26:03,636 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:26:14,554 - root - INFO - Logging configured successfully +2025-12-15 10:26:14,697 - root - INFO - Logging configured successfully +2025-12-15 10:26:14,835 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:26:14,846 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:26:14,851 - root - INFO - Database tables created +2025-12-15 10:26:14,851 - root - INFO - Database initialized +2025-12-15 10:26:40,328 - root - INFO - Logging configured successfully +2025-12-15 10:26:40,468 - root - INFO - Logging configured successfully +2025-12-15 10:26:40,592 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:26:40,602 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:26:40,606 - root - INFO - Database tables created +2025-12-15 10:26:40,607 - root - INFO - Database initialized +2025-12-15 10:26:51,861 - root - INFO - Logging configured successfully +2025-12-15 10:26:52,000 - root - INFO - Logging configured successfully +2025-12-15 10:26:52,121 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:26:52,131 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:26:52,136 - root - INFO - Database tables created +2025-12-15 10:26:52,137 - root - INFO - Database initialized +2025-12-15 10:28:04,707 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:28:15,178 - root - INFO - Logging configured successfully +2025-12-15 10:28:15,354 - root - INFO - Logging configured successfully +2025-12-15 10:28:15,518 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:28:15,530 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:28:15,535 - root - INFO - Database tables created +2025-12-15 10:28:15,536 - root - INFO - Database initialized +2025-12-15 10:28:32,876 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:28:45,451 - root - INFO - Logging configured successfully +2025-12-15 10:28:45,600 - root - INFO - Logging configured successfully +2025-12-15 10:28:45,722 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:28:45,732 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:28:45,736 - root - INFO - Database tables created +2025-12-15 10:28:45,736 - root - INFO - Database initialized +2025-12-15 10:28:56,713 - root - INFO - Logging configured successfully +2025-12-15 10:28:56,880 - root - INFO - Logging configured successfully +2025-12-15 10:28:57,026 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:28:57,036 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:28:57,040 - root - INFO - Database tables created +2025-12-15 10:28:57,041 - root - INFO - Database initialized +2025-12-15 10:31:13,227 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:31:24,155 - root - INFO - Logging configured successfully +2025-12-15 10:31:24,296 - root - INFO - Logging configured successfully +2025-12-15 10:31:24,411 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:31:24,420 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:31:24,423 - root - INFO - Database tables created +2025-12-15 10:31:24,423 - root - INFO - Database initialized +2025-12-15 10:31:35,278 - root - INFO - Logging configured successfully +2025-12-15 10:31:35,423 - root - INFO - Logging configured successfully +2025-12-15 10:31:35,549 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:31:35,559 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:31:35,564 - root - INFO - Database tables created +2025-12-15 10:31:35,564 - root - INFO - Database initialized +2025-12-15 10:31:43,870 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:31:53,906 - root - INFO - Logging configured successfully +2025-12-15 10:31:54,051 - root - INFO - Logging configured successfully +2025-12-15 10:31:54,173 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:31:54,183 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:31:54,187 - root - INFO - Database tables created +2025-12-15 10:31:54,187 - root - INFO - Database initialized +2025-12-15 10:32:04,415 - root - INFO - Logging configured successfully +2025-12-15 10:32:04,553 - root - INFO - Logging configured successfully +2025-12-15 10:32:04,673 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:32:04,683 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:32:04,687 - root - INFO - Database tables created +2025-12-15 10:32:04,687 - root - INFO - Database initialized +2025-12-15 10:32:25,410 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:33:25,425 - root - INFO - Logging configured successfully +2025-12-15 10:33:25,579 - root - INFO - Logging configured successfully +2025-12-15 10:33:25,711 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:33:25,720 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:33:25,725 - root - INFO - Database tables created +2025-12-15 10:33:25,725 - root - INFO - Database initialized +2025-12-15 10:33:31,726 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:33:31,726 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:33:31,727 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:33:31,728 - root - INFO - Clearing user context +2025-12-15 10:33:31,728 - root - INFO - User context cleared before authentication +2025-12-15 10:33:31,729 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:33:31,794 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:33:31,795 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:31,796 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:33:31,797 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:33:31,801 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:33:31,802 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:33:31,803 - root - INFO - Looking for user with username: admin +2025-12-15 10:33:31,804 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:33:31,804 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:31,804 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:33:31,815 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4af161ff-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc +2025-12-15 10:33:31,820 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:33:32,004 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:33:32,011 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:33:32,109 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:33:32,122 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:33:32,143 - th_agenter.services.document - INFO - Deleted document: 4af161ff-0375-4ec8-ae32-96a8d1fc1af9_testdoc1.doc (ID: 5) +2025-12-15 10:33:32,146 - root - INFO - Clearing user context +2025-12-15 10:33:32,162 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:33:32,163 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:33:32,164 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:33:32,164 - root - INFO - Clearing user context +2025-12-15 10:33:32,165 - root - INFO - User context cleared before authentication +2025-12-15 10:33:32,166 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:33:32,169 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:33:32,169 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:32,169 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:33:32,170 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:33:32,174 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:33:32,174 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:33:32,176 - root - INFO - Looking for user with username: admin +2025-12-15 10:33:32,177 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:33:32,179 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:32,179 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:33:32,195 - root - INFO - Clearing user context +2025-12-15 10:33:52,190 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:33:52,190 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:33:52,191 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:33:52,191 - root - INFO - Clearing user context +2025-12-15 10:33:52,191 - root - INFO - User context cleared before authentication +2025-12-15 10:33:52,191 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:33:52,193 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:33:52,194 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:52,195 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:33:52,195 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:33:52,198 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:33:52,199 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:33:52,199 - root - INFO - Looking for user with username: admin +2025-12-15 10:33:52,204 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:33:52,204 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:52,205 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:33:52,384 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:33:52,388 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f5f22616-05d8-4635-8923-548fd4329970_testdoc1.doc +2025-12-15 10:33:52,388 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f5f22616-05d8-4635-8923-548fd4329970_testdoc1.doc: local variable 'DOCX2TXT_AVAILABLE' referenced before assignment +2025-12-15 10:33:52,389 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: local variable 'DOCX2TXT_AVAILABLE' referenced before assignment +2025-12-15 10:33:52,392 - root - INFO - Clearing user context +2025-12-15 10:33:54,408 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:33:54,411 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:33:54,412 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:33:54,412 - root - INFO - Clearing user context +2025-12-15 10:33:54,413 - root - INFO - User context cleared before authentication +2025-12-15 10:33:54,414 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:33:54,415 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:33:54,415 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:54,418 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:33:54,419 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:33:54,423 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:33:54,425 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:33:54,426 - root - INFO - Looking for user with username: admin +2025-12-15 10:33:54,430 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:33:54,431 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:33:54,431 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:33:54,437 - root - INFO - Clearing user context +2025-12-15 10:34:48,522 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:34:59,086 - root - INFO - Logging configured successfully +2025-12-15 10:34:59,240 - root - INFO - Logging configured successfully +2025-12-15 10:34:59,363 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:34:59,373 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:34:59,378 - root - INFO - Database tables created +2025-12-15 10:34:59,378 - root - INFO - Database initialized +2025-12-15 10:35:09,324 - root - INFO - Logging configured successfully +2025-12-15 10:35:09,470 - root - INFO - Logging configured successfully +2025-12-15 10:35:09,596 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:35:09,605 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:35:09,610 - root - INFO - Database tables created +2025-12-15 10:35:09,610 - root - INFO - Database initialized +2025-12-15 10:35:30,634 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:35:39,696 - root - INFO - Logging configured successfully +2025-12-15 10:35:39,826 - root - INFO - Logging configured successfully +2025-12-15 10:35:39,928 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:35:39,937 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:35:39,941 - root - INFO - Database tables created +2025-12-15 10:35:39,941 - root - INFO - Database initialized +2025-12-15 10:35:49,925 - root - INFO - Logging configured successfully +2025-12-15 10:35:50,119 - root - INFO - Logging configured successfully +2025-12-15 10:35:50,280 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:35:50,293 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:35:50,298 - root - INFO - Database tables created +2025-12-15 10:35:50,298 - root - INFO - Database initialized +2025-12-15 10:36:00,551 - root - INFO - Logging configured successfully +2025-12-15 10:36:00,701 - root - INFO - Logging configured successfully +2025-12-15 10:36:00,828 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:36:00,837 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:36:00,843 - root - INFO - Database tables created +2025-12-15 10:36:00,843 - root - INFO - Database initialized +2025-12-15 10:36:11,478 - root - INFO - Logging configured successfully +2025-12-15 10:36:11,635 - root - INFO - Logging configured successfully +2025-12-15 10:36:11,772 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:36:11,782 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:36:11,787 - root - INFO - Database tables created +2025-12-15 10:36:11,788 - root - INFO - Database initialized +2025-12-15 10:37:57,024 - root - INFO - Logging configured successfully +2025-12-15 10:37:57,148 - root - INFO - Logging configured successfully +2025-12-15 10:37:57,257 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:37:57,265 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:37:57,269 - root - INFO - Database tables created +2025-12-15 10:37:57,269 - root - INFO - Database initialized +2025-12-15 10:38:12,037 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:38:12,038 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:38:12,039 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:38:12,039 - root - INFO - Clearing user context +2025-12-15 10:38:12,039 - root - INFO - User context cleared before authentication +2025-12-15 10:38:12,039 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:38:12,114 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:38:12,116 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:12,116 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:38:12,116 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:38:12,121 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:38:12,122 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:38:12,122 - root - INFO - Looking for user with username: admin +2025-12-15 10:38:12,123 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:38:12,124 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:12,124 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:38:12,130 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\f5f22616-05d8-4635-8923-548fd4329970_testdoc1.doc +2025-12-15 10:38:12,137 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:38:12,248 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:38:12,254 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:38:12,347 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:38:12,348 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:38:12,358 - th_agenter.services.document - INFO - Deleted document: f5f22616-05d8-4635-8923-548fd4329970_testdoc1.doc (ID: 5) +2025-12-15 10:38:12,377 - root - INFO - Clearing user context +2025-12-15 10:38:12,384 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:38:12,384 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:38:12,385 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:38:12,385 - root - INFO - Clearing user context +2025-12-15 10:38:12,385 - root - INFO - User context cleared before authentication +2025-12-15 10:38:12,385 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:38:12,387 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:38:12,387 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:12,387 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:38:12,387 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:38:12,389 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:38:12,389 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:38:12,389 - root - INFO - Looking for user with username: admin +2025-12-15 10:38:12,390 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:38:12,390 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:12,390 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:38:12,399 - root - INFO - Clearing user context +2025-12-15 10:38:17,677 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:38:17,677 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:38:17,677 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:38:17,677 - root - INFO - Clearing user context +2025-12-15 10:38:17,678 - root - INFO - User context cleared before authentication +2025-12-15 10:38:17,678 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:38:17,679 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:38:17,679 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:17,679 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:38:17,680 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:38:17,681 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:38:17,682 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:38:17,682 - root - INFO - Looking for user with username: admin +2025-12-15 10:38:17,690 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:38:17,691 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:17,692 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:38:17,857 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 5) +2025-12-15 10:38:17,859 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc +2025-12-15 10:38:17,860 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用替代方法加载: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc +2025-12-15 10:38:17,861 - th_agenter.services.document_processor - ERROR - 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc +2025-12-15 10:38:17,867 - th_agenter.services.document_processor - ERROR - 使用python-docx加载Word文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:38:17,868 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:38:17,869 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:38:17,877 - root - INFO - Clearing user context +2025-12-15 10:38:19,904 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:38:19,905 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:38:19,905 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:38:19,906 - root - INFO - Clearing user context +2025-12-15 10:38:19,907 - root - INFO - User context cleared before authentication +2025-12-15 10:38:19,908 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:38:19,909 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:38:19,910 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:19,917 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:38:19,932 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:38:19,943 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:38:19,948 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:38:19,949 - root - INFO - Looking for user with username: admin +2025-12-15 10:38:19,960 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:38:19,961 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:38:19,961 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:38:19,967 - root - INFO - Clearing user context +2025-12-15 10:39:10,027 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:39:10,029 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:39:10,030 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:39:10,030 - root - INFO - Clearing user context +2025-12-15 10:39:10,030 - root - INFO - User context cleared before authentication +2025-12-15 10:39:10,031 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:39:10,032 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:39:10,033 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:10,033 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:39:10,034 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:39:10,036 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:39:10,036 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:39:10,037 - root - INFO - Looking for user with username: admin +2025-12-15 10:39:10,038 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:39:10,039 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:10,039 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:39:10,042 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc +2025-12-15 10:39:10,120 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:39:10,128 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:39:10,140 - th_agenter.services.document - INFO - Deleted document: 4bff529c-a1ec-4e40-b296-83b973de4ddd_testdoc1.doc (ID: 5) +2025-12-15 10:39:10,142 - root - INFO - Clearing user context +2025-12-15 10:39:10,287 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:39:10,288 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:39:10,288 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:39:10,288 - root - INFO - Clearing user context +2025-12-15 10:39:10,289 - root - INFO - User context cleared before authentication +2025-12-15 10:39:10,289 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:39:10,293 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:39:10,293 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:10,294 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:39:10,295 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:39:10,299 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:39:10,299 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:39:10,300 - root - INFO - Looking for user with username: admin +2025-12-15 10:39:10,304 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:39:10,305 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:10,306 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:39:10,313 - root - INFO - Clearing user context +2025-12-15 10:39:13,362 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:39:13,362 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:39:13,363 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:39:13,363 - root - INFO - Clearing user context +2025-12-15 10:39:13,364 - root - INFO - User context cleared before authentication +2025-12-15 10:39:13,364 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:39:13,366 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:39:13,367 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:13,367 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:39:13,368 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:39:13,372 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:39:13,373 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:39:13,373 - root - INFO - Looking for user with username: admin +2025-12-15 10:39:13,376 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:39:13,377 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:13,378 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:39:13,399 - th_agenter.services.document - INFO - Uploaded document: testdoc2.docx to KB 7 (Doc ID: 5) +2025-12-15 10:39:13,403 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx +2025-12-15 10:39:13,405 - th_agenter.services.document_processor - ERROR - 使用python-docx加载Word文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx: Package not found at 'E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx' +2025-12-15 10:39:13,406 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx: Package not found at 'E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx' +2025-12-15 10:39:13,407 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 5: Package not found at 'E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx' +2025-12-15 10:39:13,412 - root - INFO - Clearing user context +2025-12-15 10:39:15,732 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:39:15,733 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:39:15,733 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:39:15,734 - root - INFO - Clearing user context +2025-12-15 10:39:15,734 - root - INFO - User context cleared before authentication +2025-12-15 10:39:15,735 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:39:15,736 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:39:15,737 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:15,737 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:39:15,737 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:39:15,748 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:39:15,749 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:39:15,749 - root - INFO - Looking for user with username: admin +2025-12-15 10:39:15,752 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:39:15,754 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:39:15,754 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:39:15,763 - root - INFO - Clearing user context +2025-12-15 10:40:02,547 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:40:02,551 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:40:02,551 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:40:02,552 - root - INFO - Clearing user context +2025-12-15 10:40:02,553 - root - INFO - User context cleared before authentication +2025-12-15 10:40:02,553 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:40:02,560 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:40:02,563 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:40:02,564 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:40:02,566 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:40:02,572 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:40:02,572 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:40:02,573 - root - INFO - Looking for user with username: admin +2025-12-15 10:40:02,576 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:40:02,578 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:40:02,578 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:40:02,603 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 6) +2025-12-15 10:40:02,609 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 6, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc +2025-12-15 10:40:02,611 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用替代方法加载: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc +2025-12-15 10:40:02,612 - th_agenter.services.document_processor - ERROR - 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc +2025-12-15 10:40:02,612 - th_agenter.services.document_processor - ERROR - 使用python-docx加载Word文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:40:02,613 - th_agenter.services.document_processor - ERROR - 加载文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:40:02,613 - th_agenter.services.document_processor - ERROR - 文档处理失败 ID: 6: 没有可用的.doc文档加载器,请安装docx2txt库或转换为.docx格式 +2025-12-15 10:40:02,621 - root - INFO - Clearing user context +2025-12-15 10:40:04,941 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:40:04,943 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:40:04,943 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:40:04,944 - root - INFO - Clearing user context +2025-12-15 10:40:04,944 - root - INFO - User context cleared before authentication +2025-12-15 10:40:04,944 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:40:04,946 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:40:04,946 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:40:04,947 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:40:04,947 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:40:04,952 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:40:04,953 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:40:04,953 - root - INFO - Looking for user with username: admin +2025-12-15 10:40:04,956 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:40:04,957 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:40:04,957 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:40:04,968 - root - INFO - Clearing user context +2025-12-15 10:43:22,308 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:43:34,075 - root - INFO - Logging configured successfully +2025-12-15 10:43:34,207 - root - INFO - Logging configured successfully +2025-12-15 10:43:34,323 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:43:34,335 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:43:34,339 - root - INFO - Database tables created +2025-12-15 10:43:34,340 - root - INFO - Database initialized +2025-12-15 10:44:22,820 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:44:32,809 - root - INFO - Logging configured successfully +2025-12-15 10:44:32,934 - root - INFO - Logging configured successfully +2025-12-15 10:44:33,042 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:44:33,050 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:44:33,054 - root - INFO - Database tables created +2025-12-15 10:44:33,055 - root - INFO - Database initialized +2025-12-15 10:44:42,566 - root - INFO - Logging configured successfully +2025-12-15 10:44:42,709 - root - INFO - Logging configured successfully +2025-12-15 10:44:42,830 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:44:42,840 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:44:42,844 - root - INFO - Database tables created +2025-12-15 10:44:42,845 - root - INFO - Database initialized +2025-12-15 10:46:00,448 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:46:12,119 - root - INFO - Logging configured successfully +2025-12-15 10:46:12,238 - root - INFO - Logging configured successfully +2025-12-15 10:46:12,350 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:46:12,359 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:46:12,362 - root - INFO - Database tables created +2025-12-15 10:46:12,363 - root - INFO - Database initialized +2025-12-15 10:46:22,466 - root - INFO - Logging configured successfully +2025-12-15 10:46:22,597 - root - INFO - Logging configured successfully +2025-12-15 10:46:22,709 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:46:22,718 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:46:22,722 - root - INFO - Database tables created +2025-12-15 10:46:22,722 - root - INFO - Database initialized +2025-12-15 10:47:21,200 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 10:55:23,610 - root - INFO - Logging configured successfully +2025-12-15 10:55:23,744 - root - INFO - Logging configured successfully +2025-12-15 10:55:23,859 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:55:23,868 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:55:23,872 - root - INFO - Database tables created +2025-12-15 10:55:23,873 - root - INFO - Database initialized +2025-12-15 10:56:24,523 - root - INFO - Logging configured successfully +2025-12-15 10:56:24,660 - root - INFO - Logging configured successfully +2025-12-15 10:56:24,777 - root - INFO - Starting up TH-Agenter application... +2025-12-15 10:56:24,785 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 10:56:24,789 - root - INFO - Database tables created +2025-12-15 10:56:24,790 - root - INFO - Database initialized +2025-12-15 10:57:50,216 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:57:50,216 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:57:50,217 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:57:50,217 - root - INFO - Clearing user context +2025-12-15 10:57:50,217 - root - INFO - User context cleared before authentication +2025-12-15 10:57:50,217 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:57:50,245 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:57:50,245 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:57:50,245 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:57:50,245 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:57:50,250 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:57:50,250 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:57:50,250 - root - INFO - Looking for user with username: admin +2025-12-15 10:57:50,251 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:57:50,252 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:57:50,252 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:57:50,366 - th_agenter.services.document - INFO - Uploaded document: testdoc2.docx to KB 7 (Doc ID: 7) +2025-12-15 10:57:50,375 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 10:57:50,488 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 10:57:50,494 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 10:57:50,497 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 7, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx +2025-12-15 10:57:50,499 - th_agenter.services.document_processor - ERROR - 使用python-docx加载Word文档失败 E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx: Package not found at 'E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx' +2025-12-15 10:57:50,499 - th_agenter.services.document_processor - ERROR - 加载Word文档失败: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx, 错误: Package not found at 'E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx' +2025-12-15 10:57:50,500 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx, 页数: 1 +2025-12-15 10:57:50,504 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-15 10:57:50,504 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 10:57:50,505 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 10:57:50,506 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx +2025-12-15 10:57:50,514 - root - INFO - Clearing user context +2025-12-15 10:57:52,532 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:57:52,532 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:57:52,533 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:57:52,533 - root - INFO - Clearing user context +2025-12-15 10:57:52,533 - root - INFO - User context cleared before authentication +2025-12-15 10:57:52,534 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:57:52,536 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:57:52,537 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:57:52,538 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:57:52,538 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:57:52,540 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:57:52,540 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:57:52,540 - root - INFO - Looking for user with username: admin +2025-12-15 10:57:52,542 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:57:52,542 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:57:52,542 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:57:52,552 - root - INFO - Clearing user context +2025-12-15 10:58:08,840 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 10:58:08,840 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:08,841 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 10:58:08,841 - root - INFO - Clearing user context +2025-12-15 10:58:08,841 - root - INFO - User context cleared before authentication +2025-12-15 10:58:08,841 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:08,842 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:08,842 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:08,842 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:08,842 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:08,844 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:08,844 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:08,844 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:08,845 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:08,845 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:08,846 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:08,850 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx +2025-12-15 10:58:08,930 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 10:58:08,931 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 10:58:08,937 - th_agenter.services.document - INFO - Deleted document: d40b4fd6-71b0-4930-baa7-f3dc06965f32_testdoc2.docx (ID: 5) +2025-12-15 10:58:08,938 - root - INFO - Clearing user context +2025-12-15 10:58:09,107 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:58:09,107 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:09,107 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:58:09,108 - root - INFO - Clearing user context +2025-12-15 10:58:09,108 - root - INFO - User context cleared before authentication +2025-12-15 10:58:09,108 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:09,110 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:09,110 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:09,110 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:09,110 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:09,111 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:09,112 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:09,112 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:09,113 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:09,113 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:09,113 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:09,117 - root - INFO - Clearing user context +2025-12-15 10:58:10,834 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/6 +2025-12-15 10:58:10,835 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/6 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:10,835 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/6 +2025-12-15 10:58:10,836 - root - INFO - Clearing user context +2025-12-15 10:58:10,836 - root - INFO - User context cleared before authentication +2025-12-15 10:58:10,837 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:10,838 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:10,839 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:10,839 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:10,839 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:10,840 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:10,841 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:10,841 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:10,842 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:10,842 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:10,843 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:10,844 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc +2025-12-15 10:58:10,908 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=6 +2025-12-15 10:58:10,909 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=6 +2025-12-15 10:58:10,921 - th_agenter.services.document - INFO - Deleted document: 0619733e-2f0f-40b2-b8cd-6e681836463a_testdoc1.doc (ID: 6) +2025-12-15 10:58:10,923 - root - INFO - Clearing user context +2025-12-15 10:58:11,242 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:58:11,242 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:11,242 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:58:11,243 - root - INFO - Clearing user context +2025-12-15 10:58:11,243 - root - INFO - User context cleared before authentication +2025-12-15 10:58:11,243 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:11,244 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:11,245 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:11,245 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:11,245 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:11,247 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:11,247 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:11,247 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:11,249 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:11,249 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:11,249 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:11,252 - root - INFO - Clearing user context +2025-12-15 10:58:12,848 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/7 +2025-12-15 10:58:12,849 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/7 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:12,849 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/7 +2025-12-15 10:58:12,849 - root - INFO - Clearing user context +2025-12-15 10:58:12,850 - root - INFO - User context cleared before authentication +2025-12-15 10:58:12,850 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:12,851 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:12,851 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:12,852 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:12,852 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:12,854 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:12,854 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:12,855 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:12,856 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:12,857 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:12,857 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:12,860 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx +2025-12-15 10:58:12,924 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=7 +2025-12-15 10:58:12,924 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=7 +2025-12-15 10:58:12,934 - th_agenter.services.document - INFO - Deleted document: 71453a96-1405-4c19-9695-57b5c6e3481e_testdoc2.docx (ID: 7) +2025-12-15 10:58:12,936 - root - INFO - Clearing user context +2025-12-15 10:58:13,258 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:58:13,258 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:13,258 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:58:13,259 - root - INFO - Clearing user context +2025-12-15 10:58:13,259 - root - INFO - User context cleared before authentication +2025-12-15 10:58:13,259 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:13,260 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:13,260 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:13,261 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:13,261 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:13,262 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:13,262 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:13,263 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:13,264 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:13,264 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:13,265 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:13,267 - root - INFO - Clearing user context +2025-12-15 10:58:17,305 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 10:58:17,305 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:17,306 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:58:17,306 - root - INFO - Clearing user context +2025-12-15 10:58:17,306 - root - INFO - User context cleared before authentication +2025-12-15 10:58:17,307 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:17,307 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:17,308 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:17,308 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:17,308 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:17,310 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:17,311 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:17,311 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:17,312 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:17,312 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:17,312 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:17,323 - th_agenter.services.document - INFO - Uploaded document: testdoc.doc to KB 7 (Doc ID: 5) +2025-12-15 10:58:17,326 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 5, 路径: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc +2025-12-15 10:58:17,326 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc +2025-12-15 10:58:17,327 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc +2025-12-15 10:58:17,327 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-15 10:58:17,329 - th_agenter.services.document_processor - INFO - 成功加载文档: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc, 页数: 1 +2025-12-15 10:58:17,330 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (D:\Users\jiang\anaconda3\envs\langchain\lib\site-packages\langchain\chat_models\__init__.py) +2025-12-15 10:58:17,330 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 10:58:17,331 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 10:58:17,331 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc +2025-12-15 10:58:17,334 - root - INFO - Clearing user context +2025-12-15 10:58:19,672 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 10:58:19,672 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 10:58:19,672 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 10:58:19,672 - root - INFO - Clearing user context +2025-12-15 10:58:19,673 - root - INFO - User context cleared before authentication +2025-12-15 10:58:19,673 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 10:58:19,674 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 10:58:19,674 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:19,674 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 10:58:19,675 - root - INFO - Verified current user ID in context: 2 +2025-12-15 10:58:19,676 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 10:58:19,677 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 10:58:19,677 - root - INFO - Looking for user with username: admin +2025-12-15 10:58:19,678 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 10:58:19,678 - root - INFO - Verification - ContextVar user: admin +2025-12-15 10:58:19,678 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 10:58:19,681 - root - INFO - Clearing user context +2025-12-15 10:59:52,426 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 11:00:02,609 - root - INFO - Logging configured successfully +2025-12-15 11:00:02,757 - root - INFO - Logging configured successfully +2025-12-15 11:00:02,888 - root - INFO - Starting up TH-Agenter application... +2025-12-15 11:00:02,898 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 11:00:02,905 - root - INFO - Database tables created +2025-12-15 11:00:02,905 - root - INFO - Database initialized +2025-12-15 11:00:04,108 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 11:00:14,479 - root - INFO - Logging configured successfully +2025-12-15 11:00:14,621 - root - INFO - Logging configured successfully +2025-12-15 11:00:14,739 - root - INFO - Starting up TH-Agenter application... +2025-12-15 11:00:14,749 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 11:00:14,753 - root - INFO - Database tables created +2025-12-15 11:00:14,753 - root - INFO - Database initialized +2025-12-15 11:19:22,575 - root - INFO - Logging configured successfully +2025-12-15 11:19:22,680 - root - INFO - Logging configured successfully +2025-12-15 11:19:22,762 - root - INFO - Starting up TH-Agenter application... +2025-12-15 11:19:22,769 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 11:19:22,771 - root - INFO - Database tables created +2025-12-15 11:19:22,771 - root - INFO - Database initialized +2025-12-15 11:31:28,945 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 11:31:28,945 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:31:28,945 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 11:31:28,946 - root - INFO - Clearing user context +2025-12-15 11:31:28,946 - root - INFO - User context cleared before authentication +2025-12-15 11:31:28,946 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:31:28,963 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:31:28,963 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:28,963 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:31:28,963 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:31:28,965 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:31:28,965 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:31:28,966 - root - INFO - Looking for user with username: admin +2025-12-15 11:31:28,966 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:31:28,966 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:28,966 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:31:29,009 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 6) +2025-12-15 11:31:29,025 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 11:31:29,068 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 11:31:29,069 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 11:31:29,070 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 6, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc +2025-12-15 11:31:29,071 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc +2025-12-15 11:31:29,071 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc +2025-12-15 11:31:29,071 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-15 11:31:29,072 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc, 页数: 1 +2025-12-15 11:31:29,072 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-15 11:31:29,072 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 11:31:29,073 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 11:31:29,073 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc +2025-12-15 11:31:29,075 - root - INFO - Clearing user context +2025-12-15 11:31:31,134 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 11:31:31,134 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:31:31,134 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 11:31:31,135 - root - INFO - Clearing user context +2025-12-15 11:31:31,135 - root - INFO - User context cleared before authentication +2025-12-15 11:31:31,135 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:31:31,135 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:31:31,135 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:31,136 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:31:31,136 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:31:31,137 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:31:31,137 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:31:31,137 - root - INFO - Looking for user with username: admin +2025-12-15 11:31:31,137 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:31:31,137 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:31,137 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:31:31,143 - root - INFO - Clearing user context +2025-12-15 11:31:51,406 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-15 11:31:51,406 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:31:51,407 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-15 11:31:51,407 - root - INFO - Clearing user context +2025-12-15 11:31:51,407 - root - INFO - User context cleared before authentication +2025-12-15 11:31:51,407 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:31:51,410 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:31:51,410 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:51,410 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:31:51,410 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:31:51,411 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:31:51,411 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:31:51,411 - root - INFO - Looking for user with username: admin +2025-12-15 11:31:51,412 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:31:51,412 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:31:51,412 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:31:51,823 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 11:31:51,906 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 0 个相关文档 +2025-12-15 11:31:51,907 - root - INFO - Clearing user context +2025-12-15 11:44:19,812 - root - INFO - Shutting down TH-Agenter application... +2025-12-15 11:44:45,742 - root - INFO - Logging configured successfully +2025-12-15 11:44:45,829 - root - INFO - Logging configured successfully +2025-12-15 11:44:45,909 - root - INFO - Starting up TH-Agenter application... +2025-12-15 11:44:45,915 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-15 11:44:45,917 - root - INFO - Database tables created +2025-12-15 11:44:45,917 - root - INFO - Database initialized +2025-12-15 11:45:01,646 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 11:45:01,647 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:45:01,647 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 11:45:01,647 - root - INFO - Clearing user context +2025-12-15 11:45:01,648 - root - INFO - User context cleared before authentication +2025-12-15 11:45:01,648 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:45:01,693 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:45:01,693 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:45:01,693 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:45:01,693 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:45:01,695 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:45:01,695 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:45:01,695 - root - INFO - Looking for user with username: admin +2025-12-15 11:45:01,695 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:45:01,696 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:45:01,696 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:45:01,699 - root - INFO - Clearing user context +2025-12-15 11:45:01,709 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 11:45:01,709 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:45:01,709 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 11:45:01,709 - root - INFO - Clearing user context +2025-12-15 11:45:01,709 - root - INFO - User context cleared before authentication +2025-12-15 11:45:01,709 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:45:01,710 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:45:01,710 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:45:01,710 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:45:01,710 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:45:01,711 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:45:01,711 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:45:01,711 - root - INFO - Looking for user with username: admin +2025-12-15 11:45:01,712 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:45:01,712 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:45:01,712 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:45:01,714 - root - INFO - Clearing user context +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:46:29,311 - root - INFO - Clearing user context +2025-12-15 11:46:29,311 - root - INFO - User context cleared before authentication +2025-12-15 11:46:29,311 - root - INFO - Authorization header received: None +2025-12-15 11:46:29,311 - root - INFO - Authorization header is missing +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:29,311 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:46:29,312 - root - INFO - Clearing user context +2025-12-15 11:46:29,312 - root - INFO - User context cleared before authentication +2025-12-15 11:46:29,312 - root - INFO - Authorization header received: None +2025-12-15 11:46:29,312 - root - INFO - Authorization header is missing +2025-12-15 11:46:29,316 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:46:29,316 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:29,316 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:46:29,316 - root - INFO - Clearing user context +2025-12-15 11:46:29,316 - root - INFO - User context cleared before authentication +2025-12-15 11:46:29,317 - root - INFO - Authorization header received: None +2025-12-15 11:46:29,317 - root - INFO - Authorization header is missing +2025-12-15 11:46:29,317 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:46:29,317 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:29,317 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:46:29,318 - root - INFO - Clearing user context +2025-12-15 11:46:29,318 - root - INFO - User context cleared before authentication +2025-12-15 11:46:29,318 - root - INFO - Authorization header received: None +2025-12-15 11:46:29,318 - root - INFO - Authorization header is missing +2025-12-15 11:46:29,321 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:46:29,321 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:29,321 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:46:29,321 - root - INFO - Clearing user context +2025-12-15 11:46:29,321 - root - INFO - User context cleared before authentication +2025-12-15 11:46:29,321 - root - INFO - Authorization header received: None +2025-12-15 11:46:29,321 - root - INFO - Authorization header is missing +2025-12-15 11:46:53,885 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 11:46:53,885 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:53,885 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 11:46:53,886 - root - INFO - Clearing user context +2025-12-15 11:46:53,886 - root - INFO - User context cleared before authentication +2025-12-15 11:46:53,886 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:53,889 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:53,889 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:53,890 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:53,890 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:53,892 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:53,893 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:53,893 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:53,898 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:53,898 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:53,898 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:53,899 - root - INFO - Clearing user context +2025-12-15 11:46:53,909 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:53,909 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:53,909 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:53,909 - root - INFO - Clearing user context +2025-12-15 11:46:53,909 - root - INFO - User context cleared before authentication +2025-12-15 11:46:53,909 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:53,910 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:53,910 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:53,910 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:53,910 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:53,911 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:53,911 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:53,911 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:53,911 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:53,911 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:53,911 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:53,912 - root - INFO - Clearing user context +2025-12-15 11:46:55,468 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 11:46:55,468 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:55,468 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 11:46:55,468 - root - INFO - Clearing user context +2025-12-15 11:46:55,468 - root - INFO - User context cleared before authentication +2025-12-15 11:46:55,468 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:55,469 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:55,469 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:55,469 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:55,469 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:55,469 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:55,470 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:55,470 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:55,470 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:55,470 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:55,470 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:55,471 - root - INFO - Clearing user context +2025-12-15 11:46:55,495 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:55,495 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:55,496 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:55,496 - root - INFO - Clearing user context +2025-12-15 11:46:55,496 - root - INFO - User context cleared before authentication +2025-12-15 11:46:55,496 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:55,496 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:55,496 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:55,496 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:55,496 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:55,497 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:55,497 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:55,497 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:55,498 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:55,498 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:55,498 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:55,499 - root - INFO - Clearing user context +2025-12-15 11:46:56,195 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:46:56,195 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:56,196 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:46:56,196 - root - INFO - Clearing user context +2025-12-15 11:46:56,196 - root - INFO - User context cleared before authentication +2025-12-15 11:46:56,196 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:56,196 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:56,196 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:56,196 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:56,197 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:56,197 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:56,198 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:56,198 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:56,198 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:56,198 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:56,198 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:56,208 - root - INFO - Clearing user context +2025-12-15 11:46:56,208 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:46:56,208 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:56,209 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:46:56,209 - root - INFO - Clearing user context +2025-12-15 11:46:56,209 - root - INFO - User context cleared before authentication +2025-12-15 11:46:56,209 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:56,210 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:56,210 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:56,210 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:56,210 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:56,213 - root - INFO - Clearing user context +2025-12-15 11:46:56,241 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 11:46:56,241 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:56,241 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 11:46:56,241 - root - INFO - Clearing user context +2025-12-15 11:46:56,241 - root - INFO - User context cleared before authentication +2025-12-15 11:46:56,241 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:56,242 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:56,242 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:56,242 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:56,242 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:56,244 - root - INFO - Clearing user context +2025-12-15 11:46:59,206 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 11:46:59,207 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:59,207 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 11:46:59,207 - root - INFO - Clearing user context +2025-12-15 11:46:59,208 - root - INFO - User context cleared before authentication +2025-12-15 11:46:59,208 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:59,211 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:59,211 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:59,211 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:59,211 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:59,211 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:59,212 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:59,212 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:59,212 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:59,212 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:59,212 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:59,213 - root - INFO - Clearing user context +2025-12-15 11:46:59,224 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:59,224 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:46:59,224 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 11:46:59,224 - root - INFO - Clearing user context +2025-12-15 11:46:59,224 - root - INFO - User context cleared before authentication +2025-12-15 11:46:59,224 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4MTA1OX0.HM7awqA8v5hga11zQfZ2tH_wzY3nQb6tCf3JlPqTu_k +2025-12-15 11:46:59,224 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:46:59,224 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:59,225 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:46:59,225 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:46:59,225 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:46:59,225 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765781059} +2025-12-15 11:46:59,225 - root - INFO - Looking for user with username: admin +2025-12-15 11:46:59,226 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:46:59,226 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:46:59,226 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:46:59,227 - root - INFO - Clearing user context +2025-12-15 11:47:01,252 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-15 11:47:01,253 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,253 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-15 11:47:01,253 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-15 11:47:01,449 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 11:47:01,449 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,450 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 11:47:01,450 - root - INFO - Clearing user context +2025-12-15 11:47:01,450 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,450 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,450 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,450 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,451 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,451 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,451 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:47:01,451 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 11:47:01,451 - root - INFO - Looking for user with username: admin +2025-12-15 11:47:01,452 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:47:01,452 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,452 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:47:01,453 - root - INFO - Clearing user context +2025-12-15 11:47:01,457 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 11:47:01,457 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,457 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 11:47:01,457 - root - INFO - Clearing user context +2025-12-15 11:47:01,457 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,457 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,458 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,458 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,458 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,458 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,459 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:47:01,459 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 11:47:01,459 - root - INFO - Looking for user with username: admin +2025-12-15 11:47:01,459 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:47:01,459 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,459 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:47:01,460 - root - INFO - Clearing user context +2025-12-15 11:47:01,837 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:47:01,837 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,838 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:47:01,838 - root - INFO - Clearing user context +2025-12-15 11:47:01,838 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,839 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,841 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,842 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,842 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,842 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,844 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:47:01,844 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,844 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:47:01,845 - root - INFO - Clearing user context +2025-12-15 11:47:01,845 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,845 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,848 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,848 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,849 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,849 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,851 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:47:01,852 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 11:47:01,857 - root - INFO - Looking for user with username: admin +2025-12-15 11:47:01,860 - root - INFO - Clearing user context +2025-12-15 11:47:01,861 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:47:01,863 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,864 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:47:01,886 - root - INFO - Clearing user context +2025-12-15 11:47:01,887 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:47:01,887 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,887 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:47:01,887 - root - INFO - Clearing user context +2025-12-15 11:47:01,887 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,887 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,889 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,889 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,889 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,889 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,890 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 11:47:01,890 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,890 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 11:47:01,890 - root - INFO - Clearing user context +2025-12-15 11:47:01,890 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,890 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,891 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,891 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,891 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,892 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,895 - root - INFO - Clearing user context +2025-12-15 11:47:01,895 - root - INFO - Clearing user context +2025-12-15 11:47:01,896 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:47:01,896 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,897 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:47:01,897 - root - INFO - Clearing user context +2025-12-15 11:47:01,897 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,897 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,898 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,898 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,898 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,898 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,899 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:47:01,899 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 11:47:01,899 - root - INFO - Looking for user with username: admin +2025-12-15 11:47:01,900 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:47:01,900 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,900 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:47:01,900 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 11:47:01,900 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:01,900 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 11:47:01,900 - root - INFO - Clearing user context +2025-12-15 11:47:01,901 - root - INFO - User context cleared before authentication +2025-12-15 11:47:01,901 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:01,901 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:01,901 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:01,901 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:01,902 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:01,909 - root - INFO - Clearing user context +2025-12-15 11:47:01,910 - root - INFO - Clearing user context +2025-12-15 11:47:02,245 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 11:47:02,246 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:02,246 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 11:47:02,246 - root - INFO - Clearing user context +2025-12-15 11:47:02,246 - root - INFO - User context cleared before authentication +2025-12-15 11:47:02,246 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:02,247 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:02,247 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:02,247 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:02,247 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:02,248 - root - INFO - Clearing user context +2025-12-15 11:47:02,574 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 11:47:02,574 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:02,575 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 11:47:02,575 - root - INFO - Clearing user context +2025-12-15 11:47:02,575 - root - INFO - User context cleared before authentication +2025-12-15 11:47:02,576 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:02,578 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:02,579 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:02,579 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:02,579 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:02,580 - root - INFO - Clearing user context +2025-12-15 11:47:04,441 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 11:47:04,441 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 11:47:04,442 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 11:47:04,442 - root - INFO - Clearing user context +2025-12-15 11:47:04,442 - root - INFO - User context cleared before authentication +2025-12-15 11:47:04,442 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 11:47:04,444 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 11:47:04,444 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:04,444 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 11:47:04,444 - root - INFO - Verified current user ID in context: 2 +2025-12-15 11:47:04,445 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 11:47:04,445 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 11:47:04,445 - root - INFO - Looking for user with username: admin +2025-12-15 11:47:04,446 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 11:47:04,446 - root - INFO - Verification - ContextVar user: admin +2025-12-15 11:47:04,446 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 11:47:04,452 - root - INFO - Clearing user context +2025-12-15 12:58:50,246 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 12:58:50,246 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:58:50,246 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 12:58:50,246 - root - INFO - Clearing user context +2025-12-15 12:58:50,246 - root - INFO - User context cleared before authentication +2025-12-15 12:58:50,246 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:58:50,247 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:58:50,247 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:50,247 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:58:50,247 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:58:50,248 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:58:50,249 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:58:50,249 - root - INFO - Looking for user with username: admin +2025-12-15 12:58:50,249 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:58:50,249 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:50,250 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:58:50,253 - root - INFO - Clearing user context +2025-12-15 12:58:55,811 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 12:58:55,811 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:58:55,812 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 12:58:55,812 - root - INFO - Clearing user context +2025-12-15 12:58:55,812 - root - INFO - User context cleared before authentication +2025-12-15 12:58:55,813 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:58:55,815 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:58:55,815 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:55,816 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:58:55,816 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:58:55,817 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:58:55,817 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:58:55,817 - root - INFO - Looking for user with username: admin +2025-12-15 12:58:55,818 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:58:55,818 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:55,818 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:58:55,838 - th_agenter.services.document - INFO - Uploaded document: testdoc2.docx to KB 7 (Doc ID: 7) +2025-12-15 12:58:55,842 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-15 12:58:55,945 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-15 12:58:55,947 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-15 12:58:55,948 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 7, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx +2025-12-15 12:58:55,948 - th_agenter.services.document_processor - ERROR - 使用python-docx加载Word文档失败 /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx: Package not found at '/home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx' +2025-12-15 12:58:55,948 - th_agenter.services.document_processor - ERROR - 加载Word文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx, 错误: Package not found at '/home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx' +2025-12-15 12:58:55,949 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx, 页数: 1 +2025-12-15 12:58:55,949 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-15 12:58:55,949 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 12:58:55,950 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 12:58:55,950 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx +2025-12-15 12:58:55,951 - root - INFO - Clearing user context +2025-12-15 12:58:58,301 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 12:58:58,301 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:58:58,302 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 12:58:58,302 - root - INFO - Clearing user context +2025-12-15 12:58:58,302 - root - INFO - User context cleared before authentication +2025-12-15 12:58:58,302 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:58:58,305 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:58:58,305 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:58,305 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:58:58,306 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:58:58,306 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:58:58,306 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:58:58,306 - root - INFO - Looking for user with username: admin +2025-12-15 12:58:58,307 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:58:58,307 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:58:58,307 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:58:58,308 - root - INFO - Clearing user context +2025-12-15 12:59:40,917 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-15 12:59:40,917 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:40,918 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-15 12:59:40,918 - root - INFO - Clearing user context +2025-12-15 12:59:40,918 - root - INFO - User context cleared before authentication +2025-12-15 12:59:40,919 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:40,921 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:40,922 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:40,922 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:40,923 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:40,925 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:59:40,926 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:59:40,926 - root - INFO - Looking for user with username: admin +2025-12-15 12:59:40,928 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:59:40,928 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:40,929 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:59:40,931 - root - INFO - Clearing user context +2025-12-15 12:59:41,088 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-15 12:59:41,089 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:41,089 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-15 12:59:41,090 - root - INFO - Clearing user context +2025-12-15 12:59:41,090 - root - INFO - User context cleared before authentication +2025-12-15 12:59:41,090 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:41,093 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:41,093 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,094 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:41,094 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:41,097 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:59:41,097 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:59:41,098 - root - INFO - Looking for user with username: admin +2025-12-15 12:59:41,100 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:59:41,100 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,101 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:59:41,105 - root - INFO - Clearing user context +2025-12-15 12:59:41,237 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-15 12:59:41,237 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:41,238 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-15 12:59:41,238 - root - INFO - Clearing user context +2025-12-15 12:59:41,238 - root - INFO - User context cleared before authentication +2025-12-15 12:59:41,238 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:41,239 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:41,239 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,239 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:41,239 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:41,240 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-15 12:59:41,240 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:41,240 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-15 12:59:41,240 - root - INFO - Clearing user context +2025-12-15 12:59:41,240 - root - INFO - User context cleared before authentication +2025-12-15 12:59:41,240 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:41,241 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:41,241 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,241 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:41,241 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:41,242 - root - INFO - Clearing user context +2025-12-15 12:59:41,242 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:59:41,243 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:59:41,243 - root - INFO - Looking for user with username: admin +2025-12-15 12:59:41,243 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:59:41,243 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,243 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:59:41,248 - root - INFO - Clearing user context +2025-12-15 12:59:41,249 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-15 12:59:41,249 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:41,249 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-15 12:59:41,249 - root - INFO - Clearing user context +2025-12-15 12:59:41,249 - root - INFO - User context cleared before authentication +2025-12-15 12:59:41,249 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:41,250 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:41,250 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:41,250 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:41,250 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:41,251 - root - INFO - Clearing user context +2025-12-15 12:59:44,727 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 12:59:44,727 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 12:59:44,728 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 12:59:44,728 - root - INFO - Clearing user context +2025-12-15 12:59:44,728 - root - INFO - User context cleared before authentication +2025-12-15 12:59:44,729 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 12:59:44,731 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 12:59:44,731 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:44,732 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 12:59:44,732 - root - INFO - Verified current user ID in context: 2 +2025-12-15 12:59:44,732 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 12:59:44,732 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 12:59:44,732 - root - INFO - Looking for user with username: admin +2025-12-15 12:59:44,733 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 12:59:44,733 - root - INFO - Verification - ContextVar user: admin +2025-12-15 12:59:44,733 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 12:59:44,734 - root - INFO - Clearing user context +2025-12-15 13:00:02,540 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 13:00:02,541 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:02,541 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:02,541 - root - INFO - Clearing user context +2025-12-15 13:00:02,542 - root - INFO - User context cleared before authentication +2025-12-15 13:00:02,542 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:02,545 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:02,545 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:02,545 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:02,545 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:02,670 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:02,671 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:02,671 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:02,674 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:02,674 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:02,674 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:02,705 - th_agenter.services.document - INFO - Uploaded document: 发明专利申请说明书CN202411808464.5.pdf to KB 7 (Doc ID: 8) +2025-12-15 13:00:02,710 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 8, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 13:00:02,746 - th_agenter.services.document_processor - WARNING - PDF文档没有提取到文本内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf,可能是扫描版PDF需要OCR支持 +2025-12-15 13:00:02,746 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf, 页数: 1 +2025-12-15 13:00:02,746 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-15 13:00:02,747 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 13:00:02,747 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 13:00:02,747 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 13:00:02,749 - root - INFO - Clearing user context +2025-12-15 13:00:04,773 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:04,774 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:04,774 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:04,774 - root - INFO - Clearing user context +2025-12-15 13:00:04,775 - root - INFO - User context cleared before authentication +2025-12-15 13:00:04,775 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:04,778 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:04,778 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:04,778 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:04,778 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:04,779 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:04,779 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:04,779 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:04,780 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:04,780 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:04,780 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:04,781 - root - INFO - Clearing user context +2025-12-15 13:00:33,036 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 13:00:33,036 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:33,037 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:33,037 - root - INFO - Clearing user context +2025-12-15 13:00:33,038 - root - INFO - User context cleared before authentication +2025-12-15 13:00:33,038 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:33,041 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:33,041 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:33,042 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:33,042 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:33,046 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:33,047 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:33,047 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:33,050 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:33,050 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:33,050 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:33,078 - th_agenter.services.document - INFO - Uploaded document: testpdf.pdf to KB 7 (Doc ID: 9) +2025-12-15 13:00:33,083 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 9, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf +2025-12-15 13:00:33,258 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf, 页数: 2 +2025-12-15 13:00:33,258 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-15 13:00:33,258 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 13:00:33,258 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 4 个文档块 +2025-12-15 13:00:33,613 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 13:00:33,776 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 13:00:33,956 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 13:00:34,129 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-15 13:00:34,294 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-15 13:00:34,317 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 9, 'status': 'success', 'chunks_count': 4, 'message': '文档处理完成'} +2025-12-15 13:00:34,512 - th_agenter.services.document - INFO - Processed document: 9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf (ID: 9) +2025-12-15 13:00:34,515 - root - INFO - Clearing user context +2025-12-15 13:00:36,528 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:36,528 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:36,529 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:36,529 - root - INFO - Clearing user context +2025-12-15 13:00:36,529 - root - INFO - User context cleared before authentication +2025-12-15 13:00:36,530 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:36,533 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:36,533 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:36,533 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:36,534 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:36,537 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:36,537 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:36,538 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:36,540 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:36,541 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:36,541 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:36,549 - root - INFO - Clearing user context +2025-12-15 13:00:48,515 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/5 +2025-12-15 13:00:48,515 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/5 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:48,515 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/5 +2025-12-15 13:00:48,515 - root - INFO - Clearing user context +2025-12-15 13:00:48,515 - root - INFO - User context cleared before authentication +2025-12-15 13:00:48,515 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:48,516 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:48,516 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:48,516 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:48,516 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:48,517 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:48,517 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:48,517 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:48,518 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:48,518 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:48,518 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:48,521 - th_agenter.services.document - INFO - Deleted file: E:\Work\HXF_AI\HXF\backend\data\uploads\kb_7\e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc +2025-12-15 13:00:48,569 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=5 +2025-12-15 13:00:48,569 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=5 +2025-12-15 13:00:48,586 - th_agenter.services.document - INFO - Deleted document: e65dcd42-da1d-4762-a58f-3654c909ade2_testdoc.doc (ID: 5) +2025-12-15 13:00:48,587 - root - INFO - Clearing user context +2025-12-15 13:00:48,770 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:48,770 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:48,771 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:48,771 - root - INFO - Clearing user context +2025-12-15 13:00:48,771 - root - INFO - User context cleared before authentication +2025-12-15 13:00:48,771 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:48,774 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:48,775 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:48,775 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:48,775 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:48,778 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:48,778 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:48,779 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:48,781 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:48,781 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:48,782 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:48,784 - root - INFO - Clearing user context +2025-12-15 13:00:50,403 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/6 +2025-12-15 13:00:50,403 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/6 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:50,403 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/6 +2025-12-15 13:00:50,404 - root - INFO - Clearing user context +2025-12-15 13:00:50,404 - root - INFO - User context cleared before authentication +2025-12-15 13:00:50,404 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:50,407 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:50,407 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:50,407 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:50,408 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:50,410 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:50,411 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:50,411 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:50,413 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:50,414 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:50,414 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:50,418 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc +2025-12-15 13:00:50,484 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=6 +2025-12-15 13:00:50,484 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=6 +2025-12-15 13:00:50,498 - th_agenter.services.document - INFO - Deleted document: 245b9c36-26c4-4cb9-9d1d-7f29b6e40b94_testdoc1.doc (ID: 6) +2025-12-15 13:00:50,498 - root - INFO - Clearing user context +2025-12-15 13:00:50,839 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:50,840 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:50,840 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:50,840 - root - INFO - Clearing user context +2025-12-15 13:00:50,840 - root - INFO - User context cleared before authentication +2025-12-15 13:00:50,841 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:50,843 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:50,844 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:50,844 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:50,844 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:50,847 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:50,847 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:50,848 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:50,850 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:50,850 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:50,850 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:50,857 - root - INFO - Clearing user context +2025-12-15 13:00:52,536 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/7 +2025-12-15 13:00:52,536 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/7 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:52,536 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/7 +2025-12-15 13:00:52,536 - root - INFO - Clearing user context +2025-12-15 13:00:52,536 - root - INFO - User context cleared before authentication +2025-12-15 13:00:52,537 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:52,537 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:52,537 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:52,538 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:52,538 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:52,538 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:52,538 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:52,538 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:52,539 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:52,539 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:52,539 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:52,540 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx +2025-12-15 13:00:52,578 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=7 +2025-12-15 13:00:52,578 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=7 +2025-12-15 13:00:52,593 - th_agenter.services.document - INFO - Deleted document: 90536805-dbc8-4d37-80f7-7c0bffad3138_testdoc2.docx (ID: 7) +2025-12-15 13:00:52,593 - root - INFO - Clearing user context +2025-12-15 13:00:52,936 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:52,937 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:52,937 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:52,937 - root - INFO - Clearing user context +2025-12-15 13:00:52,937 - root - INFO - User context cleared before authentication +2025-12-15 13:00:52,937 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:52,937 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:52,938 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:52,938 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:52,938 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:52,938 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:52,938 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:52,938 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:52,939 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:52,939 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:52,939 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:52,940 - root - INFO - Clearing user context +2025-12-15 13:00:55,332 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/8 +2025-12-15 13:00:55,333 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/8 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:55,333 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/8 +2025-12-15 13:00:55,333 - root - INFO - Clearing user context +2025-12-15 13:00:55,334 - root - INFO - User context cleared before authentication +2025-12-15 13:00:55,334 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:55,336 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:55,337 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:55,337 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:55,337 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:55,337 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:55,338 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:55,338 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:55,338 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:55,338 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:55,338 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:55,339 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf +2025-12-15 13:00:55,378 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=8 +2025-12-15 13:00:55,379 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=8 +2025-12-15 13:00:55,395 - th_agenter.services.document - INFO - Deleted document: b5d6c8fa-5342-4d81-8c9a-61724c252fa0_发明专利申请说明书CN202411808464.5.pdf (ID: 8) +2025-12-15 13:00:55,395 - root - INFO - Clearing user context +2025-12-15 13:00:55,728 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:00:55,728 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:00:55,728 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:00:55,728 - root - INFO - Clearing user context +2025-12-15 13:00:55,728 - root - INFO - User context cleared before authentication +2025-12-15 13:00:55,728 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:00:55,729 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:00:55,729 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:55,729 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:00:55,729 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:00:55,729 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:00:55,730 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:00:55,730 - root - INFO - Looking for user with username: admin +2025-12-15 13:00:55,730 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:00:55,730 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:00:55,730 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:00:55,732 - root - INFO - Clearing user context +2025-12-15 13:01:03,301 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-15 13:01:03,301 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:01:03,302 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:01:03,302 - root - INFO - Clearing user context +2025-12-15 13:01:03,303 - root - INFO - User context cleared before authentication +2025-12-15 13:01:03,303 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:01:03,306 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:01:03,306 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:01:03,306 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:01:03,306 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:01:03,307 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:01:03,307 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:01:03,307 - root - INFO - Looking for user with username: admin +2025-12-15 13:01:03,307 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:01:03,307 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:01:03,307 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:01:03,325 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 10) +2025-12-15 13:01:03,330 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 10, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc +2025-12-15 13:01:03,331 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc +2025-12-15 13:01:03,332 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc +2025-12-15 13:01:03,332 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-15 13:01:03,336 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc, 页数: 1 +2025-12-15 13:01:03,337 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-15 13:01:03,337 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-15 13:01:03,338 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-15 13:01:03,338 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc +2025-12-15 13:01:03,343 - root - INFO - Clearing user context +2025-12-15 13:01:05,689 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-15 13:01:05,689 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-15 13:01:05,690 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-15 13:01:05,690 - root - INFO - Clearing user context +2025-12-15 13:01:05,690 - root - INFO - User context cleared before authentication +2025-12-15 13:01:05,691 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-15 13:01:05,692 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-15 13:01:05,692 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:01:05,692 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-15 13:01:05,692 - root - INFO - Verified current user ID in context: 2 +2025-12-15 13:01:05,693 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-15 13:01:05,693 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765788421} +2025-12-15 13:01:05,693 - root - INFO - Looking for user with username: admin +2025-12-15 13:01:05,693 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-15 13:01:05,694 - root - INFO - Verification - ContextVar user: admin +2025-12-15 13:01:05,694 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-15 13:01:05,695 - root - INFO - Clearing user context +2025-12-16 10:09:15,213 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:09:15,214 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:09:15,214 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:09:15,214 - root - INFO - Clearing user context +2025-12-16 10:09:15,215 - root - INFO - User context cleared before authentication +2025-12-16 10:09:15,215 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:09:15,216 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:09:15,217 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:09:15,217 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:09:15,217 - root - ERROR - Algorithm: HS256 +2025-12-16 10:09:15,352 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:09:15,353 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:09:15,353 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:09:15,353 - root - INFO - Clearing user context +2025-12-16 10:09:15,353 - root - INFO - User context cleared before authentication +2025-12-16 10:09:15,353 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:09:15,353 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:09:15,353 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:09:15,353 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:09:15,354 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:25,074 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:25,075 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:25,075 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:25,075 - root - INFO - Clearing user context +2025-12-16 10:42:25,076 - root - INFO - User context cleared before authentication +2025-12-16 10:42:25,076 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:25,077 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:25,077 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:25,077 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:25,077 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:25,291 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:25,292 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:25,292 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:25,293 - root - INFO - Clearing user context +2025-12-16 10:42:25,293 - root - INFO - User context cleared before authentication +2025-12-16 10:42:25,293 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:25,294 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:25,294 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:25,295 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:25,295 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:25,295 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:42:25,295 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:25,295 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:42:25,296 - root - INFO - Clearing user context +2025-12-16 10:42:25,296 - root - INFO - User context cleared before authentication +2025-12-16 10:42:25,296 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:25,296 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:25,296 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:25,296 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:25,296 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:25,316 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:25,316 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:25,316 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:25,316 - root - INFO - Clearing user context +2025-12-16 10:42:25,316 - root - INFO - User context cleared before authentication +2025-12-16 10:42:25,316 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:25,316 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:25,316 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:25,317 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:25,317 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:25,319 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:42:25,319 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:25,319 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:42:25,319 - root - INFO - Clearing user context +2025-12-16 10:42:25,319 - root - INFO - User context cleared before authentication +2025-12-16 10:42:25,320 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:25,320 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:25,320 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:25,320 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:25,320 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:41,190 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:41,190 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:41,191 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:41,191 - root - INFO - Clearing user context +2025-12-16 10:42:41,191 - root - INFO - User context cleared before authentication +2025-12-16 10:42:41,192 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:41,192 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:41,192 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:41,193 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:41,193 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:41,371 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:41,371 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:41,371 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:41,371 - root - INFO - Clearing user context +2025-12-16 10:42:41,371 - root - INFO - User context cleared before authentication +2025-12-16 10:42:41,371 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTc4ODQyMX0.gsR-avVU0NYQ1VZFzevDj1ATDWLUjt2QoRKDQhMScuE +2025-12-16 10:42:41,372 - root - ERROR - Token verification failed: Signature has expired +2025-12-16 10:42:41,372 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:41,372 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-16 10:42:41,372 - root - ERROR - Algorithm: HS256 +2025-12-16 10:42:48,224 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-16 10:42:48,224 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:48,225 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-16 10:42:48,225 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-16 10:42:48,460 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:42:48,460 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:48,460 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:42:48,460 - root - INFO - Clearing user context +2025-12-16 10:42:48,461 - root - INFO - User context cleared before authentication +2025-12-16 10:42:48,461 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:48,461 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:48,461 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:48,461 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:48,461 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:48,462 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:48,462 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:42:48,462 - root - INFO - Looking for user with username: admin +2025-12-16 10:42:48,462 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:42:48,462 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:48,462 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:42:48,463 - root - INFO - Clearing user context +2025-12-16 10:42:48,790 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-16 10:42:48,790 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:48,790 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-16 10:42:48,790 - root - INFO - Clearing user context +2025-12-16 10:42:48,790 - root - INFO - User context cleared before authentication +2025-12-16 10:42:48,790 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:48,791 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:48,791 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:48,791 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:48,791 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:48,791 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:48,792 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:42:48,792 - root - INFO - Looking for user with username: admin +2025-12-16 10:42:48,792 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:42:48,792 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:48,792 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:42:48,793 - root - INFO - Clearing user context +2025-12-16 10:42:49,236 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:42:49,236 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,236 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:42:49,236 - root - INFO - Clearing user context +2025-12-16 10:42:49,236 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,236 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,238 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,238 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,238 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,238 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,239 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:42:49,239 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,239 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:42:49,239 - root - INFO - Clearing user context +2025-12-16 10:42:49,239 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,239 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,240 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,240 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,240 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,241 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,244 - root - INFO - Clearing user context +2025-12-16 10:42:49,245 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:49,245 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:42:49,245 - root - INFO - Looking for user with username: admin +2025-12-16 10:42:49,246 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:42:49,247 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,247 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:42:49,261 - root - INFO - Clearing user context +2025-12-16 10:42:49,262 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:42:49,262 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,262 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:42:49,262 - root - INFO - Clearing user context +2025-12-16 10:42:49,263 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,263 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,264 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,264 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,264 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,265 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,268 - root - INFO - Clearing user context +2025-12-16 10:42:49,383 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:42:49,383 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,383 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:42:49,384 - root - INFO - Clearing user context +2025-12-16 10:42:49,384 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,384 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,385 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,385 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,385 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,386 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,386 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:42:49,386 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,386 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:42:49,386 - root - INFO - Clearing user context +2025-12-16 10:42:49,386 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,386 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,387 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,387 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,387 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,387 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,387 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:42:49,387 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,387 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:42:49,387 - root - INFO - Clearing user context +2025-12-16 10:42:49,387 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,387 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,388 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,388 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,388 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,388 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,391 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:42:49,391 - root - INFO - Clearing user context +2025-12-16 10:42:49,391 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:42:49,392 - root - INFO - Clearing user context +2025-12-16 10:42:49,392 - root - INFO - Looking for user with username: admin +2025-12-16 10:42:49,393 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:42:49,393 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,393 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:42:49,398 - root - INFO - Clearing user context +2025-12-16 10:42:49,591 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:42:49,591 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,591 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:42:49,591 - root - INFO - Clearing user context +2025-12-16 10:42:49,591 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,591 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,592 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,592 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,592 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,592 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,593 - root - INFO - Clearing user context +2025-12-16 10:42:49,596 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:42:49,596 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:49,596 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:42:49,596 - root - INFO - Clearing user context +2025-12-16 10:42:49,596 - root - INFO - User context cleared before authentication +2025-12-16 10:42:49,596 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:49,597 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:49,597 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:49,597 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:49,597 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:49,598 - root - INFO - Clearing user context +2025-12-16 10:42:50,952 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/3 +2025-12-16 10:42:50,952 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:50,952 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3 +2025-12-16 10:42:50,952 - root - INFO - Clearing user context +2025-12-16 10:42:50,952 - root - INFO - User context cleared before authentication +2025-12-16 10:42:50,952 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:50,953 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:50,953 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:50,953 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:50,953 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:50,955 - root - INFO - Clearing user context +2025-12-16 10:42:50,963 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/3/messages +2025-12-16 10:42:50,963 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:50,964 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/messages +2025-12-16 10:42:50,964 - root - INFO - Clearing user context +2025-12-16 10:42:50,964 - root - INFO - User context cleared before authentication +2025-12-16 10:42:50,964 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:50,965 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:50,965 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:50,965 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:50,965 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:50,970 - root - INFO - Clearing user context +2025-12-16 10:42:59,783 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/3/chat/stream +2025-12-16 10:42:59,783 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:42:59,784 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/chat/stream +2025-12-16 10:42:59,784 - root - INFO - Clearing user context +2025-12-16 10:42:59,784 - root - INFO - User context cleared before authentication +2025-12-16 10:42:59,784 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:42:59,785 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:42:59,785 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:42:59,785 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:42:59,785 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:42:59,790 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-16 10:42:59,871 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:42:59,872 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:42:59,872 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:42:59,872 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:42:59,873 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-16 10:42:59,893 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-16 10:42:59,894 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:42:59,894 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:42:59,894 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:42:59,894 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:42:59,894 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-16 10:42:59,895 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-16 10:42:59,895 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-16 10:42:59,895 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-16 10:42:59,895 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-16 10:42:59,895 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-16 10:42:59,895 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-16 10:42:59,895 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-16 10:42:59,895 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-16 10:42:59,895 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-16 10:42:59,895 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-16 10:42:59,895 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-16 10:42:59,897 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-16 10:42:59,897 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-16 10:42:59,898 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-16 10:42:59,898 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-16 10:42:59,898 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:42:59,898 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:42:59,898 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:42:59,898 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-16 10:42:59,899 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 3 via LangChain +2025-12-16 10:42:59,899 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 3 +2025-12-16 10:42:59,927 - root - INFO - Clearing user context +2025-12-16 10:43:00,682 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-16 10:43:02,530 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 3 +2025-12-16 10:43:09,698 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/3/chat/stream +2025-12-16 10:43:09,698 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/3/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:43:09,698 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/3/chat/stream +2025-12-16 10:43:09,698 - root - INFO - Clearing user context +2025-12-16 10:43:09,698 - root - INFO - User context cleared before authentication +2025-12-16 10:43:09,699 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:43:09,699 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:43:09,700 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:43:09,700 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:43:09,700 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:43:09,701 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-16 10:43:09,704 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:43:09,704 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:43:09,704 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:43:09,704 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:43:09,706 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-16 10:43:09,736 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-16 10:43:09,737 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:43:09,737 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:43:09,737 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:43:09,737 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:43:09,737 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-16 10:43:09,738 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-16 10:43:09,738 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-16 10:43:09,738 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:43:09,738 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:43:09,738 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:43:09,738 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-16 10:43:09,739 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 3 via LangChain +2025-12-16 10:43:09,739 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 3 +2025-12-16 10:43:09,752 - root - INFO - Clearing user context +2025-12-16 10:43:10,995 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-16 10:43:17,919 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 3 +2025-12-16 10:43:19,686 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:43:19,686 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:43:19,686 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:43:19,686 - root - INFO - Clearing user context +2025-12-16 10:43:19,687 - root - INFO - User context cleared before authentication +2025-12-16 10:43:19,687 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:43:19,688 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:43:19,688 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:43:19,688 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:43:19,688 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:43:19,689 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:43:19,690 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:43:19,690 - root - INFO - Looking for user with username: admin +2025-12-16 10:43:19,691 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:43:19,691 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:43:19,691 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:43:19,705 - root - INFO - Clearing user context +2025-12-16 10:43:21,088 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-16 10:43:21,088 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:43:21,089 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:43:21,089 - root - INFO - Clearing user context +2025-12-16 10:43:21,089 - root - INFO - User context cleared before authentication +2025-12-16 10:43:21,089 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:43:21,092 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:43:21,092 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:43:21,092 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:43:21,092 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:43:21,093 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:43:21,093 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:43:21,093 - root - INFO - Looking for user with username: admin +2025-12-16 10:43:21,094 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:43:21,094 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:43:21,094 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:43:21,095 - root - INFO - Clearing user context +2025-12-16 10:44:33,404 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-16 10:44:33,405 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:33,405 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:44:33,405 - root - INFO - Clearing user context +2025-12-16 10:44:33,406 - root - INFO - User context cleared before authentication +2025-12-16 10:44:33,406 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:33,408 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:33,409 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:33,409 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:33,409 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:33,410 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:33,410 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:33,410 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:33,410 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:33,411 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:33,411 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:33,428 - th_agenter.services.document - INFO - Uploaded document: testpdf.pdf to KB 7 (Doc ID: 11) +2025-12-16 10:44:33,429 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 11, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/f41fa3b5-4e35-4b5e-aecc-950878c902aa_testpdf.pdf +2025-12-16 10:44:33,578 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/f41fa3b5-4e35-4b5e-aecc-950878c902aa_testpdf.pdf, 页数: 2 +2025-12-16 10:44:33,578 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-16 10:44:33,579 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-16 10:44:33,579 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 4 个文档块 +2025-12-16 10:44:33,858 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:34,027 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:34,176 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:34,316 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:34,413 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-16 10:44:34,427 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 11, 'status': 'success', 'chunks_count': 4, 'message': '文档处理完成'} +2025-12-16 10:44:34,445 - th_agenter.services.document - INFO - Processed document: f41fa3b5-4e35-4b5e-aecc-950878c902aa_testpdf.pdf (ID: 11) +2025-12-16 10:44:34,448 - root - INFO - Clearing user context +2025-12-16 10:44:36,462 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-16 10:44:36,462 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:36,463 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:44:36,463 - root - INFO - Clearing user context +2025-12-16 10:44:36,463 - root - INFO - User context cleared before authentication +2025-12-16 10:44:36,463 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:36,463 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:36,464 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:36,464 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:36,464 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:36,464 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:36,465 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:36,465 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:36,465 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:36,465 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:36,465 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:36,467 - root - INFO - Clearing user context +2025-12-16 10:44:40,983 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/9 +2025-12-16 10:44:40,983 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/9 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:40,983 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/9 +2025-12-16 10:44:40,983 - root - INFO - Clearing user context +2025-12-16 10:44:40,983 - root - INFO - User context cleared before authentication +2025-12-16 10:44:40,983 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:40,984 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:40,984 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:40,984 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:40,984 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:40,984 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:40,985 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:40,985 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:40,985 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:40,985 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:40,985 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:40,986 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf +2025-12-16 10:44:41,044 - th_agenter.services.document_processor - INFO - 成功删除 4 个文档块: document_id=9 +2025-12-16 10:44:41,044 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=9 +2025-12-16 10:44:41,061 - th_agenter.services.document - INFO - Deleted document: 9976cdff-e6b7-45af-aa89-3caf46ed273b_testpdf.pdf (ID: 9) +2025-12-16 10:44:41,061 - root - INFO - Clearing user context +2025-12-16 10:44:41,247 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-16 10:44:41,247 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:41,247 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:44:41,247 - root - INFO - Clearing user context +2025-12-16 10:44:41,247 - root - INFO - User context cleared before authentication +2025-12-16 10:44:41,247 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:41,248 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:41,249 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:41,249 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:41,249 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:41,250 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:41,250 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:41,250 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:41,251 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:41,251 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:41,251 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:41,253 - root - INFO - Clearing user context +2025-12-16 10:44:45,901 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-16 10:44:45,902 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:45,902 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:44:45,902 - root - INFO - Clearing user context +2025-12-16 10:44:45,903 - root - INFO - User context cleared before authentication +2025-12-16 10:44:45,903 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:45,906 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:45,906 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:45,906 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:45,906 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:45,907 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:45,907 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:45,907 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:45,908 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:45,908 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:45,908 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:45,935 - th_agenter.services.document - INFO - Uploaded document: 周报.txt to KB 7 (Doc ID: 12) +2025-12-16 10:44:45,939 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 12, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/da0ec296-a120-4114-8edc-a03f35fd4d6e_周报.txt +2025-12-16 10:44:45,940 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/da0ec296-a120-4114-8edc-a03f35fd4d6e_周报.txt, 页数: 1 +2025-12-16 10:44:45,941 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-16 10:44:45,941 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-16 10:44:45,943 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 7 个文档块 +2025-12-16 10:44:46,147 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:46,283 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:46,456 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:46,578 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:46,684 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:46,899 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:47,062 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:44:47,151 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-16 10:44:47,168 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 12, 'status': 'success', 'chunks_count': 7, 'message': '文档处理完成'} +2025-12-16 10:44:47,178 - th_agenter.services.document - INFO - Processed document: da0ec296-a120-4114-8edc-a03f35fd4d6e_周报.txt (ID: 12) +2025-12-16 10:44:47,179 - root - INFO - Clearing user context +2025-12-16 10:44:49,523 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-16 10:44:49,523 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:49,523 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-16 10:44:49,523 - root - INFO - Clearing user context +2025-12-16 10:44:49,523 - root - INFO - User context cleared before authentication +2025-12-16 10:44:49,523 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:49,524 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:49,524 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:49,524 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:49,524 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:49,524 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:49,524 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:49,525 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:49,525 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:49,525 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:49,525 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:44:49,527 - root - INFO - Clearing user context +2025-12-16 10:44:59,853 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/search +2025-12-16 10:44:59,853 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/search against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:44:59,853 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/search +2025-12-16 10:44:59,853 - root - INFO - Clearing user context +2025-12-16 10:44:59,853 - root - INFO - User context cleared before authentication +2025-12-16 10:44:59,853 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:44:59,854 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:44:59,854 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:59,854 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:44:59,854 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:44:59,855 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:44:59,856 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:44:59,856 - root - INFO - Looking for user with username: admin +2025-12-16 10:44:59,856 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:44:59,856 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:44:59,856 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:45:00,141 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-16 10:45:00,226 - th_agenter.services.document_processor - INFO - PostgreSQL pgvector搜索完成,找到 5 个相关文档 +2025-12-16 10:45:00,226 - root - INFO - Clearing user context +2025-12-16 10:45:25,496 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:45:25,496 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,497 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:45:25,497 - root - INFO - Clearing user context +2025-12-16 10:45:25,497 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,498 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,500 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,501 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,501 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,501 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,502 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:45:25,502 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,502 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:45:25,502 - root - INFO - Clearing user context +2025-12-16 10:45:25,502 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,502 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,503 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,503 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,503 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,503 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,505 - root - INFO - Clearing user context +2025-12-16 10:45:25,505 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:45:25,505 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:45:25,505 - root - INFO - Looking for user with username: admin +2025-12-16 10:45:25,506 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:45:25,506 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,506 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:45:25,511 - root - INFO - Clearing user context +2025-12-16 10:45:25,742 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:45:25,742 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,742 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:45:25,742 - root - INFO - Clearing user context +2025-12-16 10:45:25,742 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,742 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,743 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,743 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,743 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,743 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,744 - root - INFO - Clearing user context +2025-12-16 10:45:25,832 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:45:25,832 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,832 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:45:25,832 - root - INFO - Clearing user context +2025-12-16 10:45:25,832 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,833 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,833 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,833 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,833 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,833 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,834 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:45:25,834 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,834 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:45:25,834 - root - INFO - Clearing user context +2025-12-16 10:45:25,834 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,834 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,835 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,835 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,835 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,835 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,836 - root - INFO - Clearing user context +2025-12-16 10:45:25,836 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:45:25,836 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:45:25,836 - root - INFO - Looking for user with username: admin +2025-12-16 10:45:25,837 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:45:25,837 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,837 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:45:25,842 - root - INFO - Clearing user context +2025-12-16 10:45:25,842 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:45:25,842 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:25,842 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:45:25,842 - root - INFO - Clearing user context +2025-12-16 10:45:25,842 - root - INFO - User context cleared before authentication +2025-12-16 10:45:25,842 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:25,843 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:25,843 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:25,843 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:25,843 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:25,844 - root - INFO - Clearing user context +2025-12-16 10:45:26,696 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations +2025-12-16 10:45:26,696 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:26,696 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:45:26,696 - root - INFO - Clearing user context +2025-12-16 10:45:26,696 - root - INFO - User context cleared before authentication +2025-12-16 10:45:26,697 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:26,698 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:26,698 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:26,698 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:26,698 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:26,700 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:45:26,700 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:45:26,700 - root - INFO - Looking for user with username: admin +2025-12-16 10:45:26,701 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:45:26,701 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:26,701 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:45:26,702 - th_agenter.conversation_service - INFO - Creating new conversation for user 2 +2025-12-16 10:45:26,716 - th_agenter.conversation_service - INFO - Successfully created conversation 4 for user 2 +2025-12-16 10:45:26,716 - root - INFO - Clearing user context +2025-12-16 10:45:39,796 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/4/chat/stream +2025-12-16 10:45:39,796 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/4/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:45:39,796 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/4/chat/stream +2025-12-16 10:45:39,796 - root - INFO - Clearing user context +2025-12-16 10:45:39,796 - root - INFO - User context cleared before authentication +2025-12-16 10:45:39,796 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:45:39,797 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:45:39,797 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:45:39,797 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:45:39,797 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:45:39,797 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-16 10:45:39,800 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:45:39,800 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:45:39,800 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:45:39,800 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:45:39,801 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-16 10:45:39,821 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-16 10:45:39,822 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:45:39,822 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:45:39,822 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:45:39,822 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-16 10:45:39,822 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-16 10:45:39,823 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-16 10:45:39,823 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-16 10:45:39,823 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-16 10:45:39,824 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-16 10:45:39,824 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-16 10:45:39,824 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-16 10:45:39,824 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 4 via LangChain +2025-12-16 10:45:39,824 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 4 +2025-12-16 10:45:39,873 - root - INFO - Clearing user context +2025-12-16 10:45:40,672 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-16 10:45:42,804 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 4 +2025-12-16 10:51:39,676 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-16 10:51:39,677 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:39,677 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-16 10:51:39,677 - root - INFO - Clearing user context +2025-12-16 10:51:39,677 - root - INFO - User context cleared before authentication +2025-12-16 10:51:39,677 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:39,678 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:39,678 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:39,678 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:39,678 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:39,679 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:51:39,679 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:51:39,679 - root - INFO - Looking for user with username: admin +2025-12-16 10:51:39,680 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:51:39,680 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:39,680 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:51:39,681 - root - INFO - Clearing user context +2025-12-16 10:51:39,687 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-16 10:51:39,687 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:39,687 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-16 10:51:39,687 - root - INFO - Clearing user context +2025-12-16 10:51:39,687 - root - INFO - User context cleared before authentication +2025-12-16 10:51:39,687 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:39,688 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:39,688 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:39,689 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:39,689 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:39,689 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:51:39,690 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:51:39,690 - root - INFO - Looking for user with username: admin +2025-12-16 10:51:39,690 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:51:39,691 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:39,691 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:51:39,692 - root - INFO - Clearing user context +2025-12-16 10:51:40,170 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:51:40,170 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,171 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:51:40,171 - root - INFO - Clearing user context +2025-12-16 10:51:40,171 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,171 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,173 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,173 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,174 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,174 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,175 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:51:40,175 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,175 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:51:40,175 - root - INFO - Clearing user context +2025-12-16 10:51:40,175 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,175 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,176 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,176 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,176 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,176 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,177 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:51:40,177 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:51:40,178 - root - INFO - Looking for user with username: admin +2025-12-16 10:51:40,178 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:51:40,178 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,178 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:51:40,184 - root - INFO - Clearing user context +2025-12-16 10:51:40,184 - root - INFO - Clearing user context +2025-12-16 10:51:40,189 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:51:40,189 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,189 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:51:40,189 - root - INFO - Clearing user context +2025-12-16 10:51:40,189 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,189 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,190 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,190 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,190 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,190 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,190 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-16 10:51:40,190 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,190 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-16 10:51:40,190 - root - INFO - Clearing user context +2025-12-16 10:51:40,190 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,191 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,191 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,191 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,191 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,191 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,192 - root - INFO - Clearing user context +2025-12-16 10:51:40,193 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-16 10:51:40,193 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765870968} +2025-12-16 10:51:40,193 - root - INFO - Looking for user with username: admin +2025-12-16 10:51:40,193 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:51:40,193 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-16 10:51:40,194 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,194 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,194 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:51:40,194 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-16 10:51:40,194 - root - INFO - Clearing user context +2025-12-16 10:51:40,194 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,194 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,194 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,194 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,195 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,195 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,200 - root - INFO - Clearing user context +2025-12-16 10:51:40,200 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-16 10:51:40,200 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,200 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-16 10:51:40,200 - root - INFO - Clearing user context +2025-12-16 10:51:40,200 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,200 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,201 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,201 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,201 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,201 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,202 - root - INFO - Clearing user context +2025-12-16 10:51:40,203 - root - INFO - Clearing user context +2025-12-16 10:51:40,531 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:51:40,531 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,531 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:51:40,531 - root - INFO - Clearing user context +2025-12-16 10:51:40,532 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,532 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,534 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,534 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,534 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,534 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,538 - root - INFO - Clearing user context +2025-12-16 10:51:40,867 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-16 10:51:40,868 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-16 10:51:40,868 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-16 10:51:40,868 - root - INFO - Clearing user context +2025-12-16 10:51:40,868 - root - INFO - User context cleared before authentication +2025-12-16 10:51:40,869 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-16 10:51:40,871 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-16 10:51:40,872 - root - INFO - Verification - ContextVar user: admin +2025-12-16 10:51:40,872 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-16 10:51:40,872 - root - INFO - Verified current user ID in context: 2 +2025-12-16 10:51:40,876 - root - INFO - Clearing user context +2025-12-17 18:34:21,366 - root - INFO - Logging configured successfully +2025-12-17 18:34:21,469 - root - INFO - Logging configured successfully +2025-12-17 18:34:21,554 - root - INFO - Starting up TH-Agenter application... +2025-12-17 18:34:21,563 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 18:34:21,565 - root - INFO - Database tables created +2025-12-17 18:34:21,565 - root - INFO - Database initialized +2025-12-17 18:35:16,860 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:16,860 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:16,860 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:16,860 - root - INFO - Clearing user context +2025-12-17 18:35:16,860 - root - INFO - User context cleared before authentication +2025-12-17 18:35:16,860 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:16,860 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:16,860 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:16,860 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:16,860 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,001 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:18,002 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,002 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:18,002 - root - INFO - Clearing user context +2025-12-17 18:35:18,002 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,002 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,002 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,002 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,002 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,002 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,002 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:35:18,002 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,003 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:35:18,003 - root - INFO - Clearing user context +2025-12-17 18:35:18,003 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,003 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,003 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,003 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,003 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,003 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,003 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:18,003 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,003 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:18,003 - root - INFO - Clearing user context +2025-12-17 18:35:18,003 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,003 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,004 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,004 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,004 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,004 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,007 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:35:18,007 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,007 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:35:18,007 - root - INFO - Clearing user context +2025-12-17 18:35:18,007 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,007 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,008 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,008 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,008 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,008 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,008 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:18,008 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,008 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:18,008 - root - INFO - Clearing user context +2025-12-17 18:35:18,008 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,008 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,008 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,008 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,008 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,009 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,360 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:18,360 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,360 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:18,360 - root - INFO - Clearing user context +2025-12-17 18:35:18,360 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,360 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,360 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,360 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,360 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,360 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:18,361 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:18,361 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:18,361 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:18,361 - root - INFO - Clearing user context +2025-12-17 18:35:18,361 - root - INFO - User context cleared before authentication +2025-12-17 18:35:18,361 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:18,361 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:18,361 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:18,361 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:18,361 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:57,854 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:57,855 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:57,855 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:57,855 - root - INFO - Clearing user context +2025-12-17 18:35:57,856 - root - INFO - User context cleared before authentication +2025-12-17 18:35:57,856 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:57,857 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:57,857 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:57,857 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:57,858 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,403 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:58,404 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,404 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:58,404 - root - INFO - Clearing user context +2025-12-17 18:35:58,404 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,405 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,405 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,405 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,406 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,406 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,408 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:35:58,408 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,409 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:35:58,409 - root - INFO - Clearing user context +2025-12-17 18:35:58,409 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,410 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,410 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,410 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,411 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,411 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,412 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:58,412 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,412 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:58,413 - root - INFO - Clearing user context +2025-12-17 18:35:58,413 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,414 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,414 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,415 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,415 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,415 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,417 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:58,418 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,418 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:58,419 - root - INFO - Clearing user context +2025-12-17 18:35:58,419 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,420 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,420 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,421 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,421 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,421 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,427 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:35:58,427 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,427 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:35:58,428 - root - INFO - Clearing user context +2025-12-17 18:35:58,428 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,428 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,429 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,429 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,429 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,429 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,456 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:58,456 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,457 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:58,457 - root - INFO - Clearing user context +2025-12-17 18:35:58,457 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,457 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,457 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,457 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,458 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,458 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,790 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:35:58,790 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,790 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:35:58,790 - root - INFO - Clearing user context +2025-12-17 18:35:58,790 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,790 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,790 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,790 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,791 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,791 - root - ERROR - Algorithm: HS256 +2025-12-17 18:35:58,810 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:35:58,810 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:35:58,810 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:35:58,810 - root - INFO - Clearing user context +2025-12-17 18:35:58,810 - root - INFO - User context cleared before authentication +2025-12-17 18:35:58,810 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTg3MDk2OH0.lrjvhYA8x8GSWjG6awEx96Tw9R0LDcYQC-L1uED4vgY +2025-12-17 18:35:58,810 - root - ERROR - Token verification failed: Signature has expired +2025-12-17 18:35:58,811 - root - ERROR - Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:35:58,811 - root - ERROR - Secret key: your-strong-secret-k... +2025-12-17 18:35:58,811 - root - ERROR - Algorithm: HS256 +2025-12-17 18:36:05,181 - root - INFO - [MIDDLEWARE] Processing request: POST /api/auth/login +2025-12-17 18:36:05,182 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/login against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,182 - root - INFO - [MIDDLEWARE] Path /api/auth/login exactly matches exclude_path /api/auth/login +2025-12-17 18:36:05,182 - root - INFO - [MIDDLEWARE] Skipping authentication for excluded path: /api/auth/login +2025-12-17 18:36:05,398 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:36:05,398 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,398 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:36:05,398 - root - INFO - Clearing user context +2025-12-17 18:36:05,398 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,398 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,399 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,399 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,400 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,400 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,400 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:05,400 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:05,400 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:05,401 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:05,401 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,401 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:05,403 - root - INFO - Clearing user context +2025-12-17 18:36:05,415 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-17 18:36:05,415 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,415 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-17 18:36:05,415 - root - INFO - Clearing user context +2025-12-17 18:36:05,415 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,415 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,415 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,415 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,415 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,416 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,416 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:05,417 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:05,417 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:05,417 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:05,417 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,417 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:05,419 - root - INFO - Clearing user context +2025-12-17 18:36:05,459 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:36:05,459 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,460 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:36:05,460 - root - INFO - Clearing user context +2025-12-17 18:36:05,460 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,460 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,460 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,460 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,461 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,461 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,466 - root - INFO - Clearing user context +2025-12-17 18:36:05,799 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:36:05,799 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,800 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:36:05,800 - root - INFO - Clearing user context +2025-12-17 18:36:05,800 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,800 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,803 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,804 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,804 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,804 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,808 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:36:05,808 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,809 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:36:05,809 - root - INFO - Clearing user context +2025-12-17 18:36:05,809 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,809 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,812 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,812 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,813 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,813 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,821 - root - INFO - Clearing user context +2025-12-17 18:36:05,821 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:05,824 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:05,825 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:05,827 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:05,828 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,828 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:05,859 - root - INFO - Clearing user context +2025-12-17 18:36:05,859 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-17 18:36:05,859 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:05,859 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-17 18:36:05,860 - root - INFO - Clearing user context +2025-12-17 18:36:05,860 - root - INFO - User context cleared before authentication +2025-12-17 18:36:05,860 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:05,861 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:05,861 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:05,861 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:05,861 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:05,864 - root - INFO - Clearing user context +2025-12-17 18:36:06,166 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:36:06,166 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:06,166 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:36:06,166 - root - INFO - Clearing user context +2025-12-17 18:36:06,167 - root - INFO - User context cleared before authentication +2025-12-17 18:36:06,167 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:06,170 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:06,170 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:06,170 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:06,171 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:06,176 - root - INFO - Clearing user context +2025-12-17 18:36:06,198 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:36:06,198 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:06,198 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:36:06,198 - root - INFO - Clearing user context +2025-12-17 18:36:06,198 - root - INFO - User context cleared before authentication +2025-12-17 18:36:06,199 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:06,199 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:06,199 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:06,199 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:06,199 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:06,200 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:06,200 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:06,200 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:06,200 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:06,200 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:06,200 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:06,206 - root - INFO - Clearing user context +2025-12-17 18:36:06,206 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-17 18:36:06,206 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:06,206 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-17 18:36:06,206 - root - INFO - Clearing user context +2025-12-17 18:36:06,206 - root - INFO - User context cleared before authentication +2025-12-17 18:36:06,206 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:06,207 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:06,207 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:06,207 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:06,207 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:06,208 - root - INFO - Clearing user context +2025-12-17 18:36:06,541 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-17 18:36:06,541 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:06,541 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-17 18:36:06,541 - root - INFO - Clearing user context +2025-12-17 18:36:06,541 - root - INFO - User context cleared before authentication +2025-12-17 18:36:06,541 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:06,542 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:06,542 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:06,542 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:06,542 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:06,543 - root - INFO - Clearing user context +2025-12-17 18:36:10,607 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/4 +2025-12-17 18:36:10,607 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/4 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:10,607 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/4 +2025-12-17 18:36:10,607 - root - INFO - Clearing user context +2025-12-17 18:36:10,608 - root - INFO - User context cleared before authentication +2025-12-17 18:36:10,608 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:10,608 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:10,608 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:10,608 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:10,609 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:10,610 - root - INFO - Clearing user context +2025-12-17 18:36:10,944 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/4/messages +2025-12-17 18:36:10,945 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/4/messages against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:10,945 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/4/messages +2025-12-17 18:36:10,945 - root - INFO - Clearing user context +2025-12-17 18:36:10,945 - root - INFO - User context cleared before authentication +2025-12-17 18:36:10,945 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:10,945 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:10,945 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:10,946 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:10,946 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:10,948 - root - INFO - Clearing user context +2025-12-17 18:36:30,529 - root - INFO - [MIDDLEWARE] Processing request: POST /api/chat/conversations/4/chat/stream +2025-12-17 18:36:30,529 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/4/chat/stream against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:30,530 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/4/chat/stream +2025-12-17 18:36:30,530 - root - INFO - Clearing user context +2025-12-17 18:36:30,530 - root - INFO - User context cleared before authentication +2025-12-17 18:36:30,530 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:30,533 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:30,534 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:30,534 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:30,534 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:30,540 - th_agenter.langchain_chat_service - INFO - LLM Provider: doubao +2025-12-17 18:36:30,815 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-17 18:36:30,815 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-17 18:36:30,815 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-17 18:36:30,815 - th_agenter.langchain_chat_service - INFO - LangChain ChatService initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-17 18:36:30,818 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-17 18:36:30,839 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-17 18:36:30,840 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-17 18:36:30,840 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-17 18:36:30,840 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-17 18:36:30,840 - th_agenter.knowledge_chat_service - INFO - Knowledge Chat Service initialized with model: doubao-1-5-pro-32k-250115 and Redis memory +2025-12-17 18:36:30,841 - th_agenter.postgresql_tool_manager - INFO - 创建全局PostgreSQL工具实例 +2025-12-17 18:36:30,841 - th_agenter.mysql_tool_manager - INFO - 创建全局MySQL工具实例 +2025-12-17 18:36:30,841 - th_agenter.agent_tools - INFO - Registered tool: weather_query_tool (enabled: True) +2025-12-17 18:36:30,841 - th_agenter.agent_service - INFO - Registered tool: weather_query_tool +2025-12-17 18:36:30,841 - th_agenter.agent_tools - INFO - Registered tool: tavily_search_tool (enabled: True) +2025-12-17 18:36:30,841 - th_agenter.agent_service - INFO - Registered tool: tavily_search_tool +2025-12-17 18:36:30,841 - th_agenter.agent_tools - INFO - Registered tool: datetime_tool (enabled: True) +2025-12-17 18:36:30,841 - th_agenter.agent_service - INFO - Registered tool: datetime_tool +2025-12-17 18:36:30,841 - th_agenter.agent_tools - INFO - Registered tool: postgresql_mcp (enabled: True) +2025-12-17 18:36:30,841 - th_agenter.agent_service - INFO - Registered tool: postgresql_mcp +2025-12-17 18:36:30,841 - th_agenter.agent_tools - INFO - Registered tool: mysql_mcp (enabled: True) +2025-12-17 18:36:30,841 - th_agenter.agent_service - INFO - Registered tool: mysql_mcp +2025-12-17 18:36:30,844 - th_agenter.agent_service - INFO - Loaded agent configuration from database +2025-12-17 18:36:30,844 - th_agenter.langgraph_agent_service - WARNING - Failed to load config from database: 'AgentConfigService' object has no attribute 'get_active_config' +2025-12-17 18:36:30,845 - th_agenter.langgraph_agent_service - ERROR - Failed to create agent: init_chat_model() missing 1 required positional argument: 'model_name' +2025-12-17 18:36:30,845 - th_agenter.chat_service - WARNING - Failed to initialize LangGraphAgentService: init_chat_model() missing 1 required positional argument: 'model_name'. LangGraph functionality will be disabled. +2025-12-17 18:36:30,845 - th_agenter.redis_memory_service - INFO - Successfully connected to Redis at 192.168.10.66:6379 db=0 +2025-12-17 18:36:30,846 - th_agenter.redis_memory_service - INFO - Conversation history directory: /home/thsw2/jcq/workspace/HXF/backend/th_agenter/services/../../conversation_history (exists: True) +2025-12-17 18:36:30,846 - th_agenter.redis_memory_service - INFO - Current working directory: /home/thsw2/jcq/workspace/HXF/backend +2025-12-17 18:36:30,846 - th_agenter.chat_service - INFO - ChatService initialized with LangChain backend, Agent support, and Redis memory +2025-12-17 18:36:30,846 - th_agenter.chat_service - INFO - Processing streaming chat request for conversation 4 via LangChain +2025-12-17 18:36:30,846 - th_agenter.langchain_chat_service - INFO - Processing LangChain streaming chat request for conversation 4 +2025-12-17 18:36:30,869 - root - INFO - Clearing user context +2025-12-17 18:36:31,778 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-17 18:36:33,299 - th_agenter.langchain_chat_service - INFO - Successfully processed LangChain streaming chat request for conversation 4 +2025-12-17 18:36:38,221 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:36:38,222 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:38,222 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:36:38,222 - root - INFO - Clearing user context +2025-12-17 18:36:38,222 - root - INFO - User context cleared before authentication +2025-12-17 18:36:38,222 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:38,223 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:38,223 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:38,223 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:38,223 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:38,224 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:38,224 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:38,224 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:38,224 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:38,224 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:38,224 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:38,230 - root - INFO - Clearing user context +2025-12-17 18:36:40,007 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:36:40,008 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:40,008 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:36:40,008 - root - INFO - Clearing user context +2025-12-17 18:36:40,008 - root - INFO - User context cleared before authentication +2025-12-17 18:36:40,009 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:40,011 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:40,012 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:40,012 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:40,012 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:40,013 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:40,013 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:40,013 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:40,014 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:40,014 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:40,014 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:40,016 - root - INFO - Clearing user context +2025-12-17 18:36:54,733 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-17 18:36:54,733 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:54,733 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:36:54,733 - root - INFO - Clearing user context +2025-12-17 18:36:54,733 - root - INFO - User context cleared before authentication +2025-12-17 18:36:54,733 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:54,734 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:54,734 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:54,734 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:54,734 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:54,735 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:54,736 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:54,736 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:54,736 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:54,736 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:54,736 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:54,756 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 13) +2025-12-17 18:36:54,759 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-17 18:36:54,779 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-17 18:36:54,781 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-17 18:36:54,781 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 13, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc +2025-12-17 18:36:54,781 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc +2025-12-17 18:36:54,781 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc +2025-12-17 18:36:54,782 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-17 18:36:54,782 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc, 页数: 1 +2025-12-17 18:36:54,783 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-17 18:36:54,783 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-17 18:36:54,783 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-17 18:36:54,783 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc +2025-12-17 18:36:54,785 - root - INFO - Clearing user context +2025-12-17 18:36:56,804 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:36:56,804 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:36:56,804 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:36:56,805 - root - INFO - Clearing user context +2025-12-17 18:36:56,805 - root - INFO - User context cleared before authentication +2025-12-17 18:36:56,805 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:36:56,807 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:36:56,807 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:56,808 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:36:56,808 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:36:56,809 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:36:56,809 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:36:56,809 - root - INFO - Looking for user with username: admin +2025-12-17 18:36:56,809 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:36:56,809 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:36:56,810 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:36:56,811 - root - INFO - Clearing user context +2025-12-17 18:37:02,893 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/13 +2025-12-17 18:37:02,893 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/13 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:02,894 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/13 +2025-12-17 18:37:02,894 - root - INFO - Clearing user context +2025-12-17 18:37:02,894 - root - INFO - User context cleared before authentication +2025-12-17 18:37:02,895 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:02,897 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:02,898 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:02,898 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:02,898 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:02,902 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:02,903 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:02,903 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:02,905 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:02,905 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:02,906 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:02,914 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc +2025-12-17 18:37:02,987 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=13 +2025-12-17 18:37:02,988 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=13 +2025-12-17 18:37:03,004 - th_agenter.services.document - INFO - Deleted document: 808cdf0c-f003-449b-a212-eedb378bd04e_testdoc1.doc (ID: 13) +2025-12-17 18:37:03,005 - root - INFO - Clearing user context +2025-12-17 18:37:03,022 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:37:03,023 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:03,023 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:37:03,023 - root - INFO - Clearing user context +2025-12-17 18:37:03,023 - root - INFO - User context cleared before authentication +2025-12-17 18:37:03,024 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:03,026 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:03,027 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:03,027 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:03,027 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:03,030 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:03,030 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:03,031 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:03,034 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:03,034 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:03,034 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:03,036 - root - INFO - Clearing user context +2025-12-17 18:37:06,326 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/10 +2025-12-17 18:37:06,326 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/10 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:06,327 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/10 +2025-12-17 18:37:06,327 - root - INFO - Clearing user context +2025-12-17 18:37:06,327 - root - INFO - User context cleared before authentication +2025-12-17 18:37:06,327 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:06,329 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:06,329 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:06,330 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:06,330 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:06,331 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:06,331 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:06,331 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:06,333 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:06,333 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:06,333 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:06,335 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc +2025-12-17 18:37:06,359 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=10 +2025-12-17 18:37:06,359 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=10 +2025-12-17 18:37:06,378 - th_agenter.services.document - INFO - Deleted document: b74f8e37-600a-4880-9f24-ce5a33d132e6_testdoc1.doc (ID: 10) +2025-12-17 18:37:06,379 - root - INFO - Clearing user context +2025-12-17 18:37:06,591 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:37:06,592 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:06,592 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:37:06,592 - root - INFO - Clearing user context +2025-12-17 18:37:06,592 - root - INFO - User context cleared before authentication +2025-12-17 18:37:06,593 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:06,595 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:06,596 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:06,596 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:06,596 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:06,599 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:06,599 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:06,600 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:06,602 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:06,602 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:06,603 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:06,610 - root - INFO - Clearing user context +2025-12-17 18:37:12,328 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-17 18:37:12,328 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:12,329 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:37:12,329 - root - INFO - Clearing user context +2025-12-17 18:37:12,329 - root - INFO - User context cleared before authentication +2025-12-17 18:37:12,329 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:12,332 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:12,332 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:12,332 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:12,333 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:12,334 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:12,334 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:12,334 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:12,334 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:12,334 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:12,334 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:12,350 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 13) +2025-12-17 18:37:12,351 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 13, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc +2025-12-17 18:37:12,351 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc +2025-12-17 18:37:12,351 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc +2025-12-17 18:37:12,351 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-17 18:37:12,352 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc, 页数: 1 +2025-12-17 18:37:12,352 - th_agenter.services.document_processor - ERROR - 获取语义分割点失败: cannot import name 'ChatOpenAI' from 'langchain.chat_models' (/home/thsw2/miniconda3/envs/langchain/lib/python3.12/site-packages/langchain/chat_models/__init__.py) +2025-12-17 18:37:12,352 - th_agenter.services.document_processor - WARNING - 语义分割失败,使用默认分割器 +2025-12-17 18:37:12,352 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-17 18:37:12,352 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc +2025-12-17 18:37:12,353 - root - INFO - Clearing user context +2025-12-17 18:37:14,697 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:37:14,697 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:37:14,697 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:37:14,697 - root - INFO - Clearing user context +2025-12-17 18:37:14,697 - root - INFO - User context cleared before authentication +2025-12-17 18:37:14,697 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:37:14,698 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:37:14,698 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:14,698 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:37:14,698 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:37:14,699 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:37:14,699 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:37:14,699 - root - INFO - Looking for user with username: admin +2025-12-17 18:37:14,699 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:37:14,699 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:37:14,699 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:37:14,701 - root - INFO - Clearing user context +2025-12-17 18:41:59,619 - root - INFO - Shutting down TH-Agenter application... +2025-12-17 18:42:01,730 - root - INFO - Logging configured successfully +2025-12-17 18:42:01,817 - root - INFO - Logging configured successfully +2025-12-17 18:42:01,897 - root - INFO - Starting up TH-Agenter application... +2025-12-17 18:42:01,902 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 18:42:01,904 - root - INFO - Database tables created +2025-12-17 18:42:01,904 - root - INFO - Database initialized +2025-12-17 18:42:56,538 - root - INFO - Shutting down TH-Agenter application... +2025-12-17 18:43:18,569 - root - INFO - Logging configured successfully +2025-12-17 18:43:18,656 - root - INFO - Logging configured successfully +2025-12-17 18:43:18,736 - root - INFO - Starting up TH-Agenter application... +2025-12-17 18:43:18,741 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 18:43:18,743 - root - INFO - Database tables created +2025-12-17 18:43:18,744 - root - INFO - Database initialized +2025-12-17 18:44:27,795 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 18:44:27,796 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:27,796 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 18:44:27,796 - root - INFO - Clearing user context +2025-12-17 18:44:27,796 - root - INFO - User context cleared before authentication +2025-12-17 18:44:27,796 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:27,813 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:27,813 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:27,813 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:27,814 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:27,815 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:27,815 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:27,815 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:27,815 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:27,816 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:27,816 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:27,818 - root - INFO - Clearing user context +2025-12-17 18:44:27,830 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-17 18:44:27,831 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:27,831 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-17 18:44:27,831 - root - INFO - Clearing user context +2025-12-17 18:44:27,831 - root - INFO - User context cleared before authentication +2025-12-17 18:44:27,831 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:27,831 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:27,831 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:27,831 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:27,831 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:27,832 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:27,833 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:27,833 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:27,833 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:27,833 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:27,833 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:27,835 - root - INFO - Clearing user context +2025-12-17 18:44:28,386 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 18:44:28,386 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:28,387 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 18:44:28,387 - root - INFO - Clearing user context +2025-12-17 18:44:28,387 - root - INFO - User context cleared before authentication +2025-12-17 18:44:28,387 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:28,390 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:28,390 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:28,391 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:28,391 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:28,395 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 18:44:28,396 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:28,396 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 18:44:28,396 - root - INFO - Clearing user context +2025-12-17 18:44:28,396 - root - INFO - User context cleared before authentication +2025-12-17 18:44:28,397 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:28,399 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:28,400 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:28,400 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:28,400 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:28,409 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:28,415 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:28,419 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:28,424 - root - INFO - Clearing user context +2025-12-17 18:44:28,426 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:28,426 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:28,427 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:28,449 - root - INFO - Clearing user context +2025-12-17 18:44:28,449 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-17 18:44:28,449 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:28,449 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-17 18:44:28,449 - root - INFO - Clearing user context +2025-12-17 18:44:28,449 - root - INFO - User context cleared before authentication +2025-12-17 18:44:28,449 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:28,450 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:28,450 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:28,450 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:28,450 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:28,452 - root - INFO - Clearing user context +2025-12-17 18:44:33,491 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:44:33,491 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:33,491 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:44:33,492 - root - INFO - Clearing user context +2025-12-17 18:44:33,492 - root - INFO - User context cleared before authentication +2025-12-17 18:44:33,492 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:33,495 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:33,495 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:33,495 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:33,495 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:33,496 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:33,496 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:33,496 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:33,497 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:33,497 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:33,497 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:33,499 - root - INFO - Clearing user context +2025-12-17 18:44:39,274 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/13 +2025-12-17 18:44:39,274 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/13 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:39,274 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/13 +2025-12-17 18:44:39,275 - root - INFO - Clearing user context +2025-12-17 18:44:39,275 - root - INFO - User context cleared before authentication +2025-12-17 18:44:39,275 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:39,278 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:39,278 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:39,278 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:39,278 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:39,279 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:39,279 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:39,279 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:39,280 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:39,280 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:39,280 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:39,282 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc +2025-12-17 18:44:39,285 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-17 18:44:39,395 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-17 18:44:39,396 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-17 18:44:39,434 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=13 +2025-12-17 18:44:39,434 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=13 +2025-12-17 18:44:39,465 - th_agenter.services.document - INFO - Deleted document: dd1eceb3-950e-4b9b-9556-3cc153215747_testdoc1.doc (ID: 13) +2025-12-17 18:44:39,465 - root - INFO - Clearing user context +2025-12-17 18:44:39,511 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:44:39,512 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:39,512 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:44:39,512 - root - INFO - Clearing user context +2025-12-17 18:44:39,512 - root - INFO - User context cleared before authentication +2025-12-17 18:44:39,512 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:39,513 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:39,513 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:39,513 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:39,513 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:39,513 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:39,513 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:39,513 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:39,514 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:39,514 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:39,514 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:39,515 - root - INFO - Clearing user context +2025-12-17 18:44:44,580 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-17 18:44:44,580 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:44,581 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:44:44,581 - root - INFO - Clearing user context +2025-12-17 18:44:44,581 - root - INFO - User context cleared before authentication +2025-12-17 18:44:44,582 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:44,584 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:44,585 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:44,585 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:44,585 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:44,587 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:44,587 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:44,587 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:44,587 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:44,588 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:44,588 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:44,603 - th_agenter.services.document - INFO - Uploaded document: testdoc1.doc to KB 7 (Doc ID: 13) +2025-12-17 18:44:44,605 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 13, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc +2025-12-17 18:44:44,605 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc +2025-12-17 18:44:44,605 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc +2025-12-17 18:44:44,605 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-17 18:44:44,606 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc, 页数: 1 +2025-12-17 18:44:45,530 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-17 18:44:45,538 - th_agenter.services.document_processor - INFO - 语义分析得到 1 个分割点 +2025-12-17 18:44:45,538 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-17 18:44:45,538 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc +2025-12-17 18:44:45,541 - root - INFO - Clearing user context +2025-12-17 18:44:47,896 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:44:47,897 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:44:47,897 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:44:47,898 - root - INFO - Clearing user context +2025-12-17 18:44:47,898 - root - INFO - User context cleared before authentication +2025-12-17 18:44:47,898 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:44:47,902 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:44:47,902 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:47,903 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:44:47,903 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:44:47,906 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:44:47,907 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:44:47,907 - root - INFO - Looking for user with username: admin +2025-12-17 18:44:47,910 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:44:47,910 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:44:47,911 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:44:47,919 - root - INFO - Clearing user context +2025-12-17 18:45:00,685 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-17 18:45:00,685 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:45:00,685 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:45:00,685 - root - INFO - Clearing user context +2025-12-17 18:45:00,685 - root - INFO - User context cleared before authentication +2025-12-17 18:45:00,685 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:45:00,686 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:45:00,686 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:45:00,686 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:45:00,686 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:45:00,687 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:45:00,687 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:45:00,687 - root - INFO - Looking for user with username: admin +2025-12-17 18:45:00,688 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:45:00,688 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:45:00,688 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:45:00,712 - th_agenter.services.document - INFO - Uploaded document: testdoc.doc to KB 7 (Doc ID: 14) +2025-12-17 18:45:00,714 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 14, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc +2025-12-17 18:45:00,714 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc +2025-12-17 18:45:00,714 - th_agenter.services.document_processor - INFO - 使用doc2txt.process处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc +2025-12-17 18:45:00,714 - th_agenter.services.document_processor - ERROR - 使用doc2txt加载.doc文档失败: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc, 错误: module 'doc2txt' has no attribute 'process' +2025-12-17 18:45:00,715 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc, 页数: 1 +2025-12-17 18:45:02,021 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-17 18:45:02,022 - th_agenter.services.document_processor - INFO - 语义分析得到 1 个分割点 +2025-12-17 18:45:02,022 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 0 个文档块 +2025-12-17 18:45:02,022 - th_agenter.services.document_processor - WARNING - 文档分割后无内容: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc +2025-12-17 18:45:02,023 - root - INFO - Clearing user context +2025-12-17 18:45:04,369 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 18:45:04,370 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 18:45:04,370 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 18:45:04,370 - root - INFO - Clearing user context +2025-12-17 18:45:04,371 - root - INFO - User context cleared before authentication +2025-12-17 18:45:04,371 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 18:45:04,374 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 18:45:04,374 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:45:04,374 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 18:45:04,374 - root - INFO - Verified current user ID in context: 2 +2025-12-17 18:45:04,375 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 18:45:04,375 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 18:45:04,375 - root - INFO - Looking for user with username: admin +2025-12-17 18:45:04,376 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 18:45:04,376 - root - INFO - Verification - ContextVar user: admin +2025-12-17 18:45:04,376 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 18:45:04,377 - root - INFO - Clearing user context +2025-12-17 18:45:16,659 - root - INFO - Shutting down TH-Agenter application... +2025-12-17 19:05:22,150 - root - INFO - Logging configured successfully +2025-12-17 19:05:22,238 - root - INFO - Logging configured successfully +2025-12-17 19:05:22,318 - root - INFO - Starting up TH-Agenter application... +2025-12-17 19:05:22,326 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 19:05:22,328 - root - INFO - Database tables created +2025-12-17 19:05:22,328 - root - INFO - Database initialized +2025-12-17 19:07:04,473 - root - INFO - Shutting down TH-Agenter application... +2025-12-17 19:07:06,556 - root - INFO - Logging configured successfully +2025-12-17 19:07:06,641 - root - INFO - Logging configured successfully +2025-12-17 19:07:06,720 - root - INFO - Starting up TH-Agenter application... +2025-12-17 19:07:06,726 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 19:07:06,727 - root - INFO - Database tables created +2025-12-17 19:07:06,728 - root - INFO - Database initialized +2025-12-17 19:08:34,336 - root - INFO - Shutting down TH-Agenter application... +2025-12-17 19:08:38,804 - root - INFO - Logging configured successfully +2025-12-17 19:08:38,890 - root - INFO - Logging configured successfully +2025-12-17 19:08:38,968 - root - INFO - Starting up TH-Agenter application... +2025-12-17 19:08:38,974 - root - INFO - SQLite database engine created: sqlite:///./TH-Agenter.db +2025-12-17 19:08:38,976 - root - INFO - Database tables created +2025-12-17 19:08:38,976 - root - INFO - Database initialized +2025-12-17 19:08:55,582 - root - INFO - [MIDDLEWARE] Processing request: GET /api/auth/me +2025-12-17 19:08:55,582 - root - INFO - [MIDDLEWARE] Checking path: /api/auth/me against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:55,582 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/auth/me +2025-12-17 19:08:55,582 - root - INFO - Clearing user context +2025-12-17 19:08:55,582 - root - INFO - User context cleared before authentication +2025-12-17 19:08:55,582 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:55,598 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:55,598 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:55,598 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:55,598 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:55,600 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:08:55,600 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:08:55,600 - root - INFO - Looking for user with username: admin +2025-12-17 19:08:55,600 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:08:55,600 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:55,601 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:08:55,603 - root - INFO - Clearing user context +2025-12-17 19:08:55,675 - root - INFO - [MIDDLEWARE] Processing request: GET /api/admin/roles/user-roles/user/2 +2025-12-17 19:08:55,675 - root - INFO - [MIDDLEWARE] Checking path: /api/admin/roles/user-roles/user/2 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:55,675 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/admin/roles/user-roles/user/2 +2025-12-17 19:08:55,675 - root - INFO - Clearing user context +2025-12-17 19:08:55,675 - root - INFO - User context cleared before authentication +2025-12-17 19:08:55,675 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:55,676 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:55,676 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:55,676 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:55,676 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:55,677 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:08:55,678 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:08:55,678 - root - INFO - Looking for user with username: admin +2025-12-17 19:08:55,678 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:08:55,678 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:55,678 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:08:55,681 - root - INFO - Clearing user context +2025-12-17 19:08:56,161 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/ +2025-12-17 19:08:56,161 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/ against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:56,161 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/ +2025-12-17 19:08:56,161 - root - INFO - Clearing user context +2025-12-17 19:08:56,161 - root - INFO - User context cleared before authentication +2025-12-17 19:08:56,161 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:56,162 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:56,162 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:56,162 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:56,162 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:56,164 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations +2025-12-17 19:08:56,164 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:56,164 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations +2025-12-17 19:08:56,164 - root - INFO - Clearing user context +2025-12-17 19:08:56,164 - root - INFO - User context cleared before authentication +2025-12-17 19:08:56,164 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:56,165 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:56,165 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:56,165 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:56,165 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:56,169 - root - INFO - Clearing user context +2025-12-17 19:08:56,170 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:08:56,170 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:08:56,170 - root - INFO - Looking for user with username: admin +2025-12-17 19:08:56,171 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:08:56,171 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:56,171 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:08:56,181 - root - INFO - Clearing user context +2025-12-17 19:08:56,182 - root - INFO - [MIDDLEWARE] Processing request: GET /api/chat/conversations/count +2025-12-17 19:08:56,182 - root - INFO - [MIDDLEWARE] Checking path: /api/chat/conversations/count against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:56,182 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/chat/conversations/count +2025-12-17 19:08:56,182 - root - INFO - Clearing user context +2025-12-17 19:08:56,182 - root - INFO - User context cleared before authentication +2025-12-17 19:08:56,182 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:56,183 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:56,183 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:56,183 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:56,183 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:56,185 - root - INFO - Clearing user context +2025-12-17 19:08:58,273 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 19:08:58,274 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:08:58,274 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 19:08:58,274 - root - INFO - Clearing user context +2025-12-17 19:08:58,275 - root - INFO - User context cleared before authentication +2025-12-17 19:08:58,275 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:08:58,276 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:08:58,276 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:58,276 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:08:58,276 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:08:58,277 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:08:58,277 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:08:58,277 - root - INFO - Looking for user with username: admin +2025-12-17 19:08:58,277 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:08:58,277 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:08:58,277 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:08:58,280 - root - INFO - Clearing user context +2025-12-17 19:09:02,622 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/14 +2025-12-17 19:09:02,622 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/14 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:02,622 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/14 +2025-12-17 19:09:02,623 - root - INFO - Clearing user context +2025-12-17 19:09:02,623 - root - INFO - User context cleared before authentication +2025-12-17 19:09:02,623 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:02,624 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:02,624 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:02,624 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:02,625 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:02,626 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:02,626 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:02,626 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:02,626 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:02,626 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:02,626 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:02,628 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc +2025-12-17 19:09:02,630 - th_agenter.embedding_factory - INFO - Creating embeddings with provider: zhipu, model: embedding-3 +2025-12-17 19:09:02,733 - th_agenter.zhipu_embeddings - INFO - ZhipuOpenAI Embeddings initialized with model: embedding-3 +2025-12-17 19:09:02,734 - th_agenter.services.document_processor - INFO - PGVector连接池已初始化: 192.168.10.11:5432 +2025-12-17 19:09:02,772 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=14 +2025-12-17 19:09:02,772 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=14 +2025-12-17 19:09:02,795 - th_agenter.services.document - INFO - Deleted document: 3904a2d0-e378-4609-94e7-8ce5471832b8_testdoc.doc (ID: 14) +2025-12-17 19:09:02,795 - root - INFO - Clearing user context +2025-12-17 19:09:02,885 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 19:09:02,885 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:02,886 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 19:09:02,886 - root - INFO - Clearing user context +2025-12-17 19:09:02,886 - root - INFO - User context cleared before authentication +2025-12-17 19:09:02,886 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:02,889 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:02,890 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:02,890 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:02,890 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:02,892 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:02,893 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:02,893 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:02,896 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:02,896 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:02,897 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:02,903 - root - INFO - Clearing user context +2025-12-17 19:09:04,786 - root - INFO - [MIDDLEWARE] Processing request: DELETE /api/knowledge-bases/7/documents/13 +2025-12-17 19:09:04,786 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents/13 against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:04,786 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents/13 +2025-12-17 19:09:04,787 - root - INFO - Clearing user context +2025-12-17 19:09:04,787 - root - INFO - User context cleared before authentication +2025-12-17 19:09:04,787 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:04,789 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:04,789 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:04,789 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:04,789 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:04,789 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:04,790 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:04,790 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:04,790 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:04,790 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:04,790 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:04,791 - th_agenter.services.document - INFO - Deleted file: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc +2025-12-17 19:09:04,830 - th_agenter.services.document_processor - WARNING - 未找到要删除的文档ID: document_id=13 +2025-12-17 19:09:04,831 - th_agenter.services.document_processor - INFO - 文档已从PostgreSQL pgvector存储中删除: document_id=13 +2025-12-17 19:09:04,847 - th_agenter.services.document - INFO - Deleted document: 8de50626-00ef-4b31-9928-7ede181ad074_testdoc1.doc (ID: 13) +2025-12-17 19:09:04,848 - root - INFO - Clearing user context +2025-12-17 19:09:05,192 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 19:09:05,192 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:05,192 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 19:09:05,192 - root - INFO - Clearing user context +2025-12-17 19:09:05,192 - root - INFO - User context cleared before authentication +2025-12-17 19:09:05,192 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:05,193 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:05,193 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:05,193 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:05,193 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:05,194 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:05,194 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:05,194 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:05,195 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:05,195 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:05,195 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:05,196 - root - INFO - Clearing user context +2025-12-17 19:09:09,139 - root - INFO - [MIDDLEWARE] Processing request: POST /api/knowledge-bases/7/documents +2025-12-17 19:09:09,140 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:09,140 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 19:09:09,140 - root - INFO - Clearing user context +2025-12-17 19:09:09,140 - root - INFO - User context cleared before authentication +2025-12-17 19:09:09,141 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:09,142 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:09,142 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:09,143 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:09,143 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:09,148 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:09,149 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:09,149 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:09,151 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:09,151 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:09,152 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:09,185 - th_agenter.services.document - INFO - Uploaded document: testdoc.doc to KB 7 (Doc ID: 13) +2025-12-17 19:09:09,192 - th_agenter.services.document_processor - INFO - 开始处理文档 ID: 13, 路径: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc +2025-12-17 19:09:09,193 - th_agenter.services.document_processor - WARNING - 检测到.doc格式文件,尝试使用doc2txt加载: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc +2025-12-17 19:09:09,193 - th_agenter.services.document_processor - INFO - 使用doc2txt.extract_text处理.doc文件: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc +2025-12-17 19:09:09,213 - th_agenter.services.document_processor - INFO - .doc文件处理完成,获取到文本长度: 5134 字符 +2025-12-17 19:09:09,213 - th_agenter.services.document_processor - INFO - 成功加载文档: /home/thsw2/jcq/workspace/HXF/backend/data/uploads/kb_7/a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc, 页数: 1 +2025-12-17 19:09:20,076 - httpx - INFO - HTTP Request: POST https://ark.cn-beijing.volces.com/api/v3/chat/completions "HTTP/1.1 200 OK" +2025-12-17 19:09:20,104 - th_agenter.services.document_processor - INFO - 语义分析得到 47 个分割点 +2025-12-17 19:09:20,105 - th_agenter.services.document_processor - INFO - 文档分割完成,共生成 17 个文档块 +2025-12-17 19:09:20,435 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:20,586 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:20,715 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:20,862 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,008 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,135 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,240 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,393 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,525 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,648 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,778 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:21,883 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,002 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,111 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,205 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,344 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,489 - httpx - INFO - HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" +2025-12-17 19:09:22,657 - th_agenter.services.document_processor - INFO - 文档已添加到PostgreSQL pgvector存储: embeddings_kb_7 +2025-12-17 19:09:22,672 - th_agenter.services.document_processor - INFO - 文档处理完成: {'document_id': 13, 'status': 'success', 'chunks_count': 17, 'message': '文档处理完成'} +2025-12-17 19:09:22,686 - th_agenter.services.document - INFO - Processed document: a5fb94a0-dc86-495f-af2b-b288e4b06362_testdoc.doc (ID: 13) +2025-12-17 19:09:22,688 - root - INFO - Clearing user context +2025-12-17 19:09:25,025 - root - INFO - [MIDDLEWARE] Processing request: GET /api/knowledge-bases/7/documents +2025-12-17 19:09:25,025 - root - INFO - [MIDDLEWARE] Checking path: /api/knowledge-bases/7/documents against exclude_paths: ['/docs', '/redoc', '/openapi.json', '/api/auth/login', '/api/auth/register', '/api/auth/login-oauth', '/auth/login', '/auth/register', '/auth/login-oauth', '/health', '/test'] +2025-12-17 19:09:25,026 - root - INFO - [MIDDLEWARE] Processing authenticated request: /api/knowledge-bases/7/documents +2025-12-17 19:09:25,026 - root - INFO - Clearing user context +2025-12-17 19:09:25,026 - root - INFO - User context cleared before authentication +2025-12-17 19:09:25,026 - root - INFO - Authorization header received: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc2NTk4NTc2NX0.nfXHwiXXmdZC1erm5nJU_HwBDnbVb7FaEU52CYn4oeU +2025-12-17 19:09:25,029 - root - INFO - Setting user in context with token: admin (ID: 2) +2025-12-17 19:09:25,029 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:25,029 - root - INFO - User admin (ID: 2) authenticated and set in context +2025-12-17 19:09:25,029 - root - INFO - Verified current user ID in context: 2 +2025-12-17 19:09:25,031 - root - INFO - Received token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ... +2025-12-17 19:09:25,031 - root - INFO - Token payload: {'sub': 'admin', 'exp': 1765985765} +2025-12-17 19:09:25,031 - root - INFO - Looking for user with username: admin +2025-12-17 19:09:25,031 - root - INFO - Setting user in context: admin (ID: 2) +2025-12-17 19:09:25,031 - root - INFO - Verification - ContextVar user: admin +2025-12-17 19:09:25,031 - root - INFO - User admin (ID: 2) set in UserContext +2025-12-17 19:09:25,033 - root - INFO - Clearing user context diff --git a/backend/data/uploads/kb_1/4e71f1b4-df3c-4ad4-b839-e8af49c00c76_高速公路低空算法验证方案.docx b/backend/data/uploads/kb_1/4e71f1b4-df3c-4ad4-b839-e8af49c00c76_高速公路低空算法验证方案.docx new file mode 100644 index 0000000000000000000000000000000000000000..c1a842d128d645a85fe78e97f18a0f5f61118c99 GIT binary patch literal 17769 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 literal 0 HcmV?d00001 diff --git a/backend/data/uploads/kb_2/758a9e60-82a4-4099-818a-186aa0440db6_陕西算法分析统计1023.docx b/backend/data/uploads/kb_2/758a9e60-82a4-4099-818a-186aa0440db6_陕西算法分析统计1023.docx new file mode 100644 index 0000000000000000000000000000000000000000..56942699f5f05d70065c5660029f94cf3687ed22 GIT binary patch literal 4423816 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%0A6xm@$}59qK51HfhL@=HGWn-p!*3#cz!Y8 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⋙2m>R6bR<`q;t-(2 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

o;6* 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

0QZxjj9p8L}@xfSahs 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

uVI$Q7NC&7iq0#ux%q>N!M`ng`Dc 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

;hZj;n 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≤5_ZE5Pf_)qeaj`Io{2(t*?dRA` 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

>m|!l^D|U3EMhbu6~W6fKU^aXb;P7 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ф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