aiecs 1.0.1__py3-none-any.whl → 1.7.6__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 +399 -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 +3870 -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 +1435 -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 +884 -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 +364 -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 +224 -36
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +324 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +457 -0
  199. aiecs/llm/clients/googleai_client.py +241 -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 +897 -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 +1323 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1011 -0
  271. aiecs/tools/docs/document_writer_tool.py +1829 -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 +175 -131
  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.6.dist-info}/METADATA +52 -15
  321. aiecs-1.7.6.dist-info/RECORD +337 -0
  322. aiecs-1.7.6.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.6.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,524 @@
1
+ """
2
+ Knowledge Graph Builder Tool
3
+
4
+ AIECS tool for building knowledge graphs from text and documents.
5
+ """
6
+
7
+ from typing import Dict, Any, List, Optional
8
+ from pydantic import BaseModel, Field
9
+ from pydantic_settings import BaseSettings, SettingsConfigDict
10
+
11
+ from aiecs.tools.base_tool import BaseTool
12
+ from aiecs.tools import register_tool
13
+ from aiecs.infrastructure.graph_storage.in_memory import InMemoryGraphStore
14
+ from aiecs.application.knowledge_graph.extractors.llm_entity_extractor import (
15
+ LLMEntityExtractor,
16
+ )
17
+ from aiecs.application.knowledge_graph.extractors.llm_relation_extractor import (
18
+ LLMRelationExtractor,
19
+ )
20
+ from aiecs.application.knowledge_graph.builder.graph_builder import (
21
+ GraphBuilder,
22
+ )
23
+ from aiecs.application.knowledge_graph.builder.document_builder import (
24
+ DocumentGraphBuilder,
25
+ )
26
+ from aiecs.application.knowledge_graph.builder.structured_pipeline import (
27
+ StructuredDataPipeline,
28
+ )
29
+ from aiecs.application.knowledge_graph.builder.schema_mapping import (
30
+ SchemaMapping,
31
+ EntityMapping,
32
+ RelationMapping,
33
+ )
34
+
35
+
36
+ class KGBuilderInput(BaseModel):
37
+ """Input schema for Knowledge Graph Builder Tool (legacy, for execute() method)"""
38
+
39
+ action: str = Field(
40
+ ...,
41
+ description="Action to perform: 'build_from_text', 'build_from_document', 'build_from_structured_data', 'get_stats'",
42
+ )
43
+ text: Optional[str] = Field(
44
+ None,
45
+ description="Text to extract knowledge from (for 'build_from_text' action)",
46
+ )
47
+ document_path: Optional[str] = Field(
48
+ None,
49
+ description="Path to document file (for 'build_from_document' action)",
50
+ )
51
+ source: Optional[str] = Field(
52
+ None,
53
+ description="Optional source identifier (document name, URL, etc.)",
54
+ )
55
+ entity_types: Optional[List[str]] = Field(
56
+ None,
57
+ description=("Optional list of entity types to extract " "(e.g., ['Person', 'Company', 'Location'])"),
58
+ )
59
+ data_path: Optional[str] = Field(
60
+ None,
61
+ description="Path to structured data file (CSV, JSON, SPSS, or Excel) for 'build_from_structured_data' action",
62
+ )
63
+ schema_mapping: Optional[Dict[str, Any]] = Field(
64
+ None,
65
+ description="Schema mapping configuration for structured data import (entity_mappings, relation_mappings)",
66
+ )
67
+ relation_types: Optional[List[str]] = Field(
68
+ None,
69
+ description="Optional list of relation types to extract (e.g., ['WORKS_FOR', 'LOCATED_IN'])",
70
+ )
71
+
72
+
73
+ # Schemas for individual operations - moved to KnowledgeGraphBuilderTool class as inner classes
74
+
75
+
76
+ @register_tool("kg_builder")
77
+ class KnowledgeGraphBuilderTool(BaseTool):
78
+ """
79
+ Knowledge Graph Builder Tool
80
+
81
+ Allows AI agents to build knowledge graphs from text and documents.
82
+ Extracts entities and relations, stores them in a graph database.
83
+
84
+ Actions:
85
+ - build_from_text: Extract knowledge from text
86
+ - build_from_document: Extract knowledge from a document (PDF, DOCX, TXT)
87
+ - get_stats: Get statistics about the knowledge graph
88
+
89
+ Example Usage:
90
+ ```python
91
+ # Build from text
92
+ result = tool.execute({
93
+ "action": "build_from_text",
94
+ "text": "Alice works at Tech Corp in San Francisco.",
95
+ "source": "conversation_1"
96
+ })
97
+
98
+ # Build from document
99
+ result = tool.execute({
100
+ "action": "build_from_document",
101
+ "document_path": "/path/to/research_paper.pdf"
102
+ })
103
+
104
+ # Get stats
105
+ stats = tool.execute({
106
+ "action": "get_stats"
107
+ })
108
+ ```
109
+ """
110
+
111
+ # Configuration schema
112
+ class Config(BaseSettings):
113
+ """Configuration for the Knowledge Graph Builder Tool
114
+
115
+ Automatically reads from environment variables with KG_BUILDER_ prefix.
116
+ Example: KG_BUILDER_CHUNK_SIZE -> chunk_size
117
+ """
118
+
119
+ model_config = SettingsConfigDict(env_prefix="KG_BUILDER_")
120
+
121
+ chunk_size: int = Field(
122
+ default=2000,
123
+ description="Chunk size for document processing",
124
+ )
125
+ enable_deduplication: bool = Field(
126
+ default=True,
127
+ description="Enable entity deduplication",
128
+ )
129
+ enable_linking: bool = Field(
130
+ default=True,
131
+ description="Enable entity linking",
132
+ )
133
+ enable_chunking: bool = Field(
134
+ default=True,
135
+ description="Enable document chunking",
136
+ )
137
+ batch_size: int = Field(
138
+ default=100,
139
+ description="Batch size for structured data import",
140
+ )
141
+ skip_errors: bool = Field(
142
+ default=True,
143
+ description="Skip errors during structured data import",
144
+ )
145
+
146
+ # Schema definitions
147
+ class Build_from_textSchema(BaseModel):
148
+ """Schema for build_from_text operation"""
149
+
150
+ text: str = Field(description="Text content to extract knowledge from")
151
+ source: Optional[str] = Field(
152
+ default="unknown",
153
+ description="Optional source identifier (document name, URL, etc.)",
154
+ )
155
+ entity_types: Optional[List[str]] = Field(
156
+ default=None,
157
+ description="Optional list of entity types to extract (e.g., ['Person', 'Company', 'Location'])",
158
+ )
159
+ relation_types: Optional[List[str]] = Field(
160
+ default=None,
161
+ description="Optional list of relation types to extract (e.g., ['WORKS_FOR', 'LOCATED_IN'])",
162
+ )
163
+
164
+ class Build_from_documentSchema(BaseModel):
165
+ """Schema for build_from_document operation"""
166
+
167
+ document_path: str = Field(description="Path to document file (PDF, DOCX, TXT, etc.)")
168
+ entity_types: Optional[List[str]] = Field(default=None, description="Optional list of entity types to extract (e.g., ['Person', 'Company', 'Location'])")
169
+ relation_types: Optional[List[str]] = Field(default=None, description="Optional list of relation types to extract (e.g., ['WORKS_FOR', 'LOCATED_IN'])")
170
+
171
+ class Get_statsSchema(BaseModel):
172
+ """Schema for get_stats operation"""
173
+
174
+ pass # No parameters needed
175
+
176
+ name: str = "kg_builder"
177
+ description: str = """Build knowledge graphs from text and documents.
178
+
179
+ This tool extracts entities (people, companies, locations, etc.) and relations
180
+ between them from text or documents, and stores them in a knowledge graph.
181
+
182
+ Use this tool when you need to:
183
+ - Extract structured knowledge from unstructured text
184
+ - Build a knowledge base from documents
185
+ - Understand relationships between entities in text
186
+ - Create a queryable graph of information
187
+ """
188
+
189
+ input_schema: type[BaseModel] = KGBuilderInput
190
+
191
+ def __init__(self, config: Optional[Dict[str, Any]] = None, **kwargs):
192
+ """
193
+ Initialize Knowledge Graph Builder Tool.
194
+
195
+ Args:
196
+ config (Dict, optional): Configuration overrides for KG Builder Tool.
197
+ **kwargs: Additional arguments passed to BaseTool (e.g., tool_name)
198
+
199
+ Configuration is automatically loaded by BaseTool from:
200
+ 1. Explicit config dict (highest priority)
201
+ 2. YAML config files (config/tools/kg_builder.yaml)
202
+ 3. Environment variables (via dotenv from .env files)
203
+ 4. Tool defaults (lowest priority)
204
+ """
205
+ super().__init__(config, **kwargs)
206
+
207
+ # Configuration is automatically loaded by BaseTool into self._config_obj
208
+ # Access config via self._config_obj (BaseSettings instance)
209
+ self.config = self._config_obj if self._config_obj else self.Config()
210
+
211
+ # Initialize graph store (in-memory for now)
212
+ # In production, this would be configurable (SQLite, PostgreSQL, etc.)
213
+ self.graph_store = None
214
+ self.graph_builder = None
215
+ self.document_builder = None
216
+ self._initialized = False
217
+
218
+ async def _initialize(self):
219
+ """Lazy initialization of components"""
220
+ if self._initialized:
221
+ return
222
+
223
+ # Initialize graph store
224
+ self.graph_store = InMemoryGraphStore()
225
+ await self.graph_store.initialize()
226
+
227
+ # Initialize extractors
228
+ entity_extractor = LLMEntityExtractor()
229
+ relation_extractor = LLMRelationExtractor()
230
+
231
+ # Initialize graph builder
232
+ self.graph_builder = GraphBuilder(
233
+ graph_store=self.graph_store,
234
+ entity_extractor=entity_extractor,
235
+ relation_extractor=relation_extractor,
236
+ enable_deduplication=self.config.enable_deduplication,
237
+ enable_linking=self.config.enable_linking,
238
+ )
239
+
240
+ # Initialize document builder
241
+ self.document_builder = DocumentGraphBuilder(
242
+ graph_builder=self.graph_builder,
243
+ chunk_size=self.config.chunk_size,
244
+ enable_chunking=self.config.enable_chunking,
245
+ )
246
+
247
+ self._initialized = True
248
+
249
+ async def _execute(self, **kwargs) -> Dict[str, Any]:
250
+ """
251
+ Execute the knowledge graph builder tool
252
+
253
+ Args:
254
+ **kwargs: Tool input parameters
255
+
256
+ Returns:
257
+ Dictionary with results
258
+ """
259
+ # Initialize components
260
+ await self._initialize()
261
+
262
+ action = kwargs.get("action")
263
+
264
+ if action == "build_from_text":
265
+ return await self._build_from_text(kwargs)
266
+ elif action == "build_from_document":
267
+ return await self._build_from_document(kwargs)
268
+ elif action == "build_from_structured_data":
269
+ return await self._build_from_structured_data(kwargs)
270
+ elif action == "get_stats":
271
+ return await self._get_stats()
272
+ else:
273
+ return {
274
+ "success": False,
275
+ "error": (f"Unknown action: {action}. " f"Supported actions: build_from_text, build_from_document, build_from_structured_data, get_stats"),
276
+ }
277
+
278
+ async def _build_from_text(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
279
+ """
280
+ Build knowledge graph from text
281
+
282
+ Args:
283
+ kwargs: Tool input parameters
284
+
285
+ Returns:
286
+ Build result dictionary
287
+ """
288
+ text = kwargs.get("text")
289
+ if not text:
290
+ return {
291
+ "success": False,
292
+ "error": "Missing required parameter: text",
293
+ }
294
+
295
+ source = kwargs.get("source", "unknown")
296
+
297
+ # Build graph
298
+ result = await self.graph_builder.build_from_text(text=text, source=source)
299
+
300
+ return {
301
+ "success": result.success,
302
+ "entities_added": result.entities_added,
303
+ "relations_added": result.relations_added,
304
+ "entities_linked": result.entities_linked,
305
+ "entities_deduplicated": result.entities_deduplicated,
306
+ "relations_deduplicated": result.relations_deduplicated,
307
+ "duration_seconds": result.duration_seconds,
308
+ "errors": result.errors,
309
+ "warnings": result.warnings,
310
+ }
311
+
312
+ async def _build_from_document(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
313
+ """
314
+ Build knowledge graph from document
315
+
316
+ Args:
317
+ kwargs: Tool input parameters
318
+
319
+ Returns:
320
+ Build result dictionary
321
+ """
322
+ document_path = kwargs.get("document_path")
323
+ if not document_path:
324
+ return {
325
+ "success": False,
326
+ "error": "Missing required parameter: document_path",
327
+ }
328
+
329
+ # Build graph from document
330
+ result = await self.document_builder.build_from_document(document_path)
331
+
332
+ return {
333
+ "success": result.success,
334
+ "document_path": result.document_path,
335
+ "document_type": result.document_type,
336
+ "total_chunks": result.total_chunks,
337
+ "chunks_processed": result.chunks_processed,
338
+ "total_entities_added": result.total_entities_added,
339
+ "total_relations_added": result.total_relations_added,
340
+ "errors": result.errors,
341
+ }
342
+
343
+ async def _build_from_structured_data(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
344
+ """
345
+ Build knowledge graph from structured data (CSV, JSON, SPSS, or Excel)
346
+
347
+ Args:
348
+ kwargs: Tool input parameters
349
+
350
+ Returns:
351
+ Build result dictionary
352
+ """
353
+ data_path = kwargs.get("data_path")
354
+ if not data_path:
355
+ return {
356
+ "success": False,
357
+ "error": "Missing required parameter: data_path",
358
+ }
359
+
360
+ schema_mapping_dict = kwargs.get("schema_mapping")
361
+ if not schema_mapping_dict:
362
+ return {
363
+ "success": False,
364
+ "error": "Missing required parameter: schema_mapping",
365
+ }
366
+
367
+ try:
368
+ # Parse schema mapping
369
+ entity_mappings = []
370
+ for em_dict in schema_mapping_dict.get("entity_mappings", []):
371
+ entity_mappings.append(EntityMapping(**em_dict))
372
+
373
+ relation_mappings = []
374
+ for rm_dict in schema_mapping_dict.get("relation_mappings", []):
375
+ relation_mappings.append(RelationMapping(**rm_dict))
376
+
377
+ schema_mapping = SchemaMapping(
378
+ entity_mappings=entity_mappings,
379
+ relation_mappings=relation_mappings,
380
+ )
381
+
382
+ # Create structured data pipeline
383
+ pipeline = StructuredDataPipeline(
384
+ mapping=schema_mapping,
385
+ graph_store=self.graph_store,
386
+ batch_size=self.config.batch_size,
387
+ skip_errors=self.config.skip_errors,
388
+ )
389
+
390
+ # Import data based on file extension
391
+ if data_path.endswith(".csv"):
392
+ result = await pipeline.import_from_csv(data_path)
393
+ elif data_path.endswith(".json"):
394
+ result = await pipeline.import_from_json(data_path)
395
+ elif data_path.endswith(".sav") or data_path.endswith(".por"):
396
+ result = await pipeline.import_from_spss(data_path)
397
+ elif data_path.endswith(".xlsx") or data_path.endswith(".xls"):
398
+ result = await pipeline.import_from_excel(data_path)
399
+ else:
400
+ return {
401
+ "success": False,
402
+ "error": "Unsupported file format. Supported: .csv, .json, .sav, .por, .xlsx, .xls",
403
+ }
404
+
405
+ return {
406
+ "success": result.success,
407
+ "data_path": data_path,
408
+ "entities_added": result.entities_added,
409
+ "relations_added": result.relations_added,
410
+ "rows_processed": result.rows_processed,
411
+ "rows_failed": result.rows_failed,
412
+ "duration_seconds": result.duration_seconds,
413
+ "errors": result.errors,
414
+ "warnings": result.warnings,
415
+ }
416
+
417
+ except Exception as e:
418
+ return {
419
+ "success": False,
420
+ "error": f"Failed to import structured data: {str(e)}",
421
+ }
422
+
423
+ async def _get_stats(self) -> Dict[str, Any]:
424
+ """
425
+ Get knowledge graph statistics
426
+
427
+ Returns:
428
+ Statistics dictionary
429
+ """
430
+ # Handle both async and sync get_stats methods
431
+ if hasattr(self.graph_store.get_stats, "__call__"):
432
+ stats_result = self.graph_store.get_stats()
433
+ # Check if it's a coroutine
434
+ if hasattr(stats_result, "__await__"):
435
+ stats = await stats_result
436
+ else:
437
+ stats = stats_result
438
+ else:
439
+ stats = self.graph_store.get_stats()
440
+
441
+ return {"success": True, "stats": stats}
442
+
443
+ # Public methods for ToolExecutor integration
444
+ async def build_from_text(
445
+ self,
446
+ text: str,
447
+ source: Optional[str] = "unknown",
448
+ entity_types: Optional[List[str]] = None,
449
+ relation_types: Optional[List[str]] = None,
450
+ ) -> Dict[str, Any]:
451
+ """
452
+ Build knowledge graph from text (public method for ToolExecutor)
453
+
454
+ Args:
455
+ text: Text to extract knowledge from
456
+ source: Optional source identifier
457
+ entity_types: Optional list of entity types to extract
458
+ relation_types: Optional list of relation types to extract
459
+
460
+ Returns:
461
+ Build result dictionary
462
+ """
463
+ await self._initialize()
464
+ return await self._build_from_text(
465
+ {
466
+ "text": text,
467
+ "source": source,
468
+ "entity_types": entity_types,
469
+ "relation_types": relation_types,
470
+ }
471
+ )
472
+
473
+ async def build_from_document(
474
+ self,
475
+ document_path: str,
476
+ entity_types: Optional[List[str]] = None,
477
+ relation_types: Optional[List[str]] = None,
478
+ ) -> Dict[str, Any]:
479
+ """
480
+ Build knowledge graph from document (public method for ToolExecutor)
481
+
482
+ Args:
483
+ document_path: Path to document file
484
+ entity_types: Optional list of entity types to extract
485
+ relation_types: Optional list of relation types to extract
486
+
487
+ Returns:
488
+ Build result dictionary
489
+ """
490
+ await self._initialize()
491
+ return await self._build_from_document(
492
+ {
493
+ "document_path": document_path,
494
+ "entity_types": entity_types,
495
+ "relation_types": relation_types,
496
+ }
497
+ )
498
+
499
+ async def get_stats(self) -> Dict[str, Any]:
500
+ """
501
+ Get knowledge graph statistics (public method for ToolExecutor)
502
+
503
+ Returns:
504
+ Statistics dictionary
505
+ """
506
+ await self._initialize()
507
+ return await self._get_stats()
508
+
509
+ async def execute(self, **kwargs) -> Dict[str, Any]:
510
+ """
511
+ Execute the tool (public interface)
512
+
513
+ Args:
514
+ **kwargs: Tool input parameters
515
+
516
+ Returns:
517
+ Dictionary with results
518
+ """
519
+ return await self._execute(**kwargs)
520
+
521
+ async def close(self):
522
+ """Clean up resources"""
523
+ if self.graph_store and self._initialized:
524
+ await self.graph_store.close()