aiecs 1.5.4__tar.gz → 1.8.2__tar.gz

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 (363) hide show
  1. {aiecs-1.5.4 → aiecs-1.8.2}/MANIFEST.in +2 -1
  2. {aiecs-1.5.4/aiecs.egg-info → aiecs-1.8.2}/PKG-INFO +42 -7
  3. {aiecs-1.5.4 → aiecs-1.8.2}/README.md +16 -0
  4. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/__init__.py +1 -1
  5. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/aiecs_client.py +37 -13
  6. aiecs-1.8.2/aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  7. aiecs-1.8.2/aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  8. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/builder/graph_builder.py +4 -6
  9. aiecs-1.8.2/aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  10. aiecs-1.8.2/aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  11. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/builder/schema_mapping.py +84 -1
  12. aiecs-1.8.2/aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  13. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +12 -5
  14. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +5 -2
  15. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +3 -1
  16. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  17. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  18. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  19. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  20. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  21. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  22. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +58 -7
  23. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  24. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  25. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +72 -16
  26. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  27. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  28. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  29. aiecs-1.8.2/aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  30. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +4 -2
  31. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +306 -21
  32. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +241 -17
  33. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +18 -6
  34. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +11 -4
  35. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/query_planner.py +28 -23
  36. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +10 -4
  37. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/search/hybrid_search.py +16 -3
  38. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/search/reranker.py +4 -6
  39. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/search/reranker_strategies.py +12 -16
  40. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/search/text_similarity.py +5 -7
  41. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/validators/relation_validator.py +67 -5
  42. aiecs-1.8.2/aiecs/config/__init__.py +30 -0
  43. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/config/config.py +330 -0
  44. aiecs-1.8.2/aiecs/config/tool_config.py +435 -0
  45. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/core/__init__.py +16 -0
  46. aiecs-1.8.2/aiecs/core/registry/__init__.py +31 -0
  47. aiecs-1.8.2/aiecs/core/registry/service_registry.py +92 -0
  48. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/base_agent.py +79 -0
  49. aiecs-1.8.2/aiecs/domain/agent/hybrid_agent.py +1812 -0
  50. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/context_engine_adapter.py +24 -16
  51. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/knowledge_aware_agent.py +68 -25
  52. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/llm_agent.py +32 -7
  53. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/memory/conversation.py +58 -15
  54. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/models.py +24 -0
  55. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/tools/__init__.py +4 -1
  56. aiecs-1.8.2/aiecs/domain/agent/tools/schema_generator.py +377 -0
  57. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/resource_manager.py +6 -0
  58. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/context/context_engine.py +9 -6
  59. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/context/graph_memory.py +143 -26
  60. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/entity.py +21 -1
  61. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/query.py +15 -2
  62. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/relation.py +70 -1
  63. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/schema_manager.py +264 -59
  64. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/base.py +280 -30
  65. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/batch_operations.py +12 -0
  66. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/cache.py +4 -3
  67. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/error_handling.py +1 -1
  68. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/graceful_degradation.py +2 -2
  69. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/health_checks.py +2 -2
  70. aiecs-1.8.2/aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  71. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/migration.py +19 -12
  72. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/pagination.py +1 -1
  73. aiecs-1.8.2/aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  74. aiecs-1.8.2/aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  75. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/query_optimizer.py +32 -10
  76. aiecs-1.8.2/aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  77. aiecs-1.8.2/aiecs/infrastructure/graph_storage/tenant.py +412 -0
  78. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/messaging/websocket_manager.py +13 -6
  79. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/persistence/__init__.py +2 -1
  80. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/persistence/file_storage.py +27 -5
  81. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/__init__.py +2 -0
  82. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/client_factory.py +13 -2
  83. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/client_resolver.py +6 -2
  84. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/clients/__init__.py +5 -0
  85. aiecs-1.8.2/aiecs/llm/clients/base_client.py +369 -0
  86. aiecs-1.8.2/aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  87. aiecs-1.8.2/aiecs/llm/clients/googleai_client.py +415 -0
  88. aiecs-1.8.2/aiecs/llm/clients/openai_client.py +170 -0
  89. aiecs-1.8.2/aiecs/llm/clients/openai_compatible_mixin.py +407 -0
  90. aiecs-1.8.2/aiecs/llm/clients/openrouter_client.py +272 -0
  91. aiecs-1.8.2/aiecs/llm/clients/vertex_client.py +1260 -0
  92. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/clients/xai_client.py +88 -35
  93. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/config/config_loader.py +1 -0
  94. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/protocols.py +19 -1
  95. aiecs-1.8.2/aiecs/llm/utils/image_utils.py +179 -0
  96. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/main.py +11 -5
  97. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/aid/VERSION_MANAGEMENT.md +47 -6
  98. aiecs-1.8.2/aiecs/scripts/aid/module_checker.py +499 -0
  99. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/aid/version_manager.py +34 -8
  100. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/__init__.py +0 -2
  101. aiecs-1.8.2/aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  102. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/dependency_fixer.py +68 -7
  103. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/download_nlp_data.py +91 -3
  104. aiecs-1.8.2/aiecs/scripts/knowledge_graph/__init__.py +3 -0
  105. aiecs-1.8.2/aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  106. aiecs-1.8.2/aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  107. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/README.md +244 -22
  108. aiecs-1.8.2/aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  109. aiecs-1.8.2/aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  110. aiecs-1.8.2/aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  111. aiecs-1.8.2/aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  112. aiecs-1.8.2/aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  113. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/validate_tool_schemas.py +80 -4
  114. aiecs-1.8.2/aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  115. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tasks/worker.py +3 -1
  116. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/__init__.py +19 -1
  117. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/intelligence/data_fusion.py +261 -9
  118. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/base.py +29 -3
  119. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/worldbank.py +1 -1
  120. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/tool.py +34 -10
  121. aiecs-1.8.2/aiecs/tools/base_tool.py +596 -0
  122. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/ai_document_orchestrator.py +29 -12
  123. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/ai_document_writer_orchestrator.py +59 -21
  124. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/content_insertion_tool.py +46 -15
  125. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/document_creator_tool.py +178 -15
  126. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/document_layout_tool.py +39 -15
  127. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/document_parser_tool.py +74 -26
  128. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/document_writer_tool.py +258 -15
  129. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/knowledge_graph/graph_reasoning_tool.py +145 -57
  130. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/knowledge_graph/graph_search_tool.py +114 -73
  131. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/knowledge_graph/kg_builder_tool.py +99 -42
  132. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/langchain_adapter.py +2 -2
  133. aiecs-1.8.2/aiecs/tools/schema_generator.py +455 -0
  134. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/core.py +131 -48
  135. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/ai_data_analysis_orchestrator.py +26 -9
  136. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/ai_insight_generator_tool.py +26 -9
  137. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/ai_report_orchestrator_tool.py +26 -9
  138. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/data_loader_tool.py +25 -12
  139. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/data_profiler_tool.py +21 -8
  140. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/data_transformer_tool.py +21 -8
  141. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/data_visualizer_tool.py +22 -9
  142. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/model_trainer_tool.py +36 -12
  143. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/statistical_analyzer_tool.py +26 -9
  144. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/__init__.py +10 -1
  145. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/chart_tool.py +27 -14
  146. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/classfire_tool.py +31 -25
  147. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/image_tool.py +138 -89
  148. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/office_tool.py +76 -63
  149. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/pandas_tool.py +267 -9
  150. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/report_tool.py +112 -11
  151. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/research_tool.py +72 -9
  152. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/scraper_tool.py +88 -10
  153. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/task_tools/stats_tool.py +115 -9
  154. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/tool_executor/tool_executor.py +8 -4
  155. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/cache_provider.py +2 -1
  156. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/ws/socket_server.py +3 -0
  157. {aiecs-1.5.4 → aiecs-1.8.2/aiecs.egg-info}/PKG-INFO +42 -7
  158. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs.egg-info/SOURCES.txt +33 -2
  159. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs.egg-info/entry_points.txt +4 -1
  160. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs.egg-info/requires.txt +24 -3
  161. {aiecs-1.5.4 → aiecs-1.8.2}/pyproject.toml +78 -36
  162. aiecs-1.5.4/aiecs/application/knowledge_graph/builder/structured_pipeline.py +0 -442
  163. aiecs-1.5.4/aiecs/application/knowledge_graph/fusion/__init__.py +0 -23
  164. aiecs-1.5.4/aiecs/application/knowledge_graph/fusion/entity_linker.py +0 -334
  165. aiecs-1.5.4/aiecs/config/__init__.py +0 -16
  166. aiecs-1.5.4/aiecs/config/registry.py +0 -23
  167. aiecs-1.5.4/aiecs/domain/agent/hybrid_agent.py +0 -1063
  168. aiecs-1.5.4/aiecs/domain/agent/tools/schema_generator.py +0 -221
  169. aiecs-1.5.4/aiecs/infrastructure/graph_storage/in_memory.py +0 -508
  170. aiecs-1.5.4/aiecs/infrastructure/graph_storage/postgres.py +0 -838
  171. aiecs-1.5.4/aiecs/infrastructure/graph_storage/sqlite.py +0 -648
  172. aiecs-1.5.4/aiecs/llm/clients/base_client.py +0 -180
  173. aiecs-1.5.4/aiecs/llm/clients/googleai_client.py +0 -179
  174. aiecs-1.5.4/aiecs/llm/clients/openai_client.py +0 -135
  175. aiecs-1.5.4/aiecs/llm/clients/vertex_client.py +0 -398
  176. aiecs-1.5.4/aiecs/scripts/dependance_check/dependency_checker.py +0 -925
  177. aiecs-1.5.4/aiecs/scripts/dependance_check/quick_dependency_check.py +0 -270
  178. aiecs-1.5.4/aiecs/tools/base_tool.py +0 -195
  179. aiecs-1.5.4/aiecs/tools/schema_generator.py +0 -272
  180. {aiecs-1.5.4 → aiecs-1.8.2}/LICENSE +0 -0
  181. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/__main__.py +0 -0
  182. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/__init__.py +0 -0
  183. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/executors/__init__.py +0 -0
  184. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/executors/operation_executor.py +0 -0
  185. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/__init__.py +0 -0
  186. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/builder/__init__.py +0 -0
  187. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/builder/document_builder.py +0 -0
  188. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/builder/text_chunker.py +0 -0
  189. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/extractors/__init__.py +0 -0
  190. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/extractors/base.py +0 -0
  191. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +0 -0
  192. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/pattern_matching/__init__.py +0 -0
  193. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +0 -0
  194. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/pattern_matching/query_executor.py +0 -0
  195. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/profiling/__init__.py +0 -0
  196. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +0 -0
  197. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/profiling/query_profiler.py +0 -0
  198. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/__init__.py +0 -0
  199. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +0 -0
  200. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/inference_engine.py +0 -0
  201. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +0 -0
  202. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +0 -0
  203. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +0 -0
  204. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +0 -0
  205. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +0 -0
  206. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/retrieval/__init__.py +0 -0
  207. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +0 -0
  208. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/retrieval/strategy_types.py +0 -0
  209. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/search/__init__.py +0 -0
  210. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/traversal/__init__.py +0 -0
  211. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +0 -0
  212. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/traversal/path_scorer.py +0 -0
  213. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/validators/__init__.py +0 -0
  214. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/visualization/__init__.py +0 -0
  215. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/application/knowledge_graph/visualization/graph_visualizer.py +0 -0
  216. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/common/__init__.py +0 -0
  217. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/common/knowledge_graph/__init__.py +0 -0
  218. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/common/knowledge_graph/runnable.py +0 -0
  219. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/config/graph_config.py +0 -0
  220. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/core/interface/__init__.py +0 -0
  221. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/core/interface/execution_interface.py +0 -0
  222. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/core/interface/storage_interface.py +0 -0
  223. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/__init__.py +0 -0
  224. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/__init__.py +0 -0
  225. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/exceptions.py +0 -0
  226. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/graph_aware_mixin.py +0 -0
  227. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/__init__.py +0 -0
  228. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/context_compressor.py +0 -0
  229. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/protocols.py +0 -0
  230. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/retry_policy.py +0 -0
  231. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/integration/role_config.py +0 -0
  232. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/lifecycle.py +0 -0
  233. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/memory/__init__.py +0 -0
  234. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/migration/__init__.py +0 -0
  235. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/migration/conversion.py +0 -0
  236. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/migration/legacy_wrapper.py +0 -0
  237. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/observability.py +0 -0
  238. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/persistence.py +0 -0
  239. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/prompts/__init__.py +0 -0
  240. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/prompts/builder.py +0 -0
  241. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/prompts/formatters.py +0 -0
  242. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/prompts/template.py +0 -0
  243. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/registry.py +0 -0
  244. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/agent/tool_agent.py +0 -0
  245. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/__init__.py +0 -0
  246. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/agent_adapter.py +0 -0
  247. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/analytics.py +0 -0
  248. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/collaborative_workflow.py +0 -0
  249. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/communication_hub.py +0 -0
  250. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/community_builder.py +0 -0
  251. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/community_integration.py +0 -0
  252. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/community_manager.py +0 -0
  253. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/decision_engine.py +0 -0
  254. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/exceptions.py +0 -0
  255. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/models/__init__.py +0 -0
  256. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/models/community_models.py +0 -0
  257. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/community/shared_context_manager.py +0 -0
  258. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/context/__init__.py +0 -0
  259. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/context/conversation_models.py +0 -0
  260. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/execution/__init__.py +0 -0
  261. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/execution/model.py +0 -0
  262. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/__init__.py +0 -0
  263. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/__init__.py +0 -0
  264. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/evidence.py +0 -0
  265. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/inference_rule.py +0 -0
  266. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/path.py +0 -0
  267. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/path_pattern.py +0 -0
  268. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/models/query_plan.py +0 -0
  269. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/__init__.py +0 -0
  270. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/entity_type.py +0 -0
  271. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/graph_schema.py +0 -0
  272. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/property_schema.py +0 -0
  273. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/relation_type.py +0 -0
  274. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/knowledge_graph/schema/type_enums.py +0 -0
  275. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/task/__init__.py +0 -0
  276. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/task/dsl_processor.py +0 -0
  277. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/task/model.py +0 -0
  278. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/domain/task/task_context.py +0 -0
  279. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/__init__.py +0 -0
  280. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/__init__.py +0 -0
  281. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/distributed.py +0 -0
  282. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/index_optimization.py +0 -0
  283. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/lazy_loading.py +0 -0
  284. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/metrics.py +0 -0
  285. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/performance_monitoring.py +0 -0
  286. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/protocols.py +0 -0
  287. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/schema_cache.py +0 -0
  288. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/graph_storage/streaming.py +0 -0
  289. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/messaging/__init__.py +0 -0
  290. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/messaging/celery_task_manager.py +0 -0
  291. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/monitoring/__init__.py +0 -0
  292. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/monitoring/executor_metrics.py +0 -0
  293. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/monitoring/global_metrics_manager.py +0 -0
  294. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/monitoring/structured_logger.py +0 -0
  295. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/monitoring/tracing_manager.py +0 -0
  296. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/persistence/context_engine_client.py +0 -0
  297. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/persistence/database_manager.py +0 -0
  298. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/infrastructure/persistence/redis_client.py +0 -0
  299. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/callbacks/__init__.py +0 -0
  300. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/callbacks/custom_callbacks.py +0 -0
  301. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/config/__init__.py +0 -0
  302. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/config/config_validator.py +0 -0
  303. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/config/model_config.py +0 -0
  304. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/utils/__init__.py +0 -0
  305. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/llm/utils/validate_config.py +0 -0
  306. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/__init__.py +0 -0
  307. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/aid/__init__.py +0 -0
  308. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md +0 -0
  309. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/README_DEPENDENCY_CHECKER.md +0 -0
  310. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_check/setup_nlp_data.sh +0 -0
  311. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/__init__.py +0 -0
  312. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/README_WEASEL_PATCH.md +0 -0
  313. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/__init__.py +0 -0
  314. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.py +0 -0
  315. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.sh +0 -0
  316. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/patch_weasel_library.sh +0 -0
  317. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/dependance_patch/fix_weasel/run_weasel_patch.sh +0 -0
  318. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +0 -0
  319. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/__init__.py +0 -0
  320. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/check_type_annotations.py +0 -0
  321. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/scripts/tools_develop/verify_tools.py +0 -0
  322. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tasks/__init__.py +0 -0
  323. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/__init__.py +0 -0
  324. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/intelligence/__init__.py +0 -0
  325. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/intelligence/query_analyzer.py +0 -0
  326. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/intelligence/search_enhancer.py +0 -0
  327. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/monitoring/__init__.py +0 -0
  328. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/monitoring/metrics.py +0 -0
  329. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/__init__.py +0 -0
  330. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/census.py +0 -0
  331. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/fred.py +0 -0
  332. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/providers/newsapi.py +0 -0
  333. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/reliability/__init__.py +0 -0
  334. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/reliability/error_handler.py +0 -0
  335. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/reliability/fallback_strategy.py +0 -0
  336. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/utils/__init__.py +0 -0
  337. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/apisource/utils/validators.py +0 -0
  338. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/docs/__init__.py +0 -0
  339. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/knowledge_graph/__init__.py +0 -0
  340. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/__init__.py +0 -0
  341. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/analyzers.py +0 -0
  342. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/cache.py +0 -0
  343. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/constants.py +0 -0
  344. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/context.py +0 -0
  345. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/deduplicator.py +0 -0
  346. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/error_handler.py +0 -0
  347. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/metrics.py +0 -0
  348. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/rate_limiter.py +0 -0
  349. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/search_tool/schemas.py +0 -0
  350. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/statistics/__init__.py +0 -0
  351. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/temp_file_manager.py +0 -0
  352. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/tools/tool_executor/__init__.py +0 -0
  353. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/LLM_output_structor.py +0 -0
  354. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/__init__.py +0 -0
  355. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/base_callback.py +0 -0
  356. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/execution_utils.py +0 -0
  357. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/logging.py +0 -0
  358. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/prompt_loader.py +0 -0
  359. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/utils/token_usage_repository.py +0 -0
  360. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs/ws/__init__.py +0 -0
  361. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs.egg-info/dependency_links.txt +0 -0
  362. {aiecs-1.5.4 → aiecs-1.8.2}/aiecs.egg-info/top_level.txt +0 -0
  363. {aiecs-1.5.4 → aiecs-1.8.2}/setup.cfg +0 -0
@@ -11,4 +11,5 @@ global-exclude test*
11
11
  global-exclude tests*
12
12
  global-exclude htmlcov*
13
13
  global-exclude setup.py
14
- global-exclude *test*.py
14
+ global-exclude test_*.py
15
+ global-exclude *_test.py
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiecs
3
- Version: 1.5.4
3
+ Version: 1.8.2
4
4
  Summary: AI Execute Services - A middleware framework for AI-powered task execution and tool orchestration
5
5
  Author-email: AIECS Team <iretbl@gmail.com>
6
6
  License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/aiecs-team/aiecs
8
- Project-URL: Bug Tracker, https://github.com/aiecs-team/aiecs/issues
7
+ Project-URL: Homepage, https://github.com/Howmany-Zeta/AI-Execute-Services
8
+ Project-URL: Bug Tracker, https://github.com/Howmany-Zeta/AI-Execute-Services/issues
9
9
  Project-URL: Documentation, https://aiecs.readthedocs.io
10
10
  Keywords: ai,middleware,llm,orchestration,async,tools
11
11
  Classifier: Development Status :: 4 - Beta
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Framework :: FastAPI
19
19
  Classifier: Framework :: Celery
20
20
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
- Requires-Python: <3.13,>=3.10
21
+ Requires-Python: <3.13,>=3.11
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: fastapi<0.116.0,>=0.115.12
@@ -38,7 +38,7 @@ Requires-Dist: tenacity<10.0.0,>=9.1.2
38
38
  Requires-Dist: flower<3.0.0,>=2.0.1
39
39
  Requires-Dist: openai<1.76.0,>=1.68.2
40
40
  Requires-Dist: google-cloud-aiplatform<2.0.0,>=1.80.0
41
- Requires-Dist: google-generativeai<1.0.0,>=0.8.0
41
+ Requires-Dist: google-genai<2.0.0,>=1.0.0
42
42
  Requires-Dist: google-api-python-client<3.0.0,>=2.108.0
43
43
  Requires-Dist: google-auth<3.0.0,>=2.25.0
44
44
  Requires-Dist: google-auth-httplib2<1.0.0,>=0.2.0
@@ -48,19 +48,20 @@ Requires-Dist: langgraph<0.6.0,>=0.5.3
48
48
  Requires-Dist: weasel==0.4.1
49
49
  Requires-Dist: spacy<4.0.0,>=3.8.7
50
50
  Requires-Dist: rake-nltk<2.0.0,>=1.0.6
51
- Requires-Dist: numpy<3.0.0,>=2.2.6
51
+ Requires-Dist: numpy<3.0.0,>=2.4.1
52
52
  Requires-Dist: pandas<3.0.0,>=2.2.3
53
53
  Requires-Dist: scipy<2.0.0,>=1.15.3
54
54
  Requires-Dist: scikit-learn<2.0.0,>=1.5.0
55
55
  Requires-Dist: statsmodels<0.15.0,>=0.14.4
56
56
  Requires-Dist: pyreadstat<2.0.0,>=1.2.9
57
+ Requires-Dist: pyarrow<22.0.0,>=21.0.0
57
58
  Requires-Dist: tabulate<0.10.0,>=0.9.0
58
59
  Requires-Dist: python-docx<2.0.0,>=1.1.2
59
60
  Requires-Dist: python-pptx<2.0.0,>=1.0.2
60
61
  Requires-Dist: openpyxl<4.0.0,>=3.1.5
61
62
  Requires-Dist: pdfplumber<0.12.0,>=0.11.7
62
63
  Requires-Dist: pdfminer-six==20250506
63
- Requires-Dist: tika<3.0.0,>=2.6.0
64
+ Requires-Dist: tika<4.0.0,>=3.1.0
64
65
  Requires-Dist: matplotlib<4.0.0,>=3.10.3
65
66
  Requires-Dist: seaborn<0.14.0,>=0.13.2
66
67
  Requires-Dist: jinja2<4.0.0,>=3.1.6
@@ -82,12 +83,30 @@ Requires-Dist: prometheus-client<1.0.0,>=0.21.1
82
83
  Requires-Dist: jaeger-client<5.0.0,>=4.8.0
83
84
  Requires-Dist: opentracing<3.0.0,>=2.4.0
84
85
  Requires-Dist: psutil<8.0.0,>=7.0.0
86
+ Provides-Extra: dev
87
+ Requires-Dist: pytest<9.0.0,>=8.4.2; extra == "dev"
88
+ Requires-Dist: pytest-asyncio<2.0.0,>=1.2.0; extra == "dev"
89
+ Requires-Dist: pytest-cov<8.0.0,>=7.0.0; extra == "dev"
90
+ Requires-Dist: pytest-timeout<3.0.0,>=2.4.0; extra == "dev"
91
+ Requires-Dist: mypy<2.0.0,>=1.18.2; extra == "dev"
92
+ Requires-Dist: flake8<8.0.0,>=7.3.0; extra == "dev"
93
+ Requires-Dist: black<26.0.0,>=25.1.0; extra == "dev"
94
+ Requires-Dist: types-aiofiles>=25.1.0.20251011; extra == "dev"
95
+ Requires-Dist: types-cachetools>=6.2.0.20251022; extra == "dev"
96
+ Requires-Dist: types-colorama>=0.4.15.20250801; extra == "dev"
97
+ Requires-Dist: types-tqdm>=4.67.0.20250809; extra == "dev"
98
+ Requires-Dist: types-pyyaml>=6.0.12.20250915; extra == "dev"
99
+ Requires-Dist: types-opentracing>=2.4.10.20250622; extra == "dev"
100
+ Requires-Dist: types-lxml>=2025.8.25; extra == "dev"
101
+ Requires-Dist: types-bleach>=6.3.0.20251115; extra == "dev"
85
102
  Provides-Extra: docs
86
103
  Requires-Dist: sphinx<8.0.0,>=7.0.0; extra == "docs"
87
104
  Requires-Dist: sphinx-rtd-theme<3.0.0,>=2.0.0; extra == "docs"
88
105
  Requires-Dist: sphinx-autodoc-typehints<3.0.0,>=2.0.0; extra == "docs"
89
106
  Requires-Dist: myst-parser<3.0.0,>=2.0.0; extra == "docs"
90
107
  Requires-Dist: sphinx-copybutton<1.0.0,>=0.5.0; extra == "docs"
108
+ Provides-Extra: scraper
109
+ Requires-Dist: playwright-stealth<2.0.0,>=1.0.6; extra == "scraper"
91
110
  Dynamic: license-file
92
111
 
93
112
  # AIECS - AI Execute Services
@@ -150,6 +169,22 @@ aiecs-fix-deps
150
169
  aiecs-patch-weasel
151
170
  ```
152
171
 
172
+ ### Container Deployment
173
+
174
+ When installing aiecs in a container (e.g., Docker), you may encounter a warning about scripts not being on PATH:
175
+
176
+ ```
177
+ WARNING: The scripts aiecs, aiecs-check-deps, ... are installed in '/tmp/.local/bin' which is not on PATH.
178
+ ```
179
+
180
+ **Quick Fix:** Add the user bin directory to PATH in your Dockerfile:
181
+
182
+ ```dockerfile
183
+ ENV PATH="${PATH}:/root/.local/bin"
184
+ ```
185
+
186
+ For detailed troubleshooting and best practices, see [Deployment Troubleshooting Guide](docs/user/DEPLOYMENT_TROUBLESHOOTING.md).
187
+
153
188
  ## Quick Start
154
189
 
155
190
  ### Basic Usage
@@ -58,6 +58,22 @@ aiecs-fix-deps
58
58
  aiecs-patch-weasel
59
59
  ```
60
60
 
61
+ ### Container Deployment
62
+
63
+ When installing aiecs in a container (e.g., Docker), you may encounter a warning about scripts not being on PATH:
64
+
65
+ ```
66
+ WARNING: The scripts aiecs, aiecs-check-deps, ... are installed in '/tmp/.local/bin' which is not on PATH.
67
+ ```
68
+
69
+ **Quick Fix:** Add the user bin directory to PATH in your Dockerfile:
70
+
71
+ ```dockerfile
72
+ ENV PATH="${PATH}:/root/.local/bin"
73
+ ```
74
+
75
+ For detailed troubleshooting and best practices, see [Deployment Troubleshooting Guide](docs/user/DEPLOYMENT_TROUBLESHOOTING.md).
76
+
61
77
  ## Quick Start
62
78
 
63
79
  ### Basic Usage
@@ -5,7 +5,7 @@ A powerful Python middleware framework for building AI-powered applications
5
5
  with tool orchestration, task execution, and multi-provider LLM support.
6
6
  """
7
7
 
8
- __version__ = "1.5.4"
8
+ __version__ = "1.8.2"
9
9
  __author__ = "AIECS Team"
10
10
  __email__ = "iretbl@gmail.com"
11
11
 
@@ -160,14 +160,21 @@ class AIECS:
160
160
  "mode": "simple",
161
161
  }
162
162
 
163
- # TODO: Implement direct task execution without Celery
164
- # For now, return a placeholder
165
- return {
166
- "status": "completed",
167
- "result": "Simple mode execution (placeholder)",
168
- "mode": "simple",
169
- "context_id": context.user_id,
170
- }
163
+ # Direct task execution using process_task_async (no Celery required)
164
+ try:
165
+ result = await self.process_task_async(context)
166
+ return {
167
+ **result,
168
+ "mode": "simple",
169
+ }
170
+ except Exception as e:
171
+ logger.error(f"Simple mode execution failed: {e}", exc_info=True)
172
+ return {
173
+ "status": "failed",
174
+ "error": str(e),
175
+ "mode": "simple",
176
+ "context_id": context.user_id if hasattr(context, "user_id") else "unknown",
177
+ }
171
178
 
172
179
  elif self.mode == "full":
173
180
  if not self.task_manager:
@@ -203,11 +210,28 @@ class AIECS:
203
210
  if not tool:
204
211
  raise ValueError(f"Tool '{tool_name}' not found")
205
212
 
206
- # Prepare parameters with operation
207
- tool_params = {**params, "op": operation}
208
-
209
- # Execute tool
210
- return await tool.execute(tool_params)
213
+ # Check if tool has execute() method (some tools like KnowledgeGraphBuilderTool)
214
+ if hasattr(tool, "execute") and callable(getattr(tool, "execute")):
215
+ # Tools with execute() method expect kwargs unpacked
216
+ # Some tools use "op", others use "action" - include both for compatibility
217
+ tool_params = {**params, "op": operation, "action": operation}
218
+ return await tool.execute(**tool_params)
219
+
220
+ # Check if tool has run_async() method (BaseTool-based tools)
221
+ elif hasattr(tool, "run_async") and callable(getattr(tool, "run_async")):
222
+ # BaseTool.run_async expects op as first parameter, then kwargs
223
+ return await tool.run_async(operation, **params)
224
+
225
+ # Check if tool has run() method (synchronous BaseTool)
226
+ elif hasattr(tool, "run") and callable(getattr(tool, "run")):
227
+ # BaseTool.run expects op as first parameter, then kwargs
228
+ return tool.run(operation, **params)
229
+
230
+ else:
231
+ raise ValueError(
232
+ f"Tool '{tool_name}' does not have an 'execute()', 'run_async()', or 'run()' method. "
233
+ f"Available methods: {[m for m in dir(tool) if not m.startswith('_')]}"
234
+ )
211
235
 
212
236
  async def get_available_tools(self) -> List[Dict[str, Any]]:
213
237
  """Get list of all available tools"""
@@ -0,0 +1,302 @@
1
+ """
2
+ Data Quality Validation for Knowledge Graph Import
3
+
4
+ Provides validation capabilities to ensure data quality during import,
5
+ including range validation, outlier detection, completeness checks, and
6
+ type consistency validation.
7
+ """
8
+
9
+ from typing import Dict, List, Optional, Any, Set, Union
10
+ from dataclasses import dataclass, field
11
+ from enum import Enum
12
+ import logging
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+ # Check for pandas and numpy availability
17
+ try:
18
+ import pandas as pd
19
+ import numpy as np
20
+ PANDAS_AVAILABLE = True
21
+ except ImportError:
22
+ PANDAS_AVAILABLE = False
23
+
24
+
25
+ class ViolationType(Enum):
26
+ """Types of data quality violations"""
27
+ RANGE_VIOLATION = "range_violation"
28
+ OUTLIER = "outlier"
29
+ MISSING_VALUE = "missing_value"
30
+ TYPE_MISMATCH = "type_mismatch"
31
+
32
+
33
+ @dataclass
34
+ class ValidationViolation:
35
+ """
36
+ Represents a single data quality violation
37
+
38
+ Attributes:
39
+ violation_type: Type of violation
40
+ property_name: Property that violated the rule
41
+ row_id: Identifier of the row with violation
42
+ value: The violating value
43
+ expected: Expected value or constraint
44
+ message: Human-readable description
45
+ """
46
+ violation_type: ViolationType
47
+ property_name: str
48
+ row_id: Any
49
+ value: Any
50
+ expected: Any
51
+ message: str
52
+
53
+
54
+ @dataclass
55
+ class QualityReport:
56
+ """
57
+ Data quality validation report
58
+
59
+ Attributes:
60
+ total_rows: Total number of rows validated
61
+ violations: List of all violations found
62
+ completeness: Completeness percentage per property
63
+ outlier_count: Number of outliers detected per property
64
+ range_violations: Number of range violations per property
65
+ type_violations: Number of type violations per property
66
+ passed: Whether validation passed (no critical violations)
67
+ """
68
+ total_rows: int
69
+ violations: List[ValidationViolation] = field(default_factory=list)
70
+ completeness: Dict[str, float] = field(default_factory=dict)
71
+ outlier_count: Dict[str, int] = field(default_factory=dict)
72
+ range_violations: Dict[str, int] = field(default_factory=dict)
73
+ type_violations: Dict[str, int] = field(default_factory=dict)
74
+ passed: bool = True
75
+
76
+ def add_violation(self, violation: ValidationViolation):
77
+ """Add a violation to the report"""
78
+ self.violations.append(violation)
79
+
80
+ # Update counts
81
+ if violation.violation_type == ViolationType.RANGE_VIOLATION:
82
+ self.range_violations[violation.property_name] = \
83
+ self.range_violations.get(violation.property_name, 0) + 1
84
+ elif violation.violation_type == ViolationType.OUTLIER:
85
+ self.outlier_count[violation.property_name] = \
86
+ self.outlier_count.get(violation.property_name, 0) + 1
87
+ elif violation.violation_type == ViolationType.TYPE_MISMATCH:
88
+ self.type_violations[violation.property_name] = \
89
+ self.type_violations.get(violation.property_name, 0) + 1
90
+
91
+ def get_summary(self) -> Dict[str, Any]:
92
+ """Get a summary of the quality report"""
93
+ return {
94
+ "total_rows": self.total_rows,
95
+ "total_violations": len(self.violations),
96
+ "range_violations": sum(self.range_violations.values()),
97
+ "outliers": sum(self.outlier_count.values()),
98
+ "type_violations": sum(self.type_violations.values()),
99
+ "completeness": self.completeness,
100
+ "passed": self.passed
101
+ }
102
+
103
+
104
+ @dataclass
105
+ class RangeRule:
106
+ """Range validation rule for numeric properties"""
107
+ min_value: Optional[float] = None
108
+ max_value: Optional[float] = None
109
+
110
+
111
+ @dataclass
112
+ class ValidationConfig:
113
+ """
114
+ Configuration for data quality validation
115
+
116
+ Attributes:
117
+ range_rules: Range validation rules per property
118
+ required_properties: Set of required properties
119
+ detect_outliers: Whether to detect outliers (3 std devs)
120
+ fail_on_violations: Whether to fail import on violations
121
+ max_violation_rate: Maximum allowed violation rate (0.0-1.0)
122
+ """
123
+ range_rules: Dict[str, RangeRule] = field(default_factory=dict)
124
+ required_properties: Set[str] = field(default_factory=set)
125
+ detect_outliers: bool = False
126
+ fail_on_violations: bool = False
127
+ max_violation_rate: float = 0.1 # 10% by default
128
+
129
+
130
+ class DataQualityValidator:
131
+ """
132
+ Validates data quality during knowledge graph import
133
+
134
+ Provides range validation, outlier detection, completeness checks,
135
+ and type consistency validation.
136
+ """
137
+
138
+ def __init__(self, config: Optional[ValidationConfig] = None):
139
+ """
140
+ Initialize validator with configuration
141
+
142
+ Args:
143
+ config: Validation configuration
144
+ """
145
+ self.config = config or ValidationConfig()
146
+ self._property_stats: Dict[str, Dict[str, float]] = {}
147
+
148
+ def validate_dataframe(self, df: 'pd.DataFrame', id_column: Optional[str] = None) -> QualityReport:
149
+ """
150
+ Validate a pandas DataFrame
151
+
152
+ Args:
153
+ df: DataFrame to validate
154
+ id_column: Column to use as row identifier
155
+
156
+ Returns:
157
+ QualityReport with validation results
158
+ """
159
+ if not PANDAS_AVAILABLE:
160
+ raise ImportError("pandas and numpy are required for data quality validation")
161
+
162
+ report = QualityReport(total_rows=len(df))
163
+
164
+ # Use index as row ID if no id_column specified
165
+ row_ids = df[id_column] if id_column and id_column in df.columns else df.index
166
+
167
+ # Check completeness
168
+ self._check_completeness(df, report)
169
+
170
+ # Check required properties
171
+ self._check_required_properties(df, row_ids, report)
172
+
173
+ # Validate ranges
174
+ self._validate_ranges(df, row_ids, report)
175
+
176
+ # Detect outliers
177
+ if self.config.detect_outliers:
178
+ self._detect_outliers(df, row_ids, report)
179
+
180
+ # Check if validation passed
181
+ violation_rate = len(report.violations) / max(report.total_rows, 1)
182
+ if self.config.fail_on_violations and violation_rate > self.config.max_violation_rate:
183
+ report.passed = False
184
+
185
+ return report
186
+
187
+ def _check_completeness(self, df: 'pd.DataFrame', report: QualityReport):
188
+ """Check completeness of properties"""
189
+ for col in df.columns:
190
+ non_null_count = df[col].notna().sum()
191
+ completeness = non_null_count / len(df) if len(df) > 0 else 0.0
192
+ report.completeness[col] = completeness
193
+
194
+ def _check_required_properties(self, df: 'pd.DataFrame', row_ids: Any, report: QualityReport):
195
+ """Check that required properties are present and non-null"""
196
+ for prop in self.config.required_properties:
197
+ if prop not in df.columns:
198
+ # Property missing entirely
199
+ violation = ValidationViolation(
200
+ violation_type=ViolationType.MISSING_VALUE,
201
+ property_name=prop,
202
+ row_id="ALL",
203
+ value=None,
204
+ expected="required property",
205
+ message=f"Required property '{prop}' is missing from dataset"
206
+ )
207
+ report.add_violation(violation)
208
+ else:
209
+ # Check for null values in required property
210
+ null_mask = df[prop].isna()
211
+ for idx in df[null_mask].index:
212
+ row_id = row_ids.iloc[idx] if hasattr(row_ids, 'iloc') else row_ids[idx]
213
+ violation = ValidationViolation(
214
+ violation_type=ViolationType.MISSING_VALUE,
215
+ property_name=prop,
216
+ row_id=row_id,
217
+ value=None,
218
+ expected="non-null value",
219
+ message=f"Required property '{prop}' is null in row {row_id}"
220
+ )
221
+ report.add_violation(violation)
222
+
223
+ def _validate_ranges(self, df: 'pd.DataFrame', row_ids: Any, report: QualityReport):
224
+ """Validate numeric properties are within specified ranges"""
225
+ for prop, rule in self.config.range_rules.items():
226
+ if prop not in df.columns:
227
+ continue
228
+
229
+ # Only validate numeric columns
230
+ if not pd.api.types.is_numeric_dtype(df[prop]):
231
+ continue
232
+
233
+ # Check min value
234
+ if rule.min_value is not None:
235
+ violations_mask = df[prop] < rule.min_value
236
+ for idx in df[violations_mask].index:
237
+ row_id = row_ids.iloc[idx] if hasattr(row_ids, 'iloc') else row_ids[idx]
238
+ value = df[prop].iloc[idx]
239
+ violation = ValidationViolation(
240
+ violation_type=ViolationType.RANGE_VIOLATION,
241
+ property_name=prop,
242
+ row_id=row_id,
243
+ value=value,
244
+ expected=f">= {rule.min_value}",
245
+ message=f"Value {value} is below minimum {rule.min_value} for property '{prop}' in row {row_id}"
246
+ )
247
+ report.add_violation(violation)
248
+
249
+ # Check max value
250
+ if rule.max_value is not None:
251
+ violations_mask = df[prop] > rule.max_value
252
+ for idx in df[violations_mask].index:
253
+ row_id = row_ids.iloc[idx] if hasattr(row_ids, 'iloc') else row_ids[idx]
254
+ value = df[prop].iloc[idx]
255
+ violation = ValidationViolation(
256
+ violation_type=ViolationType.RANGE_VIOLATION,
257
+ property_name=prop,
258
+ row_id=row_id,
259
+ value=value,
260
+ expected=f"<= {rule.max_value}",
261
+ message=f"Value {value} is above maximum {rule.max_value} for property '{prop}' in row {row_id}"
262
+ )
263
+ report.add_violation(violation)
264
+
265
+ def _detect_outliers(self, df: 'pd.DataFrame', row_ids: Any, report: QualityReport):
266
+ """Detect outliers using 3 standard deviations rule"""
267
+ numeric_cols = df.select_dtypes(include=[np.number]).columns
268
+
269
+ for col in numeric_cols:
270
+ # Skip if all values are null
271
+ if df[col].isna().all():
272
+ continue
273
+
274
+ # Calculate mean and std
275
+ mean = df[col].mean()
276
+ std = df[col].std()
277
+
278
+ # Skip if std is 0 or NaN
279
+ if pd.isna(std) or std == 0:
280
+ continue
281
+
282
+ # Store stats for later use
283
+ self._property_stats[col] = {"mean": mean, "std": std}
284
+
285
+ # Detect outliers (beyond 3 standard deviations)
286
+ lower_bound = mean - 3 * std
287
+ upper_bound = mean + 3 * std
288
+ outliers_mask = (df[col] < lower_bound) | (df[col] > upper_bound)
289
+
290
+ for idx in df[outliers_mask].index:
291
+ row_id = row_ids.iloc[idx] if hasattr(row_ids, 'iloc') else row_ids[idx]
292
+ value = df[col].iloc[idx]
293
+ violation = ValidationViolation(
294
+ violation_type=ViolationType.OUTLIER,
295
+ property_name=col,
296
+ row_id=row_id,
297
+ value=value,
298
+ expected=f"within [{lower_bound:.2f}, {upper_bound:.2f}]",
299
+ message=f"Value {value} is an outlier (>3 std devs) for property '{col}' in row {row_id}"
300
+ )
301
+ report.add_violation(violation)
302
+