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,171 @@
1
+ """
2
+ PathPattern Domain Model
3
+
4
+ Represents a pattern for graph traversal specifications.
5
+ """
6
+
7
+ from typing import List, Optional, Set
8
+ from pydantic import BaseModel, Field
9
+ from enum import Enum
10
+
11
+
12
+ class TraversalDirection(str, Enum):
13
+ """Direction for graph traversal"""
14
+
15
+ OUTGOING = "outgoing"
16
+ INCOMING = "incoming"
17
+ BOTH = "both"
18
+
19
+
20
+ class PathPattern(BaseModel):
21
+ """
22
+ Path Pattern for Graph Traversal
23
+
24
+ Specifies constraints and preferences for graph traversal operations.
25
+ Used to control how the graph is explored and which paths are valid.
26
+
27
+ Attributes:
28
+ relation_types: Optional list of allowed relation types
29
+ entity_types: Optional list of allowed entity types
30
+ direction: Traversal direction (outgoing, incoming, both)
31
+ max_depth: Maximum path length
32
+ allow_cycles: Whether to allow revisiting nodes
33
+ required_relation_sequence: Optional sequence of relation types that must be followed
34
+
35
+ Example:
36
+ ```python
37
+ # Find paths following WORKS_FOR -> LOCATED_IN pattern
38
+ pattern = PathPattern(
39
+ relation_types=["WORKS_FOR", "LOCATED_IN"],
40
+ required_relation_sequence=["WORKS_FOR", "LOCATED_IN"],
41
+ max_depth=2,
42
+ allow_cycles=False
43
+ )
44
+ ```
45
+ """
46
+
47
+ relation_types: Optional[List[str]] = Field(
48
+ default=None,
49
+ description="Optional list of allowed relation types (None = all types allowed)",
50
+ )
51
+
52
+ entity_types: Optional[List[str]] = Field(
53
+ default=None,
54
+ description="Optional list of allowed entity types (None = all types allowed)",
55
+ )
56
+
57
+ direction: TraversalDirection = Field(
58
+ default=TraversalDirection.OUTGOING,
59
+ description="Direction for traversal",
60
+ )
61
+
62
+ max_depth: int = Field(
63
+ default=3,
64
+ ge=1,
65
+ le=10,
66
+ description="Maximum path length (number of hops)",
67
+ )
68
+
69
+ allow_cycles: bool = Field(default=False, description="Whether to allow revisiting nodes (cycles)")
70
+
71
+ required_relation_sequence: Optional[List[str]] = Field(
72
+ default=None,
73
+ description="Optional sequence of relation types that must be followed in order",
74
+ )
75
+
76
+ min_path_length: int = Field(default=1, ge=1, description="Minimum path length to return")
77
+
78
+ excluded_entity_ids: Set[str] = Field(
79
+ default_factory=set,
80
+ description="Set of entity IDs to exclude from traversal",
81
+ )
82
+
83
+ def is_relation_allowed(self, relation_type: str, depth: int = 0) -> bool:
84
+ """
85
+ Check if a relation type is allowed at the current depth
86
+
87
+ Args:
88
+ relation_type: Relation type to check
89
+ depth: Current depth in the traversal (0-indexed)
90
+
91
+ Returns:
92
+ True if the relation is allowed
93
+ """
94
+ # Check required sequence if specified
95
+ if self.required_relation_sequence:
96
+ if depth >= len(self.required_relation_sequence):
97
+ return False
98
+ return relation_type == self.required_relation_sequence[depth]
99
+
100
+ # Check allowed types if specified
101
+ if self.relation_types:
102
+ return relation_type in self.relation_types
103
+
104
+ # All types allowed if no constraints
105
+ return True
106
+
107
+ def is_entity_allowed(self, entity_id: str, entity_type: str) -> bool:
108
+ """
109
+ Check if an entity is allowed in the path
110
+
111
+ Args:
112
+ entity_id: Entity ID to check
113
+ entity_type: Entity type to check
114
+
115
+ Returns:
116
+ True if the entity is allowed
117
+ """
118
+ # Check excluded entities
119
+ if entity_id in self.excluded_entity_ids:
120
+ return False
121
+
122
+ # Check allowed types if specified
123
+ if self.entity_types:
124
+ return entity_type in self.entity_types
125
+
126
+ # All entities allowed if no constraints
127
+ return True
128
+
129
+ def is_valid_path_length(self, length: int) -> bool:
130
+ """
131
+ Check if a path length is valid according to the pattern
132
+
133
+ Args:
134
+ length: Path length to check
135
+
136
+ Returns:
137
+ True if the length is valid
138
+ """
139
+ return self.min_path_length <= length <= self.max_depth
140
+
141
+ def should_continue_traversal(self, depth: int) -> bool:
142
+ """
143
+ Check if traversal should continue at the current depth
144
+
145
+ Args:
146
+ depth: Current depth in the traversal
147
+
148
+ Returns:
149
+ True if traversal should continue
150
+ """
151
+ return depth < self.max_depth
152
+
153
+ class Config:
154
+ use_enum_values = True
155
+
156
+ def __str__(self) -> str:
157
+ parts = [f"depth={self.max_depth}"]
158
+
159
+ if self.relation_types:
160
+ parts.append(f"relations={','.join(self.relation_types)}")
161
+
162
+ if self.entity_types:
163
+ parts.append(f"entities={','.join(self.entity_types)}")
164
+
165
+ if self.required_relation_sequence:
166
+ parts.append(f"sequence={' -> '.join(self.required_relation_sequence)}")
167
+
168
+ if self.allow_cycles:
169
+ parts.append("allow_cycles")
170
+
171
+ return f"PathPattern({', '.join(parts)})"
@@ -0,0 +1,261 @@
1
+ """
2
+ Query Domain Models
3
+
4
+ Models for specifying graph queries and their results.
5
+
6
+ Multi-Tenancy Support:
7
+ GraphQuery now supports tenant_id field for filtering queries to a specific tenant.
8
+ When tenant_id is provided, queries will only return entities and relations
9
+ belonging to that tenant.
10
+ """
11
+
12
+ from typing import Any, List, Optional, Dict
13
+ from enum import Enum
14
+ from pydantic import BaseModel, Field
15
+ from aiecs.domain.knowledge_graph.models.entity import Entity
16
+ from aiecs.domain.knowledge_graph.models.relation import Relation
17
+ from aiecs.domain.knowledge_graph.models.path import Path
18
+ from aiecs.domain.knowledge_graph.models.path_pattern import PathPattern
19
+
20
+
21
+ class QueryType(str, Enum):
22
+ """Types of graph queries"""
23
+
24
+ ENTITY_LOOKUP = "entity_lookup"
25
+ VECTOR_SEARCH = "vector_search"
26
+ TRAVERSAL = "traversal"
27
+ PATH_FINDING = "path_finding"
28
+ SUBGRAPH = "subgraph"
29
+ CUSTOM = "custom"
30
+
31
+
32
+ class GraphQuery(BaseModel):
33
+ """
34
+ Graph Query Specification
35
+
36
+ Specifies a query to execute against the knowledge graph.
37
+
38
+ Attributes:
39
+ query_type: Type of query to execute
40
+ entity_id: Entity ID for entity lookup queries
41
+ entity_type: Filter by entity type
42
+ relation_type: Filter by relation type
43
+ embedding: Query embedding for vector search
44
+ properties: Property constraints for filtering
45
+ max_results: Maximum number of results to return
46
+ max_depth: Maximum traversal depth for path queries
47
+ score_threshold: Minimum score threshold for results
48
+ tenant_id: Tenant ID for multi-tenant filtering (None for global/single-tenant)
49
+
50
+ Example:
51
+ ```python
52
+ # Vector search query
53
+ query = GraphQuery(
54
+ query_type=QueryType.VECTOR_SEARCH,
55
+ embedding=[0.1, 0.2, ...],
56
+ entity_type="Document",
57
+ max_results=10,
58
+ score_threshold=0.7
59
+ )
60
+
61
+ # Multi-tenant traversal query
62
+ query = GraphQuery(
63
+ query_type=QueryType.TRAVERSAL,
64
+ entity_id="person_001",
65
+ relation_type="KNOWS",
66
+ max_depth=3,
67
+ tenant_id="acme-corp"
68
+ )
69
+ ```
70
+ """
71
+
72
+ query_type: QueryType = Field(..., description="Type of query to execute")
73
+
74
+ # Multi-tenancy support
75
+ tenant_id: Optional[str] = Field(
76
+ default=None,
77
+ description="Tenant ID for multi-tenant filtering (None for global/single-tenant mode)",
78
+ )
79
+
80
+ # Entity lookup
81
+ entity_id: Optional[str] = Field(default=None, description="Entity ID for entity lookup queries")
82
+
83
+ # Filtering
84
+ entity_type: Optional[str] = Field(default=None, description="Filter results by entity type")
85
+
86
+ relation_type: Optional[str] = Field(default=None, description="Filter by relation type (for traversal)")
87
+
88
+ # Vector search
89
+ embedding: Optional[List[float]] = Field(default=None, description="Query embedding for vector search")
90
+
91
+ # Property constraints
92
+ properties: Dict[str, Any] = Field(default_factory=dict, description="Property constraints for filtering")
93
+
94
+ # Result constraints
95
+ max_results: int = Field(default=10, ge=1, description="Maximum number of results to return")
96
+
97
+ max_depth: int = Field(
98
+ default=3,
99
+ ge=1,
100
+ le=10,
101
+ description="Maximum traversal depth for path queries",
102
+ )
103
+
104
+ score_threshold: float = Field(
105
+ default=0.0,
106
+ ge=0.0,
107
+ le=1.0,
108
+ description="Minimum score threshold for results",
109
+ )
110
+
111
+ # Source/target constraints for path finding
112
+ source_entity_id: Optional[str] = Field(default=None, description="Source entity ID for path finding")
113
+
114
+ target_entity_id: Optional[str] = Field(default=None, description="Target entity ID for path finding")
115
+
116
+ # Custom query parameters
117
+ custom_params: Dict[str, Any] = Field(default_factory=dict, description="Additional custom query parameters")
118
+
119
+ # Custom pattern matching (Task 3.3)
120
+ pattern: Optional[PathPattern] = Field(
121
+ default=None,
122
+ description="Graph pattern for custom pattern matching queries",
123
+ )
124
+
125
+ patterns: Optional[List[PathPattern]] = Field(
126
+ default=None,
127
+ description="Multiple graph patterns for complex pattern matching",
128
+ )
129
+
130
+ optional_patterns: Optional[List[PathPattern]] = Field(default=None, description="Optional patterns that may or may not match")
131
+
132
+ projection: Optional[List[str]] = Field(
133
+ default=None,
134
+ description="Fields to project in results (e.g., ['id', 'name', 'properties.age'])",
135
+ )
136
+
137
+ aggregations: Optional[Dict[str, str]] = Field(
138
+ default=None,
139
+ description="Aggregations to apply (e.g., {'count': 'COUNT', 'avg_age': 'AVG(properties.age)'})",
140
+ )
141
+
142
+ group_by: Optional[List[str]] = Field(default=None, description="Fields to group by for aggregations")
143
+
144
+ class Config:
145
+ use_enum_values = True
146
+
147
+ def __str__(self) -> str:
148
+ parts = [f"GraphQuery(type={self.query_type})"]
149
+ if self.entity_id:
150
+ parts.append(f"entity_id={self.entity_id}")
151
+ if self.entity_type:
152
+ parts.append(f"entity_type={self.entity_type}")
153
+ if self.relation_type:
154
+ parts.append(f"relation_type={self.relation_type}")
155
+ return " ".join(parts)
156
+
157
+
158
+ class GraphResult(BaseModel):
159
+ """
160
+ Graph Query Result
161
+
162
+ Contains the results of a graph query execution.
163
+
164
+ Attributes:
165
+ query: The original query that was executed
166
+ entities: List of entity results
167
+ relations: List of relation results (for traversal/subgraph queries)
168
+ paths: List of path results (for path-finding queries)
169
+ scores: Scores for each result (parallel to entities)
170
+ total_count: Total number of matching results (before max_results limit)
171
+ execution_time_ms: Query execution time in milliseconds
172
+
173
+ Example:
174
+ ```python
175
+ result = GraphResult(
176
+ query=query,
177
+ entities=[entity1, entity2],
178
+ scores=[0.95, 0.87],
179
+ total_count=2,
180
+ execution_time_ms=15.3
181
+ )
182
+ ```
183
+ """
184
+
185
+ query: GraphQuery = Field(..., description="The original query that was executed")
186
+
187
+ entities: List[Entity] = Field(default_factory=list, description="List of entity results")
188
+
189
+ relations: List[Relation] = Field(
190
+ default_factory=list,
191
+ description="List of relation results (for graph queries)",
192
+ )
193
+
194
+ paths: List[Path] = Field(
195
+ default_factory=list,
196
+ description="List of path results (for path-finding)",
197
+ )
198
+
199
+ scores: List[float] = Field(default_factory=list, description="Scores for each entity result")
200
+
201
+ total_count: int = Field(default=0, ge=0, description="Total matching results (before limit)")
202
+
203
+ execution_time_ms: Optional[float] = Field(
204
+ default=None,
205
+ ge=0.0,
206
+ description="Query execution time in milliseconds",
207
+ )
208
+
209
+ class Config:
210
+ arbitrary_types_allowed = True
211
+
212
+ @property
213
+ def has_results(self) -> bool:
214
+ """Check if result contains any data"""
215
+ return len(self.entities) > 0 or len(self.paths) > 0
216
+
217
+ @property
218
+ def entity_count(self) -> int:
219
+ """Get number of entities in result"""
220
+ return len(self.entities)
221
+
222
+ @property
223
+ def path_count(self) -> int:
224
+ """Get number of paths in result"""
225
+ return len(self.paths)
226
+
227
+ def get_top_entities(self, n: int = 5) -> List[Entity]:
228
+ """
229
+ Get top N entities by score
230
+
231
+ Args:
232
+ n: Number of entities to return
233
+
234
+ Returns:
235
+ Top N entities
236
+ """
237
+ if not self.scores:
238
+ return self.entities[:n]
239
+
240
+ # Sort by score (descending)
241
+ scored_entities = list(zip(self.entities, self.scores))
242
+ scored_entities.sort(key=lambda x: x[1], reverse=True)
243
+ return [entity for entity, _ in scored_entities[:n]]
244
+
245
+ def get_entity_ids(self) -> List[str]:
246
+ """
247
+ Get list of all entity IDs in result
248
+
249
+ Returns:
250
+ List of entity IDs
251
+ """
252
+ return [entity.id for entity in self.entities]
253
+
254
+ def __str__(self) -> str:
255
+ parts = [f"GraphResult(entities={self.entity_count}, paths={self.path_count})"]
256
+ if self.execution_time_ms:
257
+ parts.append(f"time={self.execution_time_ms:.2f}ms")
258
+ return " ".join(parts)
259
+
260
+ def __repr__(self) -> str:
261
+ return f"GraphResult(" f"entities={self.entity_count}, " f"relations={len(self.relations)}, " f"paths={self.path_count}, " f"total_count={self.total_count})"
@@ -0,0 +1,181 @@
1
+ """
2
+ Query Plan Domain Models
3
+
4
+ Models for query planning, decomposition, and optimization.
5
+ """
6
+
7
+ from typing import Any, List, Dict, Set
8
+ from enum import Enum
9
+ from pydantic import BaseModel, Field
10
+ from aiecs.domain.knowledge_graph.models.query import GraphQuery
11
+
12
+
13
+ class QueryOperation(str, Enum):
14
+ """Types of query operations"""
15
+
16
+ ENTITY_LOOKUP = "entity_lookup"
17
+ VECTOR_SEARCH = "vector_search"
18
+ TRAVERSAL = "traversal"
19
+ FILTER = "filter"
20
+ JOIN = "join"
21
+ AGGREGATE = "aggregate"
22
+ RANK = "rank"
23
+
24
+
25
+ class QueryStep(BaseModel):
26
+ """
27
+ A single step in a query execution plan
28
+
29
+ Represents one operation in a multi-step query plan.
30
+
31
+ Attributes:
32
+ step_id: Unique identifier for this step
33
+ operation: Type of operation to perform
34
+ query: Graph query specification for this step
35
+ depends_on: List of step IDs that must complete before this step
36
+ description: Human-readable description of what this step does
37
+ estimated_cost: Estimated computational cost (0-1, higher = more expensive)
38
+
39
+ Example:
40
+ ```python
41
+ step = QueryStep(
42
+ step_id="step_1",
43
+ operation=QueryOperation.VECTOR_SEARCH,
44
+ query=GraphQuery(
45
+ query_type=QueryType.VECTOR_SEARCH,
46
+ embedding=[0.1, 0.2, ...],
47
+ max_results=10
48
+ ),
49
+ description="Find semantically similar entities"
50
+ )
51
+ ```
52
+ """
53
+
54
+ step_id: str = Field(..., description="Unique identifier for this step")
55
+
56
+ operation: QueryOperation = Field(..., description="Type of operation to perform")
57
+
58
+ query: GraphQuery = Field(..., description="Graph query specification for this step")
59
+
60
+ depends_on: List[str] = Field(
61
+ default_factory=list,
62
+ description="List of step IDs that must complete before this step",
63
+ )
64
+
65
+ description: str = Field(..., description="Human-readable description of what this step does")
66
+
67
+ estimated_cost: float = Field(
68
+ default=0.5,
69
+ ge=0.0,
70
+ le=1.0,
71
+ description="Estimated computational cost (0-1, higher = more expensive)",
72
+ )
73
+
74
+ metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata for this step")
75
+
76
+
77
+ class QueryPlan(BaseModel):
78
+ """
79
+ Query Execution Plan
80
+
81
+ Represents a structured plan for executing a complex query as a series of steps.
82
+
83
+ Attributes:
84
+ plan_id: Unique identifier for this plan
85
+ original_query: The original natural language or complex query
86
+ steps: List of query steps to execute in order
87
+ total_estimated_cost: Total estimated cost of executing this plan
88
+ optimized: Whether this plan has been optimized
89
+ explanation: Human-readable explanation of the plan
90
+
91
+ Example:
92
+ ```python
93
+ plan = QueryPlan(
94
+ plan_id="plan_001",
95
+ original_query="Who works at companies that Alice knows people at?",
96
+ steps=[
97
+ QueryStep(step_id="step_1", ...), # Find Alice
98
+ QueryStep(step_id="step_2", ...), # Find people Alice knows
99
+ QueryStep(step_id="step_3", ...) # Find their companies
100
+ ],
101
+ explanation="Multi-hop query to find companies through social connections"
102
+ )
103
+ ```
104
+ """
105
+
106
+ plan_id: str = Field(..., description="Unique identifier for this plan")
107
+
108
+ original_query: str = Field(..., description="The original natural language or complex query")
109
+
110
+ steps: List[QueryStep] = Field(..., description="List of query steps to execute in order")
111
+
112
+ total_estimated_cost: float = Field(default=0.0, description="Total estimated cost of executing this plan")
113
+
114
+ optimized: bool = Field(default=False, description="Whether this plan has been optimized")
115
+
116
+ explanation: str = Field(default="", description="Human-readable explanation of the plan")
117
+
118
+ metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata for this plan")
119
+
120
+ def calculate_total_cost(self) -> float:
121
+ """Calculate total estimated cost from all steps"""
122
+ return sum(step.estimated_cost for step in self.steps)
123
+
124
+ def get_executable_steps(self, completed_step_ids: set[str]) -> List[QueryStep]:
125
+ """
126
+ Get steps that can be executed given completed steps
127
+
128
+ Args:
129
+ completed_step_ids: Set of step IDs that have been completed
130
+
131
+ Returns:
132
+ List of steps whose dependencies are all satisfied
133
+ """
134
+ executable = []
135
+ for step in self.steps:
136
+ if step.step_id in completed_step_ids:
137
+ continue
138
+ if all(dep in completed_step_ids for dep in step.depends_on):
139
+ executable.append(step)
140
+ return executable
141
+
142
+ def get_execution_order(self) -> List[List[str]]:
143
+ """
144
+ Get optimal execution order for steps
145
+
146
+ Returns:
147
+ List of lists, where each inner list contains step IDs that can run in parallel
148
+
149
+ Example:
150
+ [[step_1], [step_2, step_3], [step_4]]
151
+ - step_1 runs first
152
+ - step_2 and step_3 can run in parallel after step_1
153
+ - step_4 runs after both step_2 and step_3 complete
154
+ """
155
+ completed: Set[str] = set()
156
+ execution_order: List[List[str]] = []
157
+
158
+ while len(completed) < len(self.steps):
159
+ # Get all steps that can run now
160
+ current_batch = []
161
+ for step in self.steps:
162
+ if step.step_id not in completed:
163
+ if all(dep in completed for dep in step.depends_on):
164
+ current_batch.append(step.step_id)
165
+
166
+ if not current_batch:
167
+ # Should not happen if dependencies are valid
168
+ break
169
+
170
+ execution_order.append(current_batch)
171
+ completed.update(current_batch)
172
+
173
+ return execution_order
174
+
175
+
176
+ class OptimizationStrategy(str, Enum):
177
+ """Query optimization strategies"""
178
+
179
+ MINIMIZE_COST = "minimize_cost" # Reorder to minimize total cost
180
+ MINIMIZE_LATENCY = "minimize_latency" # Maximize parallelization
181
+ BALANCED = "balanced" # Balance cost and latency