aiecs 1.0.1__py3-none-any.whl → 1.7.17__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aiecs might be problematic. Click here for more details.

Files changed (340) hide show
  1. aiecs/__init__.py +13 -16
  2. aiecs/__main__.py +7 -7
  3. aiecs/aiecs_client.py +269 -75
  4. aiecs/application/executors/operation_executor.py +79 -54
  5. aiecs/application/knowledge_graph/__init__.py +7 -0
  6. aiecs/application/knowledge_graph/builder/__init__.py +37 -0
  7. aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  8. aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  9. aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
  10. aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
  11. aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  12. aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  13. aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
  14. aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  15. aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
  16. aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
  17. aiecs/application/knowledge_graph/extractors/base.py +98 -0
  18. aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
  19. aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
  20. aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
  21. aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  22. aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  23. aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  24. aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  25. aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  26. aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  27. aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
  28. aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  29. aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  30. aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
  31. aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  32. aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  33. aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
  34. aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  35. aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  36. aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
  37. aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
  38. aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
  39. aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
  40. aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
  41. aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
  42. aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
  43. aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
  44. aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
  45. aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
  46. aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
  47. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
  48. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
  49. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
  50. aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
  51. aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
  52. aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
  53. aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
  54. aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
  55. aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
  56. aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
  57. aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
  58. aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
  59. aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
  60. aiecs/application/knowledge_graph/search/__init__.py +59 -0
  61. aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
  62. aiecs/application/knowledge_graph/search/reranker.py +293 -0
  63. aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
  64. aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
  65. aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
  66. aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
  67. aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
  68. aiecs/application/knowledge_graph/validators/__init__.py +13 -0
  69. aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
  70. aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
  71. aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
  72. aiecs/common/__init__.py +9 -0
  73. aiecs/common/knowledge_graph/__init__.py +17 -0
  74. aiecs/common/knowledge_graph/runnable.py +471 -0
  75. aiecs/config/__init__.py +20 -5
  76. aiecs/config/config.py +762 -31
  77. aiecs/config/graph_config.py +131 -0
  78. aiecs/config/tool_config.py +435 -0
  79. aiecs/core/__init__.py +29 -13
  80. aiecs/core/interface/__init__.py +2 -2
  81. aiecs/core/interface/execution_interface.py +22 -22
  82. aiecs/core/interface/storage_interface.py +37 -88
  83. aiecs/core/registry/__init__.py +31 -0
  84. aiecs/core/registry/service_registry.py +92 -0
  85. aiecs/domain/__init__.py +270 -1
  86. aiecs/domain/agent/__init__.py +191 -0
  87. aiecs/domain/agent/base_agent.py +3949 -0
  88. aiecs/domain/agent/exceptions.py +99 -0
  89. aiecs/domain/agent/graph_aware_mixin.py +569 -0
  90. aiecs/domain/agent/hybrid_agent.py +1731 -0
  91. aiecs/domain/agent/integration/__init__.py +29 -0
  92. aiecs/domain/agent/integration/context_compressor.py +216 -0
  93. aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
  94. aiecs/domain/agent/integration/protocols.py +281 -0
  95. aiecs/domain/agent/integration/retry_policy.py +218 -0
  96. aiecs/domain/agent/integration/role_config.py +213 -0
  97. aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
  98. aiecs/domain/agent/lifecycle.py +291 -0
  99. aiecs/domain/agent/llm_agent.py +692 -0
  100. aiecs/domain/agent/memory/__init__.py +12 -0
  101. aiecs/domain/agent/memory/conversation.py +1124 -0
  102. aiecs/domain/agent/migration/__init__.py +14 -0
  103. aiecs/domain/agent/migration/conversion.py +163 -0
  104. aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
  105. aiecs/domain/agent/models.py +894 -0
  106. aiecs/domain/agent/observability.py +479 -0
  107. aiecs/domain/agent/persistence.py +449 -0
  108. aiecs/domain/agent/prompts/__init__.py +29 -0
  109. aiecs/domain/agent/prompts/builder.py +159 -0
  110. aiecs/domain/agent/prompts/formatters.py +187 -0
  111. aiecs/domain/agent/prompts/template.py +255 -0
  112. aiecs/domain/agent/registry.py +253 -0
  113. aiecs/domain/agent/tool_agent.py +444 -0
  114. aiecs/domain/agent/tools/__init__.py +15 -0
  115. aiecs/domain/agent/tools/schema_generator.py +377 -0
  116. aiecs/domain/community/__init__.py +155 -0
  117. aiecs/domain/community/agent_adapter.py +469 -0
  118. aiecs/domain/community/analytics.py +432 -0
  119. aiecs/domain/community/collaborative_workflow.py +648 -0
  120. aiecs/domain/community/communication_hub.py +634 -0
  121. aiecs/domain/community/community_builder.py +320 -0
  122. aiecs/domain/community/community_integration.py +796 -0
  123. aiecs/domain/community/community_manager.py +803 -0
  124. aiecs/domain/community/decision_engine.py +849 -0
  125. aiecs/domain/community/exceptions.py +231 -0
  126. aiecs/domain/community/models/__init__.py +33 -0
  127. aiecs/domain/community/models/community_models.py +234 -0
  128. aiecs/domain/community/resource_manager.py +461 -0
  129. aiecs/domain/community/shared_context_manager.py +589 -0
  130. aiecs/domain/context/__init__.py +40 -10
  131. aiecs/domain/context/context_engine.py +1910 -0
  132. aiecs/domain/context/conversation_models.py +87 -53
  133. aiecs/domain/context/graph_memory.py +582 -0
  134. aiecs/domain/execution/model.py +12 -4
  135. aiecs/domain/knowledge_graph/__init__.py +19 -0
  136. aiecs/domain/knowledge_graph/models/__init__.py +52 -0
  137. aiecs/domain/knowledge_graph/models/entity.py +148 -0
  138. aiecs/domain/knowledge_graph/models/evidence.py +178 -0
  139. aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
  140. aiecs/domain/knowledge_graph/models/path.py +171 -0
  141. aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
  142. aiecs/domain/knowledge_graph/models/query.py +261 -0
  143. aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
  144. aiecs/domain/knowledge_graph/models/relation.py +202 -0
  145. aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
  146. aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
  147. aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
  148. aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
  149. aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
  150. aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
  151. aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
  152. aiecs/domain/task/dsl_processor.py +172 -56
  153. aiecs/domain/task/model.py +20 -8
  154. aiecs/domain/task/task_context.py +27 -24
  155. aiecs/infrastructure/__init__.py +0 -2
  156. aiecs/infrastructure/graph_storage/__init__.py +11 -0
  157. aiecs/infrastructure/graph_storage/base.py +837 -0
  158. aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
  159. aiecs/infrastructure/graph_storage/cache.py +424 -0
  160. aiecs/infrastructure/graph_storage/distributed.py +223 -0
  161. aiecs/infrastructure/graph_storage/error_handling.py +380 -0
  162. aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
  163. aiecs/infrastructure/graph_storage/health_checks.py +378 -0
  164. aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  165. aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
  166. aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
  167. aiecs/infrastructure/graph_storage/metrics.py +344 -0
  168. aiecs/infrastructure/graph_storage/migration.py +400 -0
  169. aiecs/infrastructure/graph_storage/pagination.py +483 -0
  170. aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
  171. aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  172. aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  173. aiecs/infrastructure/graph_storage/protocols.py +76 -0
  174. aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
  175. aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
  176. aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  177. aiecs/infrastructure/graph_storage/streaming.py +487 -0
  178. aiecs/infrastructure/graph_storage/tenant.py +412 -0
  179. aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
  180. aiecs/infrastructure/messaging/websocket_manager.py +51 -35
  181. aiecs/infrastructure/monitoring/__init__.py +22 -0
  182. aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
  183. aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
  184. aiecs/infrastructure/monitoring/structured_logger.py +3 -7
  185. aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
  186. aiecs/infrastructure/persistence/__init__.py +14 -1
  187. aiecs/infrastructure/persistence/context_engine_client.py +184 -0
  188. aiecs/infrastructure/persistence/database_manager.py +67 -43
  189. aiecs/infrastructure/persistence/file_storage.py +180 -103
  190. aiecs/infrastructure/persistence/redis_client.py +74 -21
  191. aiecs/llm/__init__.py +73 -25
  192. aiecs/llm/callbacks/__init__.py +11 -0
  193. aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
  194. aiecs/llm/client_factory.py +230 -37
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +328 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  199. aiecs/llm/clients/googleai_client.py +314 -0
  200. aiecs/llm/clients/openai_client.py +158 -0
  201. aiecs/llm/clients/openai_compatible_mixin.py +367 -0
  202. aiecs/llm/clients/vertex_client.py +1186 -0
  203. aiecs/llm/clients/xai_client.py +201 -0
  204. aiecs/llm/config/__init__.py +51 -0
  205. aiecs/llm/config/config_loader.py +272 -0
  206. aiecs/llm/config/config_validator.py +206 -0
  207. aiecs/llm/config/model_config.py +143 -0
  208. aiecs/llm/protocols.py +149 -0
  209. aiecs/llm/utils/__init__.py +10 -0
  210. aiecs/llm/utils/validate_config.py +89 -0
  211. aiecs/main.py +140 -121
  212. aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
  213. aiecs/scripts/aid/__init__.py +19 -0
  214. aiecs/scripts/aid/module_checker.py +499 -0
  215. aiecs/scripts/aid/version_manager.py +235 -0
  216. aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
  217. aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
  218. aiecs/scripts/dependance_check/__init__.py +15 -0
  219. aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  220. aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
  221. aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
  222. aiecs/scripts/dependance_patch/__init__.py +7 -0
  223. aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
  224. aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
  225. aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
  226. aiecs/scripts/knowledge_graph/__init__.py +3 -0
  227. aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  228. aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  229. aiecs/scripts/tools_develop/README.md +671 -0
  230. aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  231. aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  232. aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
  233. aiecs/scripts/tools_develop/__init__.py +21 -0
  234. aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  235. aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
  236. aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  237. aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  238. aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
  239. aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  240. aiecs/scripts/tools_develop/verify_tools.py +352 -0
  241. aiecs/tasks/__init__.py +0 -1
  242. aiecs/tasks/worker.py +115 -47
  243. aiecs/tools/__init__.py +194 -72
  244. aiecs/tools/apisource/__init__.py +99 -0
  245. aiecs/tools/apisource/intelligence/__init__.py +19 -0
  246. aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
  247. aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
  248. aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
  249. aiecs/tools/apisource/monitoring/__init__.py +9 -0
  250. aiecs/tools/apisource/monitoring/metrics.py +330 -0
  251. aiecs/tools/apisource/providers/__init__.py +112 -0
  252. aiecs/tools/apisource/providers/base.py +671 -0
  253. aiecs/tools/apisource/providers/census.py +397 -0
  254. aiecs/tools/apisource/providers/fred.py +535 -0
  255. aiecs/tools/apisource/providers/newsapi.py +409 -0
  256. aiecs/tools/apisource/providers/worldbank.py +352 -0
  257. aiecs/tools/apisource/reliability/__init__.py +12 -0
  258. aiecs/tools/apisource/reliability/error_handler.py +363 -0
  259. aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
  260. aiecs/tools/apisource/tool.py +832 -0
  261. aiecs/tools/apisource/utils/__init__.py +9 -0
  262. aiecs/tools/apisource/utils/validators.py +334 -0
  263. aiecs/tools/base_tool.py +415 -21
  264. aiecs/tools/docs/__init__.py +121 -0
  265. aiecs/tools/docs/ai_document_orchestrator.py +607 -0
  266. aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
  267. aiecs/tools/docs/content_insertion_tool.py +1320 -0
  268. aiecs/tools/docs/document_creator_tool.py +1464 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1016 -0
  271. aiecs/tools/docs/document_writer_tool.py +2008 -0
  272. aiecs/tools/knowledge_graph/__init__.py +17 -0
  273. aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
  274. aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
  275. aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
  276. aiecs/tools/langchain_adapter.py +300 -138
  277. aiecs/tools/schema_generator.py +455 -0
  278. aiecs/tools/search_tool/__init__.py +100 -0
  279. aiecs/tools/search_tool/analyzers.py +581 -0
  280. aiecs/tools/search_tool/cache.py +264 -0
  281. aiecs/tools/search_tool/constants.py +128 -0
  282. aiecs/tools/search_tool/context.py +224 -0
  283. aiecs/tools/search_tool/core.py +778 -0
  284. aiecs/tools/search_tool/deduplicator.py +119 -0
  285. aiecs/tools/search_tool/error_handler.py +242 -0
  286. aiecs/tools/search_tool/metrics.py +343 -0
  287. aiecs/tools/search_tool/rate_limiter.py +172 -0
  288. aiecs/tools/search_tool/schemas.py +275 -0
  289. aiecs/tools/statistics/__init__.py +80 -0
  290. aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
  291. aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
  292. aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
  293. aiecs/tools/statistics/data_loader_tool.py +555 -0
  294. aiecs/tools/statistics/data_profiler_tool.py +638 -0
  295. aiecs/tools/statistics/data_transformer_tool.py +580 -0
  296. aiecs/tools/statistics/data_visualizer_tool.py +498 -0
  297. aiecs/tools/statistics/model_trainer_tool.py +507 -0
  298. aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
  299. aiecs/tools/task_tools/__init__.py +49 -36
  300. aiecs/tools/task_tools/chart_tool.py +200 -184
  301. aiecs/tools/task_tools/classfire_tool.py +268 -267
  302. aiecs/tools/task_tools/image_tool.py +220 -141
  303. aiecs/tools/task_tools/office_tool.py +226 -146
  304. aiecs/tools/task_tools/pandas_tool.py +477 -121
  305. aiecs/tools/task_tools/report_tool.py +390 -142
  306. aiecs/tools/task_tools/research_tool.py +149 -79
  307. aiecs/tools/task_tools/scraper_tool.py +339 -145
  308. aiecs/tools/task_tools/stats_tool.py +448 -209
  309. aiecs/tools/temp_file_manager.py +26 -24
  310. aiecs/tools/tool_executor/__init__.py +18 -16
  311. aiecs/tools/tool_executor/tool_executor.py +364 -52
  312. aiecs/utils/LLM_output_structor.py +74 -48
  313. aiecs/utils/__init__.py +14 -3
  314. aiecs/utils/base_callback.py +0 -3
  315. aiecs/utils/cache_provider.py +696 -0
  316. aiecs/utils/execution_utils.py +50 -31
  317. aiecs/utils/prompt_loader.py +1 -0
  318. aiecs/utils/token_usage_repository.py +37 -11
  319. aiecs/ws/socket_server.py +14 -4
  320. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
  321. aiecs-1.7.17.dist-info/RECORD +337 -0
  322. aiecs-1.7.17.dist-info/entry_points.txt +13 -0
  323. aiecs/config/registry.py +0 -19
  324. aiecs/domain/context/content_engine.py +0 -982
  325. aiecs/llm/base_client.py +0 -99
  326. aiecs/llm/openai_client.py +0 -125
  327. aiecs/llm/vertex_client.py +0 -186
  328. aiecs/llm/xai_client.py +0 -184
  329. aiecs/scripts/dependency_checker.py +0 -857
  330. aiecs/scripts/quick_dependency_check.py +0 -269
  331. aiecs/tools/task_tools/search_api.py +0 -7
  332. aiecs-1.0.1.dist-info/RECORD +0 -90
  333. aiecs-1.0.1.dist-info/entry_points.txt +0 -7
  334. /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
  335. /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
  336. /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
  337. /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
  338. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,352 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ 快速验证脚本:展示 aiecs.tools 注册的所有工具和功能
4
+
5
+ 使用方法:
6
+ poetry run python -m aiecs.scripts.tools_develop.verify_tools
7
+
8
+ 功能:
9
+ 1. 列出所有注册的工具(按类别分组)
10
+ 2. 交互式选择工具查看详细功能
11
+ 3. 实际加载指定工具,展示真实的原子功能
12
+ """
13
+
14
+ import sys
15
+ import os
16
+ import inspect
17
+ from typing import List, Dict
18
+ from collections import defaultdict
19
+
20
+ # 添加项目根目录到 Python 路径
21
+ current_dir = os.path.dirname(os.path.abspath(__file__))
22
+ project_root = os.path.abspath(os.path.join(current_dir, "../../../"))
23
+ sys.path.insert(0, project_root)
24
+
25
+
26
+ def get_tool_methods(tool_instance) -> List[str]:
27
+ """获取工具实例的所有公共方法(原子功能)"""
28
+ methods = []
29
+ for name, method in inspect.getmembers(tool_instance, predicate=inspect.ismethod):
30
+ # 只获取公共方法,排除私有方法和特殊方法
31
+ if not name.startswith("_"):
32
+ methods.append(name)
33
+ return sorted(methods)
34
+
35
+
36
+ def display_tools_by_category(tools: List[Dict]):
37
+ """按类别分组显示工具"""
38
+ # 按类别分组
39
+ categories = defaultdict(list)
40
+ for tool in tools:
41
+ category = tool.get("category", "unknown")
42
+ categories[category].append(tool)
43
+
44
+ # 显示每个类别
45
+ category_names = {
46
+ "task": "任务工具",
47
+ "docs": "文档工具",
48
+ "statistics": "数据统计工具",
49
+ "unknown": "其他工具",
50
+ }
51
+
52
+ tool_index = 1
53
+ tool_map = {} # 用于存储序号到工具名的映射
54
+
55
+ for category in ["task", "docs", "statistics", "unknown"]:
56
+ if category not in categories:
57
+ continue
58
+
59
+ category_tools = categories[category]
60
+ category_display = category_names.get(category, category.upper())
61
+
62
+ print(f"\n{'=' * 80}")
63
+ print(f"📁 {category_display} ({len(category_tools)} 个)")
64
+ print(f"{'=' * 80}")
65
+
66
+ for tool in category_tools:
67
+ tool_name = tool["name"]
68
+ tool_map[tool_index] = tool_name
69
+
70
+ print(f"\n[{tool_index}] {tool_name}")
71
+ print(f" 描述: {tool.get('description', '无描述')}")
72
+ print(f" 状态: {tool.get('status', '未知')}")
73
+
74
+ tool_index += 1
75
+
76
+ return tool_map
77
+
78
+
79
+ def auto_discover_tool_modules():
80
+ """自动发现工具模块映射,无需手动维护"""
81
+ import os
82
+ import re
83
+
84
+ tool_module_map = {}
85
+
86
+ # 扫描 aiecs/tools 目录
87
+ tools_dir = os.path.join(project_root, "aiecs", "tools")
88
+
89
+ # 定义工具目录
90
+ tool_dirs = {
91
+ "task_tools": "aiecs.tools.task_tools",
92
+ "docs": "aiecs.tools.docs",
93
+ "statistics": "aiecs.tools.statistics",
94
+ "api_sources": "aiecs.tools.api_sources", # 旧的 API sources (如果存在)
95
+ "apisource": "aiecs.tools.apisource", # 新的 APISource Tool
96
+ "search_tool": "aiecs.tools.search_tool",
97
+ }
98
+
99
+ for dir_name, package_name in tool_dirs.items():
100
+ dir_path = os.path.join(tools_dir, dir_name)
101
+ if not os.path.exists(dir_path):
102
+ continue
103
+
104
+ # Check if this is a package (has __init__.py) or a directory of
105
+ # modules
106
+ init_file = os.path.join(dir_path, "__init__.py")
107
+ files_to_scan = []
108
+
109
+ if os.path.isfile(init_file):
110
+ # For packages, scan __init__.py and use package name directly
111
+ files_to_scan.append(("__init__.py", init_file, package_name))
112
+
113
+ # 扫描目录中的所有其他 Python 文件
114
+ for filename in os.listdir(dir_path):
115
+ if filename.endswith(".py") and not filename.startswith("__"):
116
+ file_path = os.path.join(dir_path, filename)
117
+ module_name = filename[:-3] # 去掉 .py 扩展名
118
+ module_path = f"{package_name}.{module_name}"
119
+ files_to_scan.append((filename, file_path, module_path))
120
+
121
+ # Process all files
122
+ for filename, file_path, module_path in files_to_scan:
123
+ try:
124
+ with open(file_path, "r", encoding="utf-8") as f:
125
+ content = f.read()
126
+
127
+ # 查找 @register_tool 装饰器 (两种模式)
128
+ # Pattern 1: @register_tool("name") decorator syntax
129
+ decorator_pattern = r'@register_tool\([\'"]([^\'"]+)[\'"]\)'
130
+ decorator_matches = re.findall(decorator_pattern, content)
131
+
132
+ # Pattern 2: register_tool("name")(ClassName) function call
133
+ # syntax
134
+ function_pattern = r'register_tool\([\'"]([^\'"]+)[\'"]\)\([A-Za-z_][A-Za-z0-9_]*\)'
135
+ function_matches = re.findall(function_pattern, content)
136
+
137
+ # Combine all matches
138
+ all_matches = list(set(decorator_matches + function_matches))
139
+
140
+ for tool_name in all_matches:
141
+ tool_module_map[tool_name] = {
142
+ "module_file": (filename[:-3] if filename != "__init__.py" else "__init__"),
143
+ "package": package_name,
144
+ "module_path": module_path,
145
+ "category": dir_name,
146
+ }
147
+ except Exception:
148
+ pass
149
+
150
+ return tool_module_map
151
+
152
+
153
+ def load_and_inspect_tool(tool_name: str):
154
+ """加载并检查指定工具的详细功能"""
155
+ from aiecs.tools import get_tool
156
+ import importlib
157
+
158
+ print(f"\n{'=' * 80}")
159
+ print(f"🔍 加载工具: {tool_name}")
160
+ print(f"{'=' * 80}")
161
+
162
+ try:
163
+ # 自动发现工具模块
164
+ print("\n⏳ 正在加载...")
165
+
166
+ tool_module_map = auto_discover_tool_modules()
167
+
168
+ # 如果找到了工具的模块信息,预加载模块
169
+ if tool_name in tool_module_map:
170
+ info = tool_module_map[tool_name]
171
+ module_path = info.get("module_path") or f"{info['package']}.{info['module_file']}"
172
+
173
+ try:
174
+ importlib.import_module(module_path)
175
+ print(f" 已触发 {module_path} 模块加载")
176
+ except Exception as e:
177
+ print(f" 警告: 无法预加载模块 ({e})")
178
+ else:
179
+ print(" 未找到工具模块映射,尝试直接加载...")
180
+
181
+ # 获取工具实例
182
+ tool = get_tool(tool_name)
183
+
184
+ # 检查是否为占位符
185
+ is_placeholder = getattr(tool, "is_placeholder", False)
186
+
187
+ if is_placeholder:
188
+ print("\n⚠️ 工具仍处于占位符状态")
189
+ print(f" 描述: {tool.description}")
190
+ print(" 提示: 此工具需要在调用具体方法时才会完全实例化")
191
+ return
192
+
193
+ # 显示工具基本信息
194
+ print("\n✅ 工具已成功加载")
195
+ print(f" 类名: {tool.__class__.__name__}")
196
+ print(f" 模块: {tool.__class__.__module__}")
197
+
198
+ if hasattr(tool, "description"):
199
+ print(f" 描述: {tool.description}")
200
+
201
+ if hasattr(tool, "category"):
202
+ print(f" 类别: {tool.category}")
203
+
204
+ # 获取所有方法(原子功能)
205
+ methods = get_tool_methods(tool)
206
+
207
+ if not methods:
208
+ print("\n❌ 未发现公共方法")
209
+ return
210
+
211
+ print(f"\n📋 原子功能列表 (共 {len(methods)} 个方法):")
212
+ print("-" * 80)
213
+
214
+ for i, method_name in enumerate(methods, 1):
215
+ try:
216
+ method = getattr(tool, method_name)
217
+
218
+ # 获取方法签名
219
+ sig = inspect.signature(method)
220
+ params = []
221
+ for param_name, param in sig.parameters.items():
222
+ if param_name == "self":
223
+ continue
224
+
225
+ # 构建参数字符串
226
+ param_str = param_name
227
+ if param.annotation != inspect.Parameter.empty:
228
+ param_str += f": {param.annotation.__name__ if hasattr(param.annotation, '__name__') else str(param.annotation)}"
229
+ if param.default != inspect.Parameter.empty:
230
+ param_str += f" = {param.default!r}"
231
+ params.append(param_str)
232
+
233
+ # 获取返回类型
234
+ return_annotation = ""
235
+ if sig.return_annotation != inspect.Signature.empty:
236
+ return_type = sig.return_annotation
237
+ return_annotation = f" -> {return_type.__name__ if hasattr(return_type, '__name__') else str(return_type)}"
238
+
239
+ # 显示方法签名
240
+ print(f"\n [{i}] {method_name}({', '.join(params)}){return_annotation}")
241
+
242
+ # 获取文档字符串
243
+ if method.__doc__:
244
+ doc_lines = method.__doc__.strip().split("\n")
245
+ first_line = doc_lines[0].strip()
246
+ if first_line:
247
+ print(f" {first_line}")
248
+
249
+ except Exception as e:
250
+ print(f"\n [{i}] {method_name}")
251
+ print(f" (无法获取详细信息: {e})")
252
+
253
+ print(f"\n{'-' * 80}")
254
+
255
+ except Exception as e:
256
+ print(f"\n❌ 加载工具失败: {e}")
257
+ import traceback
258
+
259
+ traceback.print_exc()
260
+
261
+
262
+ def interactive_mode(tool_map: Dict[int, str]):
263
+ """交互式模式"""
264
+ print(f"\n{'=' * 80}")
265
+ print("🎮 交互模式")
266
+ print(f"{'=' * 80}")
267
+ print("\n提示:")
268
+ print(" - 输入工具序号 (1-{}) 查看详细功能".format(len(tool_map)))
269
+ print(" - 输入工具名称查看详细功能")
270
+ print(" - 输入 'list' 重新显示工具列表")
271
+ print(" - 输入 'q' 或 'quit' 退出")
272
+
273
+ while True:
274
+ try:
275
+ user_input = input("\n👉 请选择工具 > ").strip()
276
+
277
+ if not user_input:
278
+ continue
279
+
280
+ if user_input.lower() in ["q", "quit", "exit"]:
281
+ print("\n👋 再见!")
282
+ break
283
+
284
+ if user_input.lower() == "list":
285
+ from aiecs.tools import list_tools
286
+
287
+ tools = list_tools()
288
+ display_tools_by_category(tools)
289
+ continue
290
+
291
+ # 尝试作为序号解析
292
+ tool_name = None
293
+ try:
294
+ index = int(user_input)
295
+ if index in tool_map:
296
+ tool_name = tool_map[index]
297
+ else:
298
+ print(f"❌ 无效的序号: {index}")
299
+ continue
300
+ except ValueError:
301
+ # 作为工具名称
302
+ tool_name = user_input
303
+
304
+ if tool_name:
305
+ load_and_inspect_tool(tool_name)
306
+
307
+ except KeyboardInterrupt:
308
+ print("\n\n👋 再见!")
309
+ break
310
+ except EOFError:
311
+ print("\n\n👋 再见!")
312
+ break
313
+ except Exception as e:
314
+ print(f"\n❌ 错误: {e}")
315
+
316
+
317
+ def main():
318
+ """主函数:验证和展示所有注册的工具"""
319
+ print("=" * 80)
320
+ print("AIECS Tools 注册工具验证")
321
+ print("=" * 80)
322
+
323
+ try:
324
+ from aiecs.tools import list_tools
325
+
326
+ # 获取所有注册的工具
327
+ tools = list_tools()
328
+
329
+ print(f"\n发现 {len(tools)} 个注册的工具")
330
+
331
+ # 按类别显示工具
332
+ tool_map = display_tools_by_category(tools)
333
+
334
+ print(f"\n{'=' * 80}")
335
+ print(f"✅ 工具列表显示完成! 共 {len(tools)} 个工具")
336
+ print(f"{'=' * 80}")
337
+
338
+ # 进入交互模式
339
+ interactive_mode(tool_map)
340
+
341
+ except ImportError as e:
342
+ print(f"❌ 导入错误: {e}")
343
+ print("请确保在正确的项目目录中运行此脚本")
344
+ except Exception as e:
345
+ print(f"❌ 运行错误: {e}")
346
+ import traceback
347
+
348
+ traceback.print_exc()
349
+
350
+
351
+ if __name__ == "__main__":
352
+ main()
aiecs/tasks/__init__.py CHANGED
@@ -1,2 +1 @@
1
1
  # This file makes the app/tasks directory a Python package
2
- from .worker import celery_app
aiecs/tasks/worker.py CHANGED
@@ -1,12 +1,11 @@
1
- from celery import Celery
1
+ from aiecs.domain.execution.model import TaskStatus
2
+ from celery import Celery # type: ignore[import-untyped]
2
3
  from aiecs.config.config import get_settings
3
- from aiecs.domain.task.task_context import build_context
4
- from aiecs.config.registry import get_ai_service
5
4
  from aiecs.ws.socket_server import push_progress
5
+ from aiecs.core.registry import get_ai_service
6
6
  import logging
7
- import json
8
- from enum import Enum
9
- from typing import Dict, Any, Optional
7
+ import asyncio
8
+ from typing import Dict, Any
10
9
 
11
10
  logger = logging.getLogger(__name__)
12
11
 
@@ -15,59 +14,117 @@ celery_app = Celery("ai_worker", broker=settings.celery_broker_url)
15
14
 
16
15
  # Configure Celery
17
16
  celery_app.conf.update(
18
- task_serializer='json',
19
- accept_content=['json'],
20
- result_serializer='json',
21
- timezone='UTC',
17
+ task_serializer="json",
18
+ accept_content=["json"],
19
+ result_serializer="json",
20
+ timezone="UTC",
22
21
  enable_utc=True,
23
22
  task_queues={
24
- 'fast_tasks': {'exchange': 'fast_tasks', 'routing_key': 'fast_tasks'},
25
- 'heavy_tasks': {'exchange': 'heavy_tasks', 'routing_key': 'heavy_tasks'}
23
+ "fast_tasks": {"exchange": "fast_tasks", "routing_key": "fast_tasks"},
24
+ "heavy_tasks": {
25
+ "exchange": "heavy_tasks",
26
+ "routing_key": "heavy_tasks",
27
+ },
26
28
  },
27
29
  task_routes={
28
- 'aiecs.tasks.worker.execute_task': {'queue': 'fast_tasks'},
29
- 'aiecs.tasks.worker.execute_heavy_task': {'queue': 'heavy_tasks'}
30
- }
30
+ "aiecs.tasks.worker.execute_task": {"queue": "fast_tasks"},
31
+ "aiecs.tasks.worker.execute_heavy_task": {"queue": "heavy_tasks"},
32
+ },
31
33
  )
32
34
 
33
- from aiecs.domain.execution.model import TaskStatus
34
35
 
35
36
  @celery_app.task(bind=True, name="aiecs.tasks.worker.execute_task")
36
- def execute_task(self, task_name: str, user_id: str, task_id: str, step: int,
37
- mode: str, service: str, input_data: Dict[str, Any], context: Dict[str, Any]):
37
+ def execute_task(
38
+ self,
39
+ task_name: str,
40
+ user_id: str,
41
+ task_id: str,
42
+ step: int,
43
+ mode: str,
44
+ service: str,
45
+ input_data: Dict[str, Any],
46
+ context: Dict[str, Any],
47
+ ):
38
48
  """
39
49
  Execute a fast task from the service executor queue.
40
50
  This task is used for operations that should complete quickly.
41
51
  """
42
52
  logger.info(f"Executing fast task: {task_name} for user {user_id}, task {task_id}, step {step}")
43
- return _execute_service_task(self, task_name, user_id, task_id, step, mode, service, input_data, context)
53
+ return _execute_service_task(
54
+ self,
55
+ task_name,
56
+ user_id,
57
+ task_id,
58
+ step,
59
+ mode,
60
+ service,
61
+ input_data,
62
+ context,
63
+ )
64
+
44
65
 
45
66
  @celery_app.task(bind=True, name="aiecs.tasks.worker.execute_heavy_task")
46
- def execute_heavy_task(self, task_name: str, user_id: str, task_id: str, step: int,
47
- mode: str, service: str, input_data: Dict[str, Any], context: Dict[str, Any]):
67
+ def execute_heavy_task(
68
+ self,
69
+ task_name: str,
70
+ user_id: str,
71
+ task_id: str,
72
+ step: int,
73
+ mode: str,
74
+ service: str,
75
+ input_data: Dict[str, Any],
76
+ context: Dict[str, Any],
77
+ ):
48
78
  """
49
79
  Execute a heavy task from the service executor queue.
50
80
  This task is used for operations that may take longer to complete.
51
81
  """
52
82
  logger.info(f"Executing heavy task: {task_name} for user {user_id}, task {task_id}, step {step}")
53
- return _execute_service_task(self, task_name, user_id, task_id, step, mode, service, input_data, context)
83
+ return _execute_service_task(
84
+ self,
85
+ task_name,
86
+ user_id,
87
+ task_id,
88
+ step,
89
+ mode,
90
+ service,
91
+ input_data,
92
+ context,
93
+ )
54
94
 
55
- def _execute_service_task(self, task_name: str, user_id: str, task_id: str, step: int,
56
- mode: str, service: str, input_data: Dict[str, Any], context: Dict[str, Any]):
95
+
96
+ def _execute_service_task(
97
+ self,
98
+ task_name: str,
99
+ user_id: str,
100
+ task_id: str,
101
+ step: int,
102
+ mode: str,
103
+ service: str,
104
+ input_data: Dict[str, Any],
105
+ context: Dict[str, Any],
106
+ ):
57
107
  """
58
108
  Common implementation for executing both fast and heavy tasks.
59
109
  This function handles the actual task execution logic.
60
110
  """
61
111
  try:
62
112
  # 1. Push started status
63
- push_progress(user_id, {
64
- "status": TaskStatus.RUNNING.value,
65
- "step": step,
66
- "task": task_name,
67
- "message": f"Executing task: {task_name}"
68
- })
113
+ asyncio.run(
114
+ push_progress(
115
+ user_id,
116
+ {
117
+ "status": TaskStatus.RUNNING.value,
118
+ "step": step,
119
+ "task": task_name,
120
+ "message": f"Executing task: {task_name}",
121
+ },
122
+ )
123
+ )
69
124
 
70
125
  # 2. Get the service instance
126
+ # Note: get_ai_service is imported at module level from aiecs.core.registry
127
+ # The registry is now in the core layer to prevent circular imports
71
128
  service_cls = get_ai_service(mode, service)
72
129
  service_instance = service_cls()
73
130
 
@@ -76,36 +133,47 @@ def _execute_service_task(self, task_name: str, user_id: str, task_id: str, step
76
133
  method = getattr(service_instance, task_name)
77
134
  result = method(input_data, context)
78
135
  else:
79
- # Fallback to a generic execution method if the specific task method doesn't exist
136
+ # Fallback to a generic execution method if the specific task
137
+ # method doesn't exist
80
138
  result = service_instance.execute_task(task_name, input_data, context)
81
139
 
82
140
  # 4. Push completed status
83
- push_progress(user_id, {
84
- "status": TaskStatus.COMPLETED.value,
85
- "step": step,
86
- "task": task_name,
87
- "result": result,
88
- "message": f"Completed task: {task_name}"
89
- })
141
+ asyncio.run(
142
+ push_progress(
143
+ user_id,
144
+ {
145
+ "status": TaskStatus.COMPLETED.value,
146
+ "step": step,
147
+ "task": task_name,
148
+ "result": result,
149
+ "message": f"Completed task: {task_name}",
150
+ },
151
+ )
152
+ )
90
153
 
91
154
  return {
92
155
  "status": TaskStatus.COMPLETED.value,
93
156
  "task": task_name,
94
- "result": result
157
+ "result": result,
95
158
  }
96
159
  except Exception as e:
97
160
  logger.error(f"Error executing task {task_name}: {str(e)}", exc_info=True)
98
161
  # Push error status
99
- push_progress(user_id, {
100
- "status": TaskStatus.FAILED.value,
101
- "step": step,
102
- "task": task_name,
103
- "error": str(e),
104
- "message": f"Failed to execute task: {task_name}"
105
- })
162
+ asyncio.run(
163
+ push_progress(
164
+ user_id,
165
+ {
166
+ "status": TaskStatus.FAILED.value,
167
+ "step": step,
168
+ "task": task_name,
169
+ "error": str(e),
170
+ "message": f"Failed to execute task: {task_name}",
171
+ },
172
+ )
173
+ )
106
174
 
107
175
  return {
108
176
  "status": TaskStatus.FAILED.value,
109
177
  "task": task_name,
110
- "error": str(e)
178
+ "error": str(e),
111
179
  }