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,317 @@
1
+ """
2
+ Text Chunker
3
+
4
+ Splits large texts into manageable chunks for processing.
5
+ """
6
+
7
+ from typing import List, Optional, Dict, Any
8
+ from dataclasses import dataclass, field
9
+
10
+
11
+ @dataclass
12
+ class TextChunk:
13
+ """
14
+ A chunk of text with metadata
15
+
16
+ Attributes:
17
+ text: The chunk text content
18
+ start_char: Starting character position in original text
19
+ end_char: Ending character position in original text
20
+ chunk_index: Index of this chunk (0-based)
21
+ metadata: Optional metadata about this chunk
22
+ """
23
+
24
+ text: str
25
+ start_char: int
26
+ end_char: int
27
+ chunk_index: int
28
+ metadata: Dict[str, Any] = field(default_factory=dict)
29
+
30
+
31
+ class TextChunker:
32
+ """
33
+ Split large texts into smaller chunks
34
+
35
+ Strategies:
36
+ - Fixed size chunking (by character or token count)
37
+ - Sentence-aware chunking (don't break sentences)
38
+ - Paragraph-aware chunking (preserve paragraphs)
39
+ - Overlapping chunks (for context preservation)
40
+
41
+ Example:
42
+ ```python
43
+ chunker = TextChunker(chunk_size=1000, overlap=100)
44
+ chunks = chunker.chunk_text(long_document)
45
+
46
+ for chunk in chunks:
47
+ # Process each chunk separately
48
+ result = await process(chunk.text)
49
+ ```
50
+ """
51
+
52
+ def __init__(
53
+ self,
54
+ chunk_size: int = 1000,
55
+ overlap: int = 100,
56
+ respect_sentences: bool = True,
57
+ respect_paragraphs: bool = False,
58
+ min_chunk_size: int = 100,
59
+ ):
60
+ """
61
+ Initialize text chunker
62
+
63
+ Args:
64
+ chunk_size: Target size for each chunk (in characters)
65
+ overlap: Number of characters to overlap between chunks
66
+ respect_sentences: Try to break at sentence boundaries
67
+ respect_paragraphs: Try to break at paragraph boundaries
68
+ min_chunk_size: Minimum chunk size (don't create tiny chunks)
69
+ """
70
+ self.chunk_size = chunk_size
71
+ self.overlap = overlap
72
+ self.respect_sentences = respect_sentences
73
+ self.respect_paragraphs = respect_paragraphs
74
+ self.min_chunk_size = min_chunk_size
75
+
76
+ def chunk_text(self, text: str, metadata: Optional[Dict[str, Any]] = None) -> List[TextChunk]:
77
+ """
78
+ Split text into chunks
79
+
80
+ Args:
81
+ text: Text to chunk
82
+ metadata: Optional metadata to attach to chunks
83
+
84
+ Returns:
85
+ List of TextChunk objects
86
+ """
87
+ if not text:
88
+ return []
89
+
90
+ # Handle short texts
91
+ if len(text) <= self.chunk_size:
92
+ return [
93
+ TextChunk(
94
+ text=text,
95
+ start_char=0,
96
+ end_char=len(text),
97
+ chunk_index=0,
98
+ metadata=metadata or {},
99
+ )
100
+ ]
101
+
102
+ # Choose chunking strategy
103
+ if self.respect_paragraphs:
104
+ return self._chunk_by_paragraphs(text, metadata)
105
+ elif self.respect_sentences:
106
+ return self._chunk_by_sentences(text, metadata)
107
+ else:
108
+ return self._chunk_fixed_size(text, metadata)
109
+
110
+ def _chunk_fixed_size(self, text: str, metadata: Optional[Dict[str, Any]]) -> List[TextChunk]:
111
+ """
112
+ Chunk text by fixed size with overlap
113
+
114
+ Args:
115
+ text: Text to chunk
116
+ metadata: Optional metadata
117
+
118
+ Returns:
119
+ List of TextChunk objects
120
+ """
121
+ chunks = []
122
+ start = 0
123
+ chunk_index = 0
124
+
125
+ while start < len(text):
126
+ end = min(start + self.chunk_size, len(text))
127
+
128
+ chunk = TextChunk(
129
+ text=text[start:end],
130
+ start_char=start,
131
+ end_char=end,
132
+ chunk_index=chunk_index,
133
+ metadata=metadata or {},
134
+ )
135
+ chunks.append(chunk)
136
+
137
+ # Move to next chunk with overlap
138
+ start += self.chunk_size - self.overlap
139
+ chunk_index += 1
140
+
141
+ return chunks
142
+
143
+ def _chunk_by_sentences(self, text: str, metadata: Optional[Dict[str, Any]]) -> List[TextChunk]:
144
+ """
145
+ Chunk text respecting sentence boundaries
146
+
147
+ Args:
148
+ text: Text to chunk
149
+ metadata: Optional metadata
150
+
151
+ Returns:
152
+ List of TextChunk objects
153
+ """
154
+ # Simple sentence splitting (can be improved with NLTK/spaCy)
155
+ sentences = self._split_sentences(text)
156
+
157
+ chunks: List[TextChunk] = []
158
+ current_chunk: List[str] = []
159
+ current_length = 0
160
+ current_start = 0
161
+ chunk_index = 0
162
+
163
+ for sent in sentences:
164
+ sent_length = len(sent)
165
+
166
+ # If adding this sentence would exceed chunk_size
167
+ if current_length + sent_length > self.chunk_size and current_chunk:
168
+ # Finalize current chunk
169
+ chunk_text = " ".join(current_chunk)
170
+ chunk_end = current_start + len(chunk_text)
171
+
172
+ chunks.append(
173
+ TextChunk(
174
+ text=chunk_text,
175
+ start_char=current_start,
176
+ end_char=chunk_end,
177
+ chunk_index=chunk_index,
178
+ metadata=metadata or {},
179
+ )
180
+ )
181
+
182
+ # Start new chunk with overlap (last few sentences)
183
+ overlap_sentences: List[str] = self._get_overlap_sentences(current_chunk)
184
+ current_chunk = overlap_sentences
185
+ current_length = sum(len(s) + 1 for s in current_chunk) # +1 for spaces
186
+ current_start = chunk_end - current_length
187
+ chunk_index += 1
188
+
189
+ current_chunk.append(sent)
190
+ current_length += sent_length + 1 # +1 for space
191
+
192
+ # Add final chunk
193
+ if current_chunk:
194
+ chunk_text = " ".join(current_chunk)
195
+ chunks.append(
196
+ TextChunk(
197
+ text=chunk_text,
198
+ start_char=current_start,
199
+ end_char=len(text),
200
+ chunk_index=chunk_index,
201
+ metadata=metadata or {},
202
+ )
203
+ )
204
+
205
+ return chunks
206
+
207
+ def _chunk_by_paragraphs(self, text: str, metadata: Optional[Dict[str, Any]]) -> List[TextChunk]:
208
+ """
209
+ Chunk text respecting paragraph boundaries
210
+
211
+ Args:
212
+ text: Text to chunk
213
+ metadata: Optional metadata
214
+
215
+ Returns:
216
+ List of TextChunk objects
217
+ """
218
+ # Split by double newlines (paragraphs)
219
+ paragraphs = text.split("\n\n")
220
+
221
+ chunks: List[TextChunk] = []
222
+ current_chunk: List[str] = []
223
+ current_length = 0
224
+ current_start = 0
225
+ chunk_index = 0
226
+
227
+ for para in paragraphs:
228
+ para = para.strip()
229
+ if not para:
230
+ continue
231
+
232
+ para_length = len(para)
233
+
234
+ # If adding this paragraph would exceed chunk_size
235
+ if current_length + para_length > self.chunk_size and current_chunk:
236
+ # Finalize current chunk
237
+ chunk_text = "\n\n".join(current_chunk)
238
+ chunk_end = current_start + len(chunk_text)
239
+
240
+ chunks.append(
241
+ TextChunk(
242
+ text=chunk_text,
243
+ start_char=current_start,
244
+ end_char=chunk_end,
245
+ chunk_index=chunk_index,
246
+ metadata=metadata or {},
247
+ )
248
+ )
249
+
250
+ # Start new chunk
251
+ current_chunk = []
252
+ current_length = 0
253
+ current_start = chunk_end
254
+ chunk_index += 1
255
+
256
+ current_chunk.append(para)
257
+ current_length += para_length + 2 # +2 for \n\n
258
+
259
+ # Add final chunk
260
+ if current_chunk:
261
+ chunk_text = "\n\n".join(current_chunk)
262
+ chunks.append(
263
+ TextChunk(
264
+ text=chunk_text,
265
+ start_char=current_start,
266
+ end_char=len(text),
267
+ chunk_index=chunk_index,
268
+ metadata=metadata or {},
269
+ )
270
+ )
271
+
272
+ return chunks
273
+
274
+ def _split_sentences(self, text: str) -> List[str]:
275
+ """
276
+ Split text into sentences (simple implementation)
277
+
278
+ For production, consider using NLTK's sent_tokenize or spaCy.
279
+
280
+ Args:
281
+ text: Text to split
282
+
283
+ Returns:
284
+ List of sentences
285
+ """
286
+ import re
287
+
288
+ # Simple sentence splitting by period, question mark, exclamation
289
+ # This is a basic implementation - can be improved
290
+ sentences = re.split(r"(?<=[.!?])\s+", text)
291
+ return [s.strip() for s in sentences if s.strip()]
292
+
293
+ def _get_overlap_sentences(self, sentences: List[str]) -> List[str]:
294
+ """
295
+ Get last few sentences for overlap
296
+
297
+ Args:
298
+ sentences: List of sentences
299
+
300
+ Returns:
301
+ Last few sentences that fit in overlap size
302
+ """
303
+ if not sentences or self.overlap == 0:
304
+ return []
305
+
306
+ overlap_sentences: List[str] = []
307
+ overlap_length = 0
308
+
309
+ # Take sentences from end until we reach overlap size
310
+ for sent in reversed(sentences):
311
+ if overlap_length + len(sent) + 1 <= self.overlap:
312
+ overlap_sentences.insert(0, sent)
313
+ overlap_length += len(sent) + 1
314
+ else:
315
+ break
316
+
317
+ return overlap_sentences
@@ -0,0 +1,27 @@
1
+ """
2
+ Knowledge Graph Entity and Relation Extractors
3
+
4
+ This module provides extractors for building knowledge graphs from text.
5
+ """
6
+
7
+ from aiecs.application.knowledge_graph.extractors.base import (
8
+ EntityExtractor,
9
+ RelationExtractor,
10
+ )
11
+ from aiecs.application.knowledge_graph.extractors.llm_entity_extractor import (
12
+ LLMEntityExtractor,
13
+ )
14
+ from aiecs.application.knowledge_graph.extractors.ner_entity_extractor import (
15
+ NEREntityExtractor,
16
+ )
17
+ from aiecs.application.knowledge_graph.extractors.llm_relation_extractor import (
18
+ LLMRelationExtractor,
19
+ )
20
+
21
+ __all__ = [
22
+ "EntityExtractor",
23
+ "RelationExtractor",
24
+ "LLMEntityExtractor",
25
+ "NEREntityExtractor",
26
+ "LLMRelationExtractor",
27
+ ]
@@ -0,0 +1,98 @@
1
+ """
2
+ Base Abstract Classes for Entity and Relation Extraction
3
+
4
+ Defines the interface for extracting entities and relations from text.
5
+ """
6
+
7
+ from abc import ABC, abstractmethod
8
+ from typing import List, Optional
9
+ from aiecs.domain.knowledge_graph.models.entity import Entity
10
+ from aiecs.domain.knowledge_graph.models.relation import Relation
11
+
12
+
13
+ class EntityExtractor(ABC):
14
+ """
15
+ Abstract base class for entity extraction
16
+
17
+ Entity extractors take text input and return a list of entities found in the text.
18
+ Different implementations can use different methods (LLM, NER, rule-based, etc.).
19
+
20
+ Example:
21
+ ```python
22
+ extractor = LLMEntityExtractor(llm_client, schema)
23
+ entities = await extractor.extract_entities(
24
+ "Alice works at Tech Corp in San Francisco"
25
+ )
26
+ # Returns: [Entity(Person: Alice), Entity(Company: Tech Corp), ...]
27
+ ```
28
+ """
29
+
30
+ @abstractmethod
31
+ async def extract_entities(self, text: str, entity_types: Optional[List[str]] = None, **kwargs) -> List[Entity]:
32
+ """
33
+ Extract entities from text
34
+
35
+ Args:
36
+ text: Input text to extract entities from
37
+ entity_types: Optional list of entity types to extract (e.g., ["Person", "Company"])
38
+ If None, extract all types supported by the extractor
39
+ **kwargs: Additional extractor-specific parameters
40
+
41
+ Returns:
42
+ List of Entity objects found in the text
43
+
44
+ Raises:
45
+ ValueError: If text is empty or invalid
46
+ RuntimeError: If extraction fails
47
+ """
48
+
49
+
50
+ class RelationExtractor(ABC):
51
+ """
52
+ Abstract base class for relation extraction
53
+
54
+ Relation extractors take text and a list of entities, and return relations
55
+ (edges) between those entities. This is a two-stage extraction process:
56
+ entities must be extracted first, then relations between them.
57
+
58
+ Example:
59
+ ```python
60
+ extractor = LLMRelationExtractor(llm_client, schema)
61
+
62
+ # Entities already extracted
63
+ alice = Entity(id="e1", entity_type="Person", properties={"name": "Alice"})
64
+ tech_corp = Entity(id="e2", entity_type="Company", properties={"name": "Tech Corp"})
65
+
66
+ relations = await extractor.extract_relations(
67
+ text="Alice works at Tech Corp",
68
+ entities=[alice, tech_corp]
69
+ )
70
+ # Returns: [Relation(alice -[WORKS_FOR]-> tech_corp)]
71
+ ```
72
+ """
73
+
74
+ @abstractmethod
75
+ async def extract_relations(
76
+ self,
77
+ text: str,
78
+ entities: List[Entity],
79
+ relation_types: Optional[List[str]] = None,
80
+ **kwargs,
81
+ ) -> List[Relation]:
82
+ """
83
+ Extract relations from text given known entities
84
+
85
+ Args:
86
+ text: Input text containing the entities
87
+ entities: List of entities already extracted from this text
88
+ relation_types: Optional list of relation types to extract (e.g., ["WORKS_FOR", "KNOWS"])
89
+ If None, extract all types supported by the extractor
90
+ **kwargs: Additional extractor-specific parameters
91
+
92
+ Returns:
93
+ List of Relation objects found between the entities
94
+
95
+ Raises:
96
+ ValueError: If text is empty or entities list is empty
97
+ RuntimeError: If extraction fails
98
+ """