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,475 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ 工具 Schema 质量验证器
4
+
5
+ 用于工具开发和维护,验证自动生成的 Schema 质量。
6
+ 帮助开发者识别需要改进的文档字符串,提升 Schema 描述质量。
7
+
8
+ 使用方法:
9
+ # 验证所有工具
10
+ aiecs tools validate-schemas
11
+
12
+ # 验证特定工具
13
+ aiecs tools validate-schemas pandas
14
+
15
+ # 显示详细的改进建议
16
+ aiecs tools validate-schemas pandas --verbose
17
+
18
+ # 显示示例 Schema
19
+ aiecs tools validate-schemas pandas --show-examples
20
+ """
21
+
22
+ from aiecs.tools.schema_generator import generate_schema_from_method
23
+ from aiecs.tools import discover_tools, TOOL_CLASSES
24
+ import sys
25
+ from typing import Dict, List, Any, Type, Optional, Callable
26
+ from pydantic import BaseModel
27
+
28
+ # 确保可以导入 aiecs
29
+ import os
30
+
31
+ sys.path.insert(
32
+ 0,
33
+ os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))),
34
+ )
35
+
36
+
37
+ class SchemaQualityMetrics:
38
+ """Schema 质量指标"""
39
+
40
+ def __init__(self):
41
+ self.total_methods = 0
42
+ self.schemas_generated = 0
43
+ self.schemas_failed = 0
44
+ self.total_fields = 0
45
+ self.fields_with_meaningful_descriptions = 0
46
+ self.fields_with_types = 0
47
+ self.quality_issues = []
48
+
49
+ def add_method(self, has_schema: bool):
50
+ """添加方法统计"""
51
+ self.total_methods += 1
52
+ if has_schema:
53
+ self.schemas_generated += 1
54
+ else:
55
+ self.schemas_failed += 1
56
+
57
+ def add_field(self, has_type: bool, has_meaningful_desc: bool):
58
+ """添加字段统计"""
59
+ self.total_fields += 1
60
+ if has_type:
61
+ self.fields_with_types += 1
62
+ if has_meaningful_desc:
63
+ self.fields_with_meaningful_descriptions += 1
64
+
65
+ def add_issue(self, issue: str):
66
+ """添加质量问题"""
67
+ self.quality_issues.append(issue)
68
+
69
+ def get_scores(self) -> Dict[str, float]:
70
+ """计算质量分数"""
71
+ generation_rate = (self.schemas_generated / self.total_methods * 100) if self.total_methods > 0 else 0
72
+ description_rate = (self.fields_with_meaningful_descriptions / self.total_fields * 100) if self.total_fields > 0 else 0
73
+ type_coverage = (self.fields_with_types / self.total_fields * 100) if self.total_fields > 0 else 0
74
+
75
+ return {
76
+ "generation_rate": generation_rate,
77
+ "description_quality": description_rate,
78
+ "type_coverage": type_coverage,
79
+ "overall_score": (generation_rate + description_rate + type_coverage) / 3,
80
+ }
81
+
82
+
83
+ def validate_schema_quality(schema: Type[BaseModel], method: Callable[..., Any], method_name: str) -> List[str]:
84
+ """
85
+ 验证单个 Schema 的质量
86
+
87
+ Returns:
88
+ 质量问题列表(改进建议)
89
+ """
90
+ issues = []
91
+
92
+ # 1. 检查 Schema 描述
93
+ if not schema.__doc__ or schema.__doc__.strip() == f"Execute {method_name} operation":
94
+ issues.append("💡 在方法文档字符串的第一行添加有意义的描述")
95
+
96
+ # 2. 检查字段
97
+ if not schema.model_fields:
98
+ return issues
99
+
100
+ for field_name, field_info in schema.model_fields.items():
101
+ # 检查字段描述
102
+ description = field_info.description
103
+ if not description or description == f"Parameter {field_name}":
104
+ issues.append(f"💡 在文档字符串的 Args 部分为参数 '{field_name}' 添加描述")
105
+
106
+ return issues
107
+
108
+
109
+ def find_manual_schema(tool_class: Type, method_name: str) -> Optional[Type[BaseModel]]:
110
+ """
111
+ 查找手动定义的 Schema(与 langchain_adapter 逻辑一致)
112
+
113
+ Args:
114
+ tool_class: 工具类
115
+ method_name: 方法名
116
+
117
+ Returns:
118
+ 找到的 Schema 类,如果没有则返回 None
119
+ """
120
+ schemas = {}
121
+
122
+ # 1. 检查类级别的 schemas
123
+ for attr_name in dir(tool_class):
124
+ attr = getattr(tool_class, attr_name)
125
+ if isinstance(attr, type) and issubclass(attr, BaseModel) and attr.__name__.endswith("Schema"):
126
+ # 标准化:移除 'Schema' 后缀,转小写,移除下划线
127
+ schema_base_name = attr.__name__.replace("Schema", "")
128
+ normalized_name = schema_base_name.replace("_", "").lower()
129
+ schemas[normalized_name] = attr
130
+
131
+ # 2. 检查模块级别的 schemas
132
+ import inspect
133
+
134
+ tool_module = inspect.getmodule(tool_class)
135
+ if tool_module:
136
+ for attr_name in dir(tool_module):
137
+ if attr_name.startswith("_"):
138
+ continue
139
+ attr = getattr(tool_module, attr_name)
140
+ if isinstance(attr, type) and issubclass(attr, BaseModel) and attr.__name__.endswith("Schema"):
141
+ schema_base_name = attr.__name__.replace("Schema", "")
142
+ normalized_name = schema_base_name.replace("_", "").lower()
143
+ if normalized_name not in schemas:
144
+ schemas[normalized_name] = attr
145
+
146
+ # 标准化方法名:移除下划线并转小写
147
+ normalized_method_name = method_name.replace("_", "").lower()
148
+
149
+ # 查找匹配的 schema
150
+ return schemas.get(normalized_method_name)
151
+
152
+
153
+ def analyze_tool_schemas(tool_name: str, tool_class: Type) -> Dict[str, Any]:
154
+ """分析工具的 Schema 生成情况(支持手动定义和自动生成)"""
155
+
156
+ metrics = SchemaQualityMetrics()
157
+ methods_info = []
158
+
159
+ for method_name in dir(tool_class):
160
+ # 跳过私有方法和特殊方法
161
+ if method_name.startswith("_"):
162
+ continue
163
+
164
+ # 跳过基类方法
165
+ if method_name in ["run", "run_async", "run_batch"]:
166
+ continue
167
+
168
+ method = getattr(tool_class, method_name)
169
+
170
+ # 跳过非方法属性
171
+ if not callable(method) or isinstance(method, type):
172
+ continue
173
+
174
+ # 首先尝试查找手动定义的 Schema
175
+ manual_schema = find_manual_schema(tool_class, method_name)
176
+
177
+ schema: Optional[Type[BaseModel]]
178
+ if manual_schema:
179
+ schema = manual_schema
180
+ schema_type = "manual"
181
+ else:
182
+ # 如果没有手动 Schema,则自动生成
183
+ schema = generate_schema_from_method(method, method_name)
184
+ schema_type = "auto"
185
+
186
+ method_info: Dict[str, Any] = {
187
+ "name": method_name,
188
+ "schema": schema,
189
+ "schema_type": schema_type,
190
+ "issues": [],
191
+ }
192
+
193
+ if schema:
194
+ metrics.add_method(True)
195
+
196
+ # 验证质量
197
+ issues = validate_schema_quality(schema, method, method_name)
198
+ method_info["issues"] = issues
199
+
200
+ # 统计字段
201
+ for field_name, field_info in schema.model_fields.items():
202
+ has_type = field_info.annotation is not None
203
+ has_meaningful_desc = bool(field_info.description and field_info.description != f"Parameter {field_name}")
204
+ metrics.add_field(has_type, has_meaningful_desc)
205
+
206
+ # 记录问题
207
+ for issue in issues:
208
+ metrics.add_issue(f"{tool_name}.{method_name}: {issue}")
209
+ else:
210
+ metrics.add_method(False)
211
+ method_info["issues"] = ["⚠️ 无法生成 Schema(可能是无参数方法)"]
212
+
213
+ methods_info.append(method_info)
214
+
215
+ return {"metrics": metrics, "methods": methods_info}
216
+
217
+
218
+ def print_tool_report(
219
+ tool_name: str,
220
+ result: Dict,
221
+ verbose: bool = False,
222
+ show_examples: bool = False,
223
+ ):
224
+ """打印工具报告"""
225
+
226
+ metrics = result["metrics"]
227
+ methods = result["methods"]
228
+ scores = metrics.get_scores()
229
+
230
+ # 统计手动和自动 schema
231
+ manual_schemas = [m for m in methods if m.get("schema_type") == "manual"]
232
+ auto_schemas = [m for m in methods if m.get("schema_type") == "auto"]
233
+
234
+ # 状态图标
235
+ overall = scores["overall_score"]
236
+ if overall >= 90:
237
+ status = "✅"
238
+ grade = "A (优秀)"
239
+ elif overall >= 80:
240
+ status = "⚠️"
241
+ grade = "B (良好)"
242
+ elif overall >= 70:
243
+ status = "⚠️"
244
+ grade = "C (中等)"
245
+ else:
246
+ status = "❌"
247
+ grade = "D (需改进)"
248
+
249
+ print(f"\n{status} {tool_name}")
250
+ print(f" 方法数: {metrics.total_methods}")
251
+ print(f" 成功生成 Schema: {metrics.schemas_generated} ({scores['generation_rate']:.1f}%)")
252
+ print(f" - 手动定义: {len(manual_schemas)} 个")
253
+ print(f" - 自动生成: {len(auto_schemas)} 个")
254
+ print(f" 描述质量: {scores['description_quality']:.1f}%")
255
+ print(f" 综合评分: {scores['overall_score']:.1f}% ({grade})")
256
+
257
+ # 显示需要改进的方法
258
+ methods_with_issues = [m for m in methods if m["issues"] and m["schema"]]
259
+
260
+ if methods_with_issues and (verbose or scores["description_quality"] < 80):
261
+ print(f"\n 需要改进的方法 ({len(methods_with_issues)} 个):")
262
+
263
+ for method_info in methods_with_issues[: 5 if not verbose else None]:
264
+ print(f"\n {method_info['name']}:")
265
+ for issue in method_info["issues"]:
266
+ print(f" {issue}")
267
+
268
+ if not verbose and len(methods_with_issues) > 5:
269
+ print(f"\n ... 还有 {len(methods_with_issues) - 5} 个方法需要改进")
270
+ print(" 使用 --verbose 查看全部")
271
+
272
+ # 显示示例 Schema
273
+ if show_examples:
274
+ methods_with_schema = [m for m in methods if m["schema"]]
275
+ if methods_with_schema:
276
+ print("\n 示例 Schema:")
277
+ for method_info in methods_with_schema[:2]:
278
+ schema = method_info["schema"]
279
+ schema_type_label = "🔧 手动定义" if method_info.get("schema_type") == "manual" else "🤖 自动生成"
280
+ print(f"\n {method_info['name']} → {schema.__name__} [{schema_type_label}]")
281
+ print(f" 描述: {schema.__doc__}")
282
+ print(" 字段:")
283
+ for field_name, field_info in list(schema.model_fields.items())[:3]:
284
+ required = "必需" if field_info.is_required() else "可选"
285
+ print(f" - {field_name}: {field_info.description} [{required}]")
286
+
287
+
288
+ def validate_schemas(
289
+ tool_names: Optional[List[str]] = None,
290
+ verbose: bool = False,
291
+ show_examples: bool = False,
292
+ export_coverage: Optional[str] = None,
293
+ min_coverage: float = 0.0,
294
+ ) -> Dict[str, Any]:
295
+ """
296
+ 验证工具的 Schema 质量
297
+
298
+ Args:
299
+ tool_names: 要验证的工具名称列表,None 表示验证所有工具
300
+ verbose: 是否显示详细信息
301
+ show_examples: 是否显示示例 Schema
302
+ export_coverage: 导出覆盖率报告的文件路径(支持 .json, .html, .txt)
303
+ min_coverage: 最小覆盖率阈值(0-100),低于此值的工具会被标记
304
+
305
+ Returns:
306
+ 包含所有工具分析结果的字典
307
+ """
308
+ print("=" * 100)
309
+ print("工具 Schema 质量验证器")
310
+ print("=" * 100)
311
+
312
+ discover_tools()
313
+
314
+ # 确定要验证的工具
315
+ if tool_names:
316
+ tools_to_check = {}
317
+ for name in tool_names:
318
+ if name in TOOL_CLASSES:
319
+ tools_to_check[name] = TOOL_CLASSES[name]
320
+ else:
321
+ print(f"\n❌ 工具 '{name}' 不存在")
322
+
323
+ if not tools_to_check:
324
+ print("\n没有找到要验证的工具")
325
+ return {}
326
+ else:
327
+ tools_to_check = TOOL_CLASSES
328
+
329
+ # 验证每个工具
330
+ all_results = {}
331
+ for tool_name in sorted(tools_to_check.keys()):
332
+ tool_class = tools_to_check[tool_name]
333
+ result = analyze_tool_schemas(tool_name, tool_class)
334
+ all_results[tool_name] = result
335
+
336
+ print_tool_report(tool_name, result, verbose, show_examples)
337
+
338
+ # 总体统计
339
+ if len(all_results) > 1:
340
+ total_methods = sum(r["metrics"].total_methods for r in all_results.values())
341
+ total_generated = sum(r["metrics"].schemas_generated for r in all_results.values())
342
+ total_fields = sum(r["metrics"].total_fields for r in all_results.values())
343
+ total_meaningful = sum(r["metrics"].fields_with_meaningful_descriptions for r in all_results.values())
344
+ total_with_types = sum(r["metrics"].fields_with_types for r in all_results.values())
345
+
346
+ overall_generation = (total_generated / total_methods * 100) if total_methods > 0 else 0
347
+ overall_description = (total_meaningful / total_fields * 100) if total_fields > 0 else 0
348
+ overall_type_coverage = (total_with_types / total_fields * 100) if total_fields > 0 else 0
349
+ overall_score = (overall_generation + overall_description + overall_type_coverage) / 3
350
+
351
+ print("\n" + "=" * 100)
352
+ print("总体统计:")
353
+ print(f" 工具数: {len(all_results)}")
354
+ print(f" 方法数: {total_methods}")
355
+ print(f" Schema 生成率: {total_generated}/{total_methods} ({overall_generation:.1f}%)")
356
+ print(f" 描述质量: {overall_description:.1f}%")
357
+ print(f" 类型覆盖率: {overall_type_coverage:.1f}%")
358
+ print(f" 综合评分: {overall_score:.1f}%")
359
+ print("=" * 100)
360
+
361
+ # Coverage summary by tool
362
+ print("\n覆盖率摘要:")
363
+ tools_by_coverage = []
364
+ for tool_name, result in all_results.items():
365
+ metrics = result["metrics"]
366
+ scores = metrics.get_scores()
367
+ coverage = scores["generation_rate"]
368
+ tools_by_coverage.append((tool_name, coverage, scores))
369
+
370
+ # Sort by coverage (lowest first)
371
+ tools_by_coverage.sort(key=lambda x: x[1])
372
+
373
+ # Show tools below 90%
374
+ low_coverage_tools = [t for t in tools_by_coverage if t[1] < 90]
375
+ if low_coverage_tools:
376
+ print(f"\n 需要改进的工具 ({len(low_coverage_tools)} 个,覆盖率 < 90%):")
377
+ for tool_name, coverage, scores in low_coverage_tools[:10]:
378
+ print(f" - {tool_name}: {coverage:.1f}% (生成率: {scores['generation_rate']:.1f}%, "
379
+ f"描述: {scores['description_quality']:.1f}%, 类型: {scores['type_coverage']:.1f}%)")
380
+ if len(low_coverage_tools) > 10:
381
+ print(f" ... 还有 {len(low_coverage_tools) - 10} 个工具需要改进")
382
+
383
+ # Show tools at 90%+
384
+ high_coverage_tools = [t for t in tools_by_coverage if t[1] >= 90]
385
+ if high_coverage_tools:
386
+ print(f"\n ✅ 达标工具 ({len(high_coverage_tools)} 个,覆盖率 ≥ 90%):")
387
+ for tool_name, coverage, scores in high_coverage_tools[:5]:
388
+ print(f" - {tool_name}: {coverage:.1f}%")
389
+ if len(high_coverage_tools) > 5:
390
+ print(f" ... 还有 {len(high_coverage_tools) - 5} 个工具已达标")
391
+
392
+ print("\n💡 改进建议:")
393
+ print(" 1. 在方法的文档字符串第一行添加简短描述")
394
+ print(" 2. 在 Args 部分为每个参数添加详细描述")
395
+ print(" 3. 使用 Google 或 NumPy 风格的文档字符串")
396
+ print("\n示例:")
397
+ print(" def filter(self, records: List[Dict], condition: str) -> List[Dict]:")
398
+ print(' """')
399
+ print(" Filter DataFrame based on a condition.")
400
+ print(" ")
401
+ print(" Args:")
402
+ print(" records: List of records to filter")
403
+ print(" condition: Filter condition (pandas query syntax)")
404
+ print(' """')
405
+
406
+ # Export coverage report if requested
407
+ if export_coverage:
408
+ from aiecs.scripts.tools_develop.schema_coverage import generate_coverage_report
409
+ report_format = "json" if export_coverage.endswith(".json") else "html" if export_coverage.endswith(".html") else "text"
410
+ generate_coverage_report(
411
+ tool_names=tool_names,
412
+ format=report_format,
413
+ output=export_coverage,
414
+ min_coverage=min_coverage,
415
+ )
416
+
417
+ return all_results
418
+
419
+
420
+ def main():
421
+ """命令行入口"""
422
+ import argparse
423
+
424
+ parser = argparse.ArgumentParser(
425
+ description="验证工具 Schema 的生成质量",
426
+ formatter_class=argparse.RawDescriptionHelpFormatter,
427
+ epilog="""
428
+ 示例:
429
+ # 验证所有工具
430
+ aiecs tools validate-schemas
431
+
432
+ # 验证特定工具
433
+ aiecs tools validate-schemas pandas
434
+
435
+ # 显示详细的改进建议
436
+ aiecs tools validate-schemas pandas --verbose
437
+
438
+ # 显示示例 Schema
439
+ aiecs tools validate-schemas pandas --show-examples
440
+ """,
441
+ )
442
+
443
+ parser.add_argument("tools", nargs="*", help="要验证的工具名称(不指定则验证所有工具)")
444
+
445
+ parser.add_argument("-v", "--verbose", action="store_true", help="显示详细的改进建议")
446
+
447
+ parser.add_argument("-e", "--show-examples", action="store_true", help="显示示例 Schema")
448
+
449
+ parser.add_argument(
450
+ "--export-coverage",
451
+ type=str,
452
+ help="导出覆盖率报告到文件(支持 .json, .html, .txt 格式)"
453
+ )
454
+
455
+ parser.add_argument(
456
+ "--min-coverage",
457
+ type=float,
458
+ default=0.0,
459
+ help="最小覆盖率阈值(0-100),用于导出报告时过滤工具"
460
+ )
461
+
462
+ args = parser.parse_args()
463
+
464
+ tool_names = args.tools if args.tools else None
465
+ validate_schemas(
466
+ tool_names,
467
+ args.verbose,
468
+ args.show_examples,
469
+ args.export_coverage,
470
+ args.min_coverage,
471
+ )
472
+
473
+
474
+ if __name__ == "__main__":
475
+ main()
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ 验证 ExecutorConfig 字段过滤修复
4
+
5
+ 快速验证工具是否正确使用 self._config_obj 而不是重新创建 Config 对象
6
+ """
7
+
8
+ import sys
9
+ import os
10
+
11
+ # Add project root to path
12
+ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
13
+
14
+
15
+ def verify_tool(tool_name, tool_class):
16
+ """验证单个工具"""
17
+ try:
18
+ # 混合配置:包含 executor 字段和工具特有字段
19
+ config = {
20
+ "enable_cache": True,
21
+ "max_workers": 8,
22
+ "timeout": 60,
23
+ "test_field": "test_value",
24
+ }
25
+
26
+ # 尝试创建工具
27
+ tool = tool_class(config=config)
28
+
29
+ # 验证配置分离
30
+ executor_config = tool._extract_executor_config(config)
31
+
32
+ # 检查是否正确过滤
33
+ has_executor_fields = any(k in executor_config for k in ['enable_cache', 'max_workers', 'timeout'])
34
+
35
+ if has_executor_fields:
36
+ return True, "✓ 配置正确分离"
37
+ else:
38
+ return False, "✗ 配置分离失败"
39
+
40
+ except Exception as e:
41
+ return False, f"✗ 错误: {str(e)[:100]}"
42
+
43
+
44
+ def main():
45
+ """运行验证"""
46
+ print("="*80)
47
+ print("ExecutorConfig 字段过滤修复验证")
48
+ print("="*80)
49
+
50
+ tools_to_verify = [
51
+ ("DocumentParserTool", "aiecs.tools.docs.document_parser_tool", "DocumentParserTool"),
52
+ ("DocumentWriterTool", "aiecs.tools.docs.document_writer_tool", "DocumentWriterTool"),
53
+ ("ScraperTool", "aiecs.tools.task_tools.scraper_tool", "ScraperTool"),
54
+ ]
55
+
56
+ results = []
57
+
58
+ for tool_name, module_path, class_name in tools_to_verify:
59
+ print(f"\n验证 {tool_name}...", end=" ")
60
+
61
+ try:
62
+ # 动态导入
63
+ module = __import__(module_path, fromlist=[class_name])
64
+ tool_class = getattr(module, class_name)
65
+
66
+ # 验证工具
67
+ success, message = verify_tool(tool_name, tool_class)
68
+ print(message)
69
+ results.append((tool_name, success))
70
+
71
+ except Exception as e:
72
+ print(f"✗ 导入失败: {str(e)[:100]}")
73
+ results.append((tool_name, False))
74
+
75
+ # 打印总结
76
+ print("\n" + "="*80)
77
+ print("验证总结")
78
+ print("="*80)
79
+
80
+ for name, success in results:
81
+ status = "✓" if success else "✗"
82
+ print(f"{status} {name}")
83
+
84
+ all_passed = all(success for _, success in results)
85
+
86
+ print("\n" + "="*80)
87
+ if all_passed:
88
+ print("✅ 所有工具验证通过")
89
+ else:
90
+ print("❌ 部分工具验证失败")
91
+ print("="*80)
92
+
93
+ return 0 if all_passed else 1
94
+
95
+
96
+ if __name__ == "__main__":
97
+ sys.exit(main())
98
+