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
@@ -6,57 +6,93 @@ This script automatically installs missing dependencies based on the
6
6
  dependency checker results.
7
7
  """
8
8
 
9
- import os
10
9
  import sys
10
+ import os
11
11
  import subprocess
12
12
  import platform
13
13
  import logging
14
- from typing import Dict, List, Tuple, Optional
15
14
  from pathlib import Path
15
+ from typing import Dict, List, Optional
16
16
 
17
17
 
18
18
  class DependencyFixer:
19
19
  """Automatic dependency fixer for AIECS."""
20
-
20
+
21
21
  def __init__(self, interactive: bool = True):
22
22
  self.logger = self._setup_logging()
23
23
  self.system = platform.system().lower()
24
24
  self.interactive = interactive
25
- self.fixes_applied = []
26
- self.fixes_failed = []
27
-
25
+ self.fixes_applied: List[str] = []
26
+ self.fixes_failed: List[str] = []
27
+
28
28
  def _setup_logging(self) -> logging.Logger:
29
29
  """Setup logging configuration."""
30
30
  logging.basicConfig(
31
31
  level=logging.INFO,
32
- format='%(asctime)s - %(levelname)s - %(message)s',
32
+ format="%(asctime)s - %(levelname)s - %(message)s",
33
33
  handlers=[
34
34
  logging.StreamHandler(sys.stdout),
35
- logging.FileHandler('dependency_fix.log')
36
- ]
35
+ logging.FileHandler("dependency_fix.log"),
36
+ ],
37
37
  )
38
38
  return logging.getLogger(__name__)
39
-
39
+
40
+ def _get_environment_path(self) -> Optional[Path]:
41
+ """
42
+ Get the path to the current Python environment (virtual environment or Poetry environment).
43
+
44
+ Returns:
45
+ Path to the environment if found, None otherwise
46
+ """
47
+ # Check VIRTUAL_ENV environment variable first (common for venv/virtualenv)
48
+ venv_path = os.environ.get("VIRTUAL_ENV")
49
+ if venv_path:
50
+ env_path = Path(venv_path)
51
+ if env_path.exists():
52
+ self.logger.info(f"Found virtual environment via VIRTUAL_ENV: {env_path}")
53
+ return env_path
54
+
55
+ # Check sys.prefix - this points to the virtual environment if we're in one
56
+ # In a virtual environment, sys.prefix != sys.base_prefix
57
+ if sys.prefix != sys.base_prefix:
58
+ env_path = Path(sys.prefix)
59
+ if env_path.exists():
60
+ self.logger.info(f"Found virtual environment via sys.prefix: {env_path}")
61
+ return env_path
62
+
63
+ # Check if we're in a Poetry environment by checking sys.executable path
64
+ # Poetry environments are typically in ~/.cache/pypoetry/virtualenvs/ or similar
65
+ exec_path = Path(sys.executable)
66
+ if "pypoetry" in str(exec_path) or exec_path.parts[-3:-1] == ("bin", "python"):
67
+ # Try to find the environment root (go up from bin/python)
68
+ potential_env = exec_path.parent.parent
69
+ if potential_env.exists() and (potential_env / "pyvenv.cfg").exists():
70
+ self.logger.info(f"Found Poetry/virtual environment: {potential_env}")
71
+ return potential_env
72
+
73
+ self.logger.warning("No virtual environment detected. NLTK data will be downloaded to user directory.")
74
+ return None
75
+
40
76
  def _run_command(self, cmd: List[str], description: str) -> bool:
41
77
  """Run a command and return success status."""
42
78
  try:
43
79
  self.logger.info(f"Running: {description}")
44
80
  self.logger.info(f"Command: {' '.join(cmd)}")
45
-
81
+
46
82
  result = subprocess.run(
47
83
  cmd,
48
84
  capture_output=True,
49
85
  text=True,
50
86
  check=True,
51
- timeout=300 # 5 minutes timeout
87
+ timeout=300, # 5 minutes timeout
52
88
  )
53
-
89
+
54
90
  self.logger.info(f"Success: {description}")
55
91
  if result.stdout:
56
92
  self.logger.info(f"Output: {result.stdout}")
57
-
93
+
58
94
  return True
59
-
95
+
60
96
  except subprocess.CalledProcessError as e:
61
97
  self.logger.error(f"Failed: {description}")
62
98
  self.logger.error(f"Error: {e.stderr}")
@@ -67,33 +103,32 @@ class DependencyFixer:
67
103
  except Exception as e:
68
104
  self.logger.error(f"Error: {description} - {e}")
69
105
  return False
70
-
106
+
71
107
  def _ask_confirmation(self, message: str) -> bool:
72
108
  """Ask for user confirmation if in interactive mode."""
73
109
  if not self.interactive:
74
110
  return True
75
-
111
+
76
112
  while True:
77
113
  response = input(f"{message} (y/n): ").lower().strip()
78
- if response in ['y', 'yes']:
114
+ if response in ["y", "yes"]:
79
115
  return True
80
- elif response in ['n', 'no']:
116
+ elif response in ["n", "no"]:
81
117
  return False
82
118
  else:
83
119
  print("Please enter 'y' or 'n'")
84
-
120
+
85
121
  def fix_system_dependencies(self, missing_deps: List[str]) -> bool:
86
122
  """Fix missing system dependencies."""
87
123
  if not missing_deps:
88
124
  return True
89
-
125
+
90
126
  self.logger.info("Fixing system dependencies...")
91
-
127
+
92
128
  # Group dependencies by package manager
93
129
  apt_packages = []
94
130
  brew_packages = []
95
- pip_packages = []
96
-
131
+
97
132
  for dep in missing_deps:
98
133
  if dep == "java":
99
134
  if self.system == "linux":
@@ -107,20 +142,41 @@ class DependencyFixer:
107
142
  brew_packages.append("tesseract")
108
143
  elif dep == "tesseract_lang_packs":
109
144
  if self.system == "linux":
110
- apt_packages.extend([
111
- "tesseract-ocr-chi-sim", "tesseract-ocr-chi-tra",
112
- "tesseract-ocr-fra", "tesseract-ocr-deu",
113
- "tesseract-ocr-jpn", "tesseract-ocr-kor",
114
- "tesseract-ocr-rus", "tesseract-ocr-spa"
115
- ])
145
+ apt_packages.extend(
146
+ [
147
+ "tesseract-ocr-chi-sim",
148
+ "tesseract-ocr-chi-tra",
149
+ "tesseract-ocr-fra",
150
+ "tesseract-ocr-deu",
151
+ "tesseract-ocr-jpn",
152
+ "tesseract-ocr-kor",
153
+ "tesseract-ocr-rus",
154
+ "tesseract-ocr-spa",
155
+ ]
156
+ )
116
157
  elif dep == "pillow_system_deps":
117
158
  if self.system == "linux":
118
- apt_packages.extend([
119
- "libjpeg-dev", "zlib1g-dev", "libpng-dev",
120
- "libtiff-dev", "libwebp-dev", "libopenjp2-7-dev"
121
- ])
159
+ apt_packages.extend(
160
+ [
161
+ "libjpeg-dev",
162
+ "zlib1g-dev",
163
+ "libpng-dev",
164
+ "libtiff-dev",
165
+ "libwebp-dev",
166
+ "libopenjp2-7-dev",
167
+ ]
168
+ )
122
169
  elif self.system == "darwin":
123
- brew_packages.extend(["libjpeg", "zlib", "libpng", "libtiff", "webp", "openjpeg"])
170
+ brew_packages.extend(
171
+ [
172
+ "libjpeg",
173
+ "zlib",
174
+ "libpng",
175
+ "libtiff",
176
+ "webp",
177
+ "openjpeg",
178
+ ]
179
+ )
124
180
  elif dep == "pyreadstat_deps":
125
181
  if self.system == "linux":
126
182
  apt_packages.append("libreadstat-dev")
@@ -128,21 +184,31 @@ class DependencyFixer:
128
184
  brew_packages.append("readstat")
129
185
  elif dep == "weasyprint_deps":
130
186
  if self.system == "linux":
131
- apt_packages.extend([
132
- "libcairo2-dev", "libpango1.0-dev", "libgdk-pixbuf2.0-dev",
133
- "libffi-dev", "shared-mime-info"
134
- ])
187
+ apt_packages.extend(
188
+ [
189
+ "libcairo2-dev",
190
+ "libpango1.0-dev",
191
+ "libgdk-pixbuf2.0-dev",
192
+ "libffi-dev",
193
+ "shared-mime-info",
194
+ ]
195
+ )
135
196
  elif self.system == "darwin":
136
197
  brew_packages.extend(["cairo", "pango", "gdk-pixbuf", "libffi"])
137
198
  elif dep == "matplotlib_deps":
138
199
  if self.system == "linux":
139
- apt_packages.extend([
140
- "libfreetype6-dev", "libpng-dev", "libjpeg-dev",
141
- "libtiff-dev", "libwebp-dev"
142
- ])
200
+ apt_packages.extend(
201
+ [
202
+ "libfreetype6-dev",
203
+ "libpng-dev",
204
+ "libjpeg-dev",
205
+ "libtiff-dev",
206
+ "libwebp-dev",
207
+ ]
208
+ )
143
209
  elif self.system == "darwin":
144
210
  brew_packages.extend(["freetype", "libpng", "libjpeg", "libtiff", "webp"])
145
-
211
+
146
212
  # Install apt packages
147
213
  if apt_packages and self.system == "linux":
148
214
  if self._ask_confirmation(f"Install system packages: {', '.join(apt_packages)}?"):
@@ -154,7 +220,7 @@ class DependencyFixer:
154
220
  else:
155
221
  self.fixes_failed.append(f"System packages: {', '.join(apt_packages)}")
156
222
  return False
157
-
223
+
158
224
  # Install brew packages
159
225
  if brew_packages and self.system == "darwin":
160
226
  if self._ask_confirmation(f"Install Homebrew packages: {', '.join(brew_packages)}?"):
@@ -165,16 +231,16 @@ class DependencyFixer:
165
231
  else:
166
232
  self.fixes_failed.append(f"Homebrew package: {package}")
167
233
  return False
168
-
234
+
169
235
  return True
170
-
236
+
171
237
  def fix_python_dependencies(self, missing_packages: List[str]) -> bool:
172
238
  """Fix missing Python packages."""
173
239
  if not missing_packages:
174
240
  return True
175
-
241
+
176
242
  self.logger.info("Fixing Python dependencies...")
177
-
243
+
178
244
  if self._ask_confirmation(f"Install Python packages: {', '.join(missing_packages)}?"):
179
245
  cmd = [sys.executable, "-m", "pip", "install"] + missing_packages
180
246
  if self._run_command(cmd, f"Install Python packages: {', '.join(missing_packages)}"):
@@ -183,40 +249,73 @@ class DependencyFixer:
183
249
  else:
184
250
  self.fixes_failed.append(f"Python packages: {', '.join(missing_packages)}")
185
251
  return False
186
-
252
+
187
253
  return True
188
-
254
+
189
255
  def fix_model_dependencies(self, missing_models: List[str]) -> bool:
190
256
  """Fix missing model dependencies."""
191
257
  if not missing_models:
192
258
  return True
193
-
259
+
194
260
  self.logger.info("Fixing model dependencies...")
195
-
261
+
196
262
  # spaCy models
197
263
  spacy_models = [m for m in missing_models if m.startswith("spacy_")]
198
264
  if spacy_models:
199
265
  if self._ask_confirmation(f"Download spaCy models: {', '.join(spacy_models)}?"):
200
266
  for model in spacy_models:
201
267
  model_name = model.replace("spacy_", "")
202
- cmd = [sys.executable, "-m", "spacy", "download", model_name]
268
+ cmd = [
269
+ sys.executable,
270
+ "-m",
271
+ "spacy",
272
+ "download",
273
+ model_name,
274
+ ]
203
275
  if self._run_command(cmd, f"Download spaCy model: {model_name}"):
204
276
  self.fixes_applied.append(f"spaCy model: {model_name}")
205
277
  else:
206
278
  self.fixes_failed.append(f"spaCy model: {model_name}")
207
-
279
+
208
280
  # NLTK data
209
281
  nltk_data = [m for m in missing_models if m.startswith("nltk_")]
210
282
  if nltk_data:
211
283
  if self._ask_confirmation(f"Download NLTK data: {', '.join(nltk_data)}?"):
284
+ # Get environment path for environment-specific NLTK data storage
285
+ env_path = self._get_environment_path()
286
+ nltk_data_path: Optional[Path] = None
287
+ original_nltk_data = os.environ.get("NLTK_DATA")
288
+
289
+ if env_path:
290
+ # Create nltk_data directory in the environment
291
+ nltk_data_path = env_path / "nltk_data"
292
+ nltk_data_path.mkdir(parents=True, exist_ok=True)
293
+ self.logger.info(f"Using environment-specific NLTK data directory: {nltk_data_path}")
294
+ else:
295
+ self.logger.info("No virtual environment detected. Using default NLTK data location (~/nltk_data)")
296
+
212
297
  for data in nltk_data:
213
298
  data_name = data.replace("nltk_", "")
214
- cmd = [sys.executable, "-c", f"import nltk; nltk.download('{data_name}')"]
299
+ # Build Python command that sets NLTK_DATA if environment path is available
300
+ if nltk_data_path:
301
+ # Set NLTK_DATA environment variable in the subprocess
302
+ python_code = (
303
+ f"import os; "
304
+ f"os.environ['NLTK_DATA'] = '{nltk_data_path}'; "
305
+ f"import nltk; "
306
+ f"nltk.download('{data_name}', quiet=True)"
307
+ )
308
+ else:
309
+ python_code = f"import nltk; nltk.download('{data_name}', quiet=True)"
310
+
311
+ cmd = [sys.executable, "-c", python_code]
215
312
  if self._run_command(cmd, f"Download NLTK data: {data_name}"):
216
313
  self.fixes_applied.append(f"NLTK data: {data_name}")
314
+ if nltk_data_path:
315
+ self.logger.info(f"NLTK data '{data_name}' stored in environment: {nltk_data_path}")
217
316
  else:
218
317
  self.fixes_failed.append(f"NLTK data: {data_name}")
219
-
318
+
220
319
  # Playwright browsers
221
320
  if "playwright_browsers" in missing_models:
222
321
  if self._ask_confirmation("Install Playwright browsers?"):
@@ -225,18 +324,18 @@ class DependencyFixer:
225
324
  self.fixes_applied.append("Playwright browsers")
226
325
  else:
227
326
  self.fixes_failed.append("Playwright browsers")
228
-
327
+
229
328
  return True
230
-
329
+
231
330
  def fix_dependencies_from_checker(self, checker_results: Dict) -> bool:
232
331
  """Fix dependencies based on checker results."""
233
332
  self.logger.info("Starting dependency fixing process...")
234
-
333
+
235
334
  # Extract missing dependencies
236
335
  missing_system = []
237
336
  missing_python = []
238
337
  missing_models = []
239
-
338
+
240
339
  for tool_name, tool_deps in checker_results.items():
241
340
  if isinstance(tool_deps, dict):
242
341
  # Handle tool-specific dependencies
@@ -253,88 +352,95 @@ class DependencyFixer:
253
352
  for dep in deps:
254
353
  if dep.status.value == "missing":
255
354
  missing_models.append(f"{dep.name.lower().replace(' ', '_')}")
256
-
355
+
257
356
  # Apply fixes
258
357
  success = True
259
-
358
+
260
359
  if missing_system:
261
360
  if not self.fix_system_dependencies(missing_system):
262
361
  success = False
263
-
362
+
264
363
  if missing_python:
265
364
  if not self.fix_python_dependencies(missing_python):
266
365
  success = False
267
-
366
+
268
367
  if missing_models:
269
368
  if not self.fix_model_dependencies(missing_models):
270
369
  success = False
271
-
370
+
272
371
  return success
273
-
372
+
274
373
  def generate_fix_report(self) -> str:
275
374
  """Generate a report of fixes applied."""
276
375
  report = []
277
376
  report.append("=" * 60)
278
377
  report.append("AIECS DEPENDENCY FIX REPORT")
279
378
  report.append("=" * 60)
280
-
379
+
281
380
  if self.fixes_applied:
282
381
  report.append("\n✅ Successfully Applied Fixes:")
283
382
  for fix in self.fixes_applied:
284
383
  report.append(f" • {fix}")
285
-
384
+
286
385
  if self.fixes_failed:
287
386
  report.append("\n❌ Failed Fixes:")
288
387
  for fix in self.fixes_failed:
289
388
  report.append(f" • {fix}")
290
-
389
+
291
390
  if not self.fixes_applied and not self.fixes_failed:
292
391
  report.append("\nℹ️ No fixes were applied.")
293
-
392
+
294
393
  report.append(f"\nTotal fixes applied: {len(self.fixes_applied)}")
295
394
  report.append(f"Total fixes failed: {len(self.fixes_failed)}")
296
-
395
+
297
396
  if self.fixes_failed:
298
397
  report.append("\n⚠️ Some fixes failed. Please check the logs and try manual installation.")
299
398
  else:
300
399
  report.append("\n🎉 All fixes applied successfully!")
301
-
400
+
302
401
  return "\n".join(report)
303
402
 
304
403
 
305
404
  def main():
306
405
  """Main function."""
307
406
  import argparse
308
-
407
+
309
408
  parser = argparse.ArgumentParser(description="Fix AIECS dependencies")
310
- parser.add_argument("--non-interactive", action="store_true",
311
- help="Run in non-interactive mode (auto-approve all fixes)")
312
- parser.add_argument("--check-only", action="store_true",
313
- help="Only check dependencies, don't fix them")
314
-
409
+ parser.add_argument(
410
+ "--non-interactive",
411
+ action="store_true",
412
+ help="Run in non-interactive mode (auto-approve all fixes)",
413
+ )
414
+ parser.add_argument(
415
+ "--check-only",
416
+ action="store_true",
417
+ help="Only check dependencies, don't fix them",
418
+ )
419
+
315
420
  args = parser.parse_args()
316
-
421
+
317
422
  # Import and run dependency checker first
318
423
  try:
319
- from aiecs.scripts.dependency_checker import DependencyChecker
424
+ from aiecs.scripts.dependance_check.dependency_checker import DependencyChecker # type: ignore[import-untyped]
425
+
320
426
  checker = DependencyChecker()
321
427
  tools = checker.check_all_dependencies()
322
-
428
+
323
429
  if args.check_only:
324
430
  report = checker.generate_report(tools)
325
431
  print(report)
326
432
  return 0
327
-
433
+
328
434
  # Run fixer
329
435
  fixer = DependencyFixer(interactive=not args.non_interactive)
330
436
  success = fixer.fix_dependencies_from_checker(tools)
331
-
437
+
332
438
  # Generate and display report
333
439
  report = fixer.generate_fix_report()
334
440
  print(report)
335
-
441
+
336
442
  return 0 if success else 1
337
-
443
+
338
444
  except Exception as e:
339
445
  print(f"Error: {e}")
340
446
  return 1
@@ -342,7 +448,3 @@ def main():
342
448
 
343
449
  if __name__ == "__main__":
344
450
  sys.exit(main())
345
-
346
-
347
-
348
-