aiecs 1.0.1__py3-none-any.whl → 1.7.17__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aiecs might be problematic. Click here for more details.

Files changed (340) hide show
  1. aiecs/__init__.py +13 -16
  2. aiecs/__main__.py +7 -7
  3. aiecs/aiecs_client.py +269 -75
  4. aiecs/application/executors/operation_executor.py +79 -54
  5. aiecs/application/knowledge_graph/__init__.py +7 -0
  6. aiecs/application/knowledge_graph/builder/__init__.py +37 -0
  7. aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  8. aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  9. aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
  10. aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
  11. aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  12. aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  13. aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
  14. aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  15. aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
  16. aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
  17. aiecs/application/knowledge_graph/extractors/base.py +98 -0
  18. aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
  19. aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
  20. aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
  21. aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  22. aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  23. aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  24. aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  25. aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  26. aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  27. aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
  28. aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  29. aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  30. aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
  31. aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  32. aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  33. aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
  34. aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  35. aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  36. aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
  37. aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
  38. aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
  39. aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
  40. aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
  41. aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
  42. aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
  43. aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
  44. aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
  45. aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
  46. aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
  47. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
  48. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
  49. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
  50. aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
  51. aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
  52. aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
  53. aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
  54. aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
  55. aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
  56. aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
  57. aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
  58. aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
  59. aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
  60. aiecs/application/knowledge_graph/search/__init__.py +59 -0
  61. aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
  62. aiecs/application/knowledge_graph/search/reranker.py +293 -0
  63. aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
  64. aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
  65. aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
  66. aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
  67. aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
  68. aiecs/application/knowledge_graph/validators/__init__.py +13 -0
  69. aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
  70. aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
  71. aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
  72. aiecs/common/__init__.py +9 -0
  73. aiecs/common/knowledge_graph/__init__.py +17 -0
  74. aiecs/common/knowledge_graph/runnable.py +471 -0
  75. aiecs/config/__init__.py +20 -5
  76. aiecs/config/config.py +762 -31
  77. aiecs/config/graph_config.py +131 -0
  78. aiecs/config/tool_config.py +435 -0
  79. aiecs/core/__init__.py +29 -13
  80. aiecs/core/interface/__init__.py +2 -2
  81. aiecs/core/interface/execution_interface.py +22 -22
  82. aiecs/core/interface/storage_interface.py +37 -88
  83. aiecs/core/registry/__init__.py +31 -0
  84. aiecs/core/registry/service_registry.py +92 -0
  85. aiecs/domain/__init__.py +270 -1
  86. aiecs/domain/agent/__init__.py +191 -0
  87. aiecs/domain/agent/base_agent.py +3949 -0
  88. aiecs/domain/agent/exceptions.py +99 -0
  89. aiecs/domain/agent/graph_aware_mixin.py +569 -0
  90. aiecs/domain/agent/hybrid_agent.py +1731 -0
  91. aiecs/domain/agent/integration/__init__.py +29 -0
  92. aiecs/domain/agent/integration/context_compressor.py +216 -0
  93. aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
  94. aiecs/domain/agent/integration/protocols.py +281 -0
  95. aiecs/domain/agent/integration/retry_policy.py +218 -0
  96. aiecs/domain/agent/integration/role_config.py +213 -0
  97. aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
  98. aiecs/domain/agent/lifecycle.py +291 -0
  99. aiecs/domain/agent/llm_agent.py +692 -0
  100. aiecs/domain/agent/memory/__init__.py +12 -0
  101. aiecs/domain/agent/memory/conversation.py +1124 -0
  102. aiecs/domain/agent/migration/__init__.py +14 -0
  103. aiecs/domain/agent/migration/conversion.py +163 -0
  104. aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
  105. aiecs/domain/agent/models.py +894 -0
  106. aiecs/domain/agent/observability.py +479 -0
  107. aiecs/domain/agent/persistence.py +449 -0
  108. aiecs/domain/agent/prompts/__init__.py +29 -0
  109. aiecs/domain/agent/prompts/builder.py +159 -0
  110. aiecs/domain/agent/prompts/formatters.py +187 -0
  111. aiecs/domain/agent/prompts/template.py +255 -0
  112. aiecs/domain/agent/registry.py +253 -0
  113. aiecs/domain/agent/tool_agent.py +444 -0
  114. aiecs/domain/agent/tools/__init__.py +15 -0
  115. aiecs/domain/agent/tools/schema_generator.py +377 -0
  116. aiecs/domain/community/__init__.py +155 -0
  117. aiecs/domain/community/agent_adapter.py +469 -0
  118. aiecs/domain/community/analytics.py +432 -0
  119. aiecs/domain/community/collaborative_workflow.py +648 -0
  120. aiecs/domain/community/communication_hub.py +634 -0
  121. aiecs/domain/community/community_builder.py +320 -0
  122. aiecs/domain/community/community_integration.py +796 -0
  123. aiecs/domain/community/community_manager.py +803 -0
  124. aiecs/domain/community/decision_engine.py +849 -0
  125. aiecs/domain/community/exceptions.py +231 -0
  126. aiecs/domain/community/models/__init__.py +33 -0
  127. aiecs/domain/community/models/community_models.py +234 -0
  128. aiecs/domain/community/resource_manager.py +461 -0
  129. aiecs/domain/community/shared_context_manager.py +589 -0
  130. aiecs/domain/context/__init__.py +40 -10
  131. aiecs/domain/context/context_engine.py +1910 -0
  132. aiecs/domain/context/conversation_models.py +87 -53
  133. aiecs/domain/context/graph_memory.py +582 -0
  134. aiecs/domain/execution/model.py +12 -4
  135. aiecs/domain/knowledge_graph/__init__.py +19 -0
  136. aiecs/domain/knowledge_graph/models/__init__.py +52 -0
  137. aiecs/domain/knowledge_graph/models/entity.py +148 -0
  138. aiecs/domain/knowledge_graph/models/evidence.py +178 -0
  139. aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
  140. aiecs/domain/knowledge_graph/models/path.py +171 -0
  141. aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
  142. aiecs/domain/knowledge_graph/models/query.py +261 -0
  143. aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
  144. aiecs/domain/knowledge_graph/models/relation.py +202 -0
  145. aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
  146. aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
  147. aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
  148. aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
  149. aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
  150. aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
  151. aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
  152. aiecs/domain/task/dsl_processor.py +172 -56
  153. aiecs/domain/task/model.py +20 -8
  154. aiecs/domain/task/task_context.py +27 -24
  155. aiecs/infrastructure/__init__.py +0 -2
  156. aiecs/infrastructure/graph_storage/__init__.py +11 -0
  157. aiecs/infrastructure/graph_storage/base.py +837 -0
  158. aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
  159. aiecs/infrastructure/graph_storage/cache.py +424 -0
  160. aiecs/infrastructure/graph_storage/distributed.py +223 -0
  161. aiecs/infrastructure/graph_storage/error_handling.py +380 -0
  162. aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
  163. aiecs/infrastructure/graph_storage/health_checks.py +378 -0
  164. aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  165. aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
  166. aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
  167. aiecs/infrastructure/graph_storage/metrics.py +344 -0
  168. aiecs/infrastructure/graph_storage/migration.py +400 -0
  169. aiecs/infrastructure/graph_storage/pagination.py +483 -0
  170. aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
  171. aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  172. aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  173. aiecs/infrastructure/graph_storage/protocols.py +76 -0
  174. aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
  175. aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
  176. aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  177. aiecs/infrastructure/graph_storage/streaming.py +487 -0
  178. aiecs/infrastructure/graph_storage/tenant.py +412 -0
  179. aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
  180. aiecs/infrastructure/messaging/websocket_manager.py +51 -35
  181. aiecs/infrastructure/monitoring/__init__.py +22 -0
  182. aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
  183. aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
  184. aiecs/infrastructure/monitoring/structured_logger.py +3 -7
  185. aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
  186. aiecs/infrastructure/persistence/__init__.py +14 -1
  187. aiecs/infrastructure/persistence/context_engine_client.py +184 -0
  188. aiecs/infrastructure/persistence/database_manager.py +67 -43
  189. aiecs/infrastructure/persistence/file_storage.py +180 -103
  190. aiecs/infrastructure/persistence/redis_client.py +74 -21
  191. aiecs/llm/__init__.py +73 -25
  192. aiecs/llm/callbacks/__init__.py +11 -0
  193. aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
  194. aiecs/llm/client_factory.py +230 -37
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +328 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  199. aiecs/llm/clients/googleai_client.py +314 -0
  200. aiecs/llm/clients/openai_client.py +158 -0
  201. aiecs/llm/clients/openai_compatible_mixin.py +367 -0
  202. aiecs/llm/clients/vertex_client.py +1186 -0
  203. aiecs/llm/clients/xai_client.py +201 -0
  204. aiecs/llm/config/__init__.py +51 -0
  205. aiecs/llm/config/config_loader.py +272 -0
  206. aiecs/llm/config/config_validator.py +206 -0
  207. aiecs/llm/config/model_config.py +143 -0
  208. aiecs/llm/protocols.py +149 -0
  209. aiecs/llm/utils/__init__.py +10 -0
  210. aiecs/llm/utils/validate_config.py +89 -0
  211. aiecs/main.py +140 -121
  212. aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
  213. aiecs/scripts/aid/__init__.py +19 -0
  214. aiecs/scripts/aid/module_checker.py +499 -0
  215. aiecs/scripts/aid/version_manager.py +235 -0
  216. aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
  217. aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
  218. aiecs/scripts/dependance_check/__init__.py +15 -0
  219. aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  220. aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
  221. aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
  222. aiecs/scripts/dependance_patch/__init__.py +7 -0
  223. aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
  224. aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
  225. aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
  226. aiecs/scripts/knowledge_graph/__init__.py +3 -0
  227. aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  228. aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  229. aiecs/scripts/tools_develop/README.md +671 -0
  230. aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  231. aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  232. aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
  233. aiecs/scripts/tools_develop/__init__.py +21 -0
  234. aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  235. aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
  236. aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  237. aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  238. aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
  239. aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  240. aiecs/scripts/tools_develop/verify_tools.py +352 -0
  241. aiecs/tasks/__init__.py +0 -1
  242. aiecs/tasks/worker.py +115 -47
  243. aiecs/tools/__init__.py +194 -72
  244. aiecs/tools/apisource/__init__.py +99 -0
  245. aiecs/tools/apisource/intelligence/__init__.py +19 -0
  246. aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
  247. aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
  248. aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
  249. aiecs/tools/apisource/monitoring/__init__.py +9 -0
  250. aiecs/tools/apisource/monitoring/metrics.py +330 -0
  251. aiecs/tools/apisource/providers/__init__.py +112 -0
  252. aiecs/tools/apisource/providers/base.py +671 -0
  253. aiecs/tools/apisource/providers/census.py +397 -0
  254. aiecs/tools/apisource/providers/fred.py +535 -0
  255. aiecs/tools/apisource/providers/newsapi.py +409 -0
  256. aiecs/tools/apisource/providers/worldbank.py +352 -0
  257. aiecs/tools/apisource/reliability/__init__.py +12 -0
  258. aiecs/tools/apisource/reliability/error_handler.py +363 -0
  259. aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
  260. aiecs/tools/apisource/tool.py +832 -0
  261. aiecs/tools/apisource/utils/__init__.py +9 -0
  262. aiecs/tools/apisource/utils/validators.py +334 -0
  263. aiecs/tools/base_tool.py +415 -21
  264. aiecs/tools/docs/__init__.py +121 -0
  265. aiecs/tools/docs/ai_document_orchestrator.py +607 -0
  266. aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
  267. aiecs/tools/docs/content_insertion_tool.py +1320 -0
  268. aiecs/tools/docs/document_creator_tool.py +1464 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1016 -0
  271. aiecs/tools/docs/document_writer_tool.py +2008 -0
  272. aiecs/tools/knowledge_graph/__init__.py +17 -0
  273. aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
  274. aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
  275. aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
  276. aiecs/tools/langchain_adapter.py +300 -138
  277. aiecs/tools/schema_generator.py +455 -0
  278. aiecs/tools/search_tool/__init__.py +100 -0
  279. aiecs/tools/search_tool/analyzers.py +581 -0
  280. aiecs/tools/search_tool/cache.py +264 -0
  281. aiecs/tools/search_tool/constants.py +128 -0
  282. aiecs/tools/search_tool/context.py +224 -0
  283. aiecs/tools/search_tool/core.py +778 -0
  284. aiecs/tools/search_tool/deduplicator.py +119 -0
  285. aiecs/tools/search_tool/error_handler.py +242 -0
  286. aiecs/tools/search_tool/metrics.py +343 -0
  287. aiecs/tools/search_tool/rate_limiter.py +172 -0
  288. aiecs/tools/search_tool/schemas.py +275 -0
  289. aiecs/tools/statistics/__init__.py +80 -0
  290. aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
  291. aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
  292. aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
  293. aiecs/tools/statistics/data_loader_tool.py +555 -0
  294. aiecs/tools/statistics/data_profiler_tool.py +638 -0
  295. aiecs/tools/statistics/data_transformer_tool.py +580 -0
  296. aiecs/tools/statistics/data_visualizer_tool.py +498 -0
  297. aiecs/tools/statistics/model_trainer_tool.py +507 -0
  298. aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
  299. aiecs/tools/task_tools/__init__.py +49 -36
  300. aiecs/tools/task_tools/chart_tool.py +200 -184
  301. aiecs/tools/task_tools/classfire_tool.py +268 -267
  302. aiecs/tools/task_tools/image_tool.py +220 -141
  303. aiecs/tools/task_tools/office_tool.py +226 -146
  304. aiecs/tools/task_tools/pandas_tool.py +477 -121
  305. aiecs/tools/task_tools/report_tool.py +390 -142
  306. aiecs/tools/task_tools/research_tool.py +149 -79
  307. aiecs/tools/task_tools/scraper_tool.py +339 -145
  308. aiecs/tools/task_tools/stats_tool.py +448 -209
  309. aiecs/tools/temp_file_manager.py +26 -24
  310. aiecs/tools/tool_executor/__init__.py +18 -16
  311. aiecs/tools/tool_executor/tool_executor.py +364 -52
  312. aiecs/utils/LLM_output_structor.py +74 -48
  313. aiecs/utils/__init__.py +14 -3
  314. aiecs/utils/base_callback.py +0 -3
  315. aiecs/utils/cache_provider.py +696 -0
  316. aiecs/utils/execution_utils.py +50 -31
  317. aiecs/utils/prompt_loader.py +1 -0
  318. aiecs/utils/token_usage_repository.py +37 -11
  319. aiecs/ws/socket_server.py +14 -4
  320. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
  321. aiecs-1.7.17.dist-info/RECORD +337 -0
  322. aiecs-1.7.17.dist-info/entry_points.txt +13 -0
  323. aiecs/config/registry.py +0 -19
  324. aiecs/domain/context/content_engine.py +0 -982
  325. aiecs/llm/base_client.py +0 -99
  326. aiecs/llm/openai_client.py +0 -125
  327. aiecs/llm/vertex_client.py +0 -186
  328. aiecs/llm/xai_client.py +0 -184
  329. aiecs/scripts/dependency_checker.py +0 -857
  330. aiecs/scripts/quick_dependency_check.py +0 -269
  331. aiecs/tools/task_tools/search_api.py +0 -7
  332. aiecs-1.0.1.dist-info/RECORD +0 -90
  333. aiecs-1.0.1.dist-info/entry_points.txt +0 -7
  334. /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
  335. /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
  336. /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
  337. /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
  338. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,212 @@
1
+ """
2
+ Global Metrics Manager
3
+
4
+ This module provides a singleton ExecutorMetrics instance that can be shared
5
+ across all components in the application. It follows the same pattern as
6
+ other global managers in the infrastructure layer.
7
+
8
+ Usage:
9
+ # In main.py startup:
10
+ await initialize_global_metrics()
11
+
12
+ # In any component:
13
+ from aiecs.infrastructure.monitoring.global_metrics_manager import get_global_metrics
14
+ metrics = get_global_metrics()
15
+ """
16
+
17
+ import logging
18
+ import asyncio
19
+ import os
20
+ from typing import Optional, Dict, Any
21
+ from .executor_metrics import ExecutorMetrics
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+ # Global singleton instance
26
+ _global_metrics: Optional[ExecutorMetrics] = None
27
+ _initialization_lock = asyncio.Lock()
28
+ _initialized = False
29
+
30
+
31
+ async def initialize_global_metrics(
32
+ enable_metrics: bool = True,
33
+ metrics_port: Optional[int] = None,
34
+ config: Optional[Dict[str, Any]] = None,
35
+ ) -> Optional[ExecutorMetrics]:
36
+ """
37
+ Initialize the global ExecutorMetrics instance.
38
+
39
+ This should be called once during application startup (in main.py lifespan).
40
+
41
+ Args:
42
+ enable_metrics: Whether to enable metrics collection (default: True)
43
+ metrics_port: Port for metrics server (default: from env or 8001)
44
+ config: Additional configuration options
45
+
46
+ Returns:
47
+ The initialized ExecutorMetrics instance or None if initialization fails
48
+
49
+ Example:
50
+ @asynccontextmanager
51
+ async def lifespan(app: FastAPI):
52
+ # Startup
53
+ await initialize_global_metrics()
54
+ yield
55
+ # Shutdown
56
+ await close_global_metrics()
57
+ """
58
+ global _global_metrics, _initialized
59
+
60
+ if _initialized and _global_metrics:
61
+ logger.info("Global metrics already initialized")
62
+ return _global_metrics
63
+
64
+ async with _initialization_lock:
65
+ # Double-check after acquiring lock
66
+ if _initialized and _global_metrics:
67
+ return _global_metrics
68
+
69
+ try:
70
+ # Determine metrics port
71
+ if metrics_port is None:
72
+ metrics_port = int(os.environ.get("METRICS_PORT", "8001"))
73
+
74
+ # Check if metrics should be enabled
75
+ if not enable_metrics:
76
+ enable_metrics = os.environ.get("ENABLE_METRICS", "true").lower() == "true"
77
+
78
+ logger.info(f"Initializing global metrics (port: {metrics_port}, enabled: {enable_metrics})...")
79
+
80
+ # Create metrics instance
81
+ _global_metrics = ExecutorMetrics(enable_metrics=enable_metrics, metrics_port=metrics_port)
82
+
83
+ _initialized = True
84
+ logger.info("✅ Global metrics initialized successfully")
85
+ return _global_metrics
86
+
87
+ except Exception as e:
88
+ logger.error(f"❌ Failed to initialize global metrics: {e}")
89
+ logger.warning("Application will continue without metrics (degraded mode)")
90
+ _global_metrics = None
91
+ _initialized = False
92
+ return None
93
+
94
+
95
+ def get_global_metrics() -> Optional[ExecutorMetrics]:
96
+ """
97
+ Get the global ExecutorMetrics instance.
98
+
99
+ Returns:
100
+ The global ExecutorMetrics instance or None if not initialized
101
+
102
+ Raises:
103
+ RuntimeError: If metrics are requested but not initialized
104
+
105
+ Example:
106
+ metrics = get_global_metrics()
107
+ if metrics:
108
+ metrics.record_operation('my_operation', 1)
109
+ """
110
+ if _global_metrics is None:
111
+ logger.warning("Global metrics not initialized - call initialize_global_metrics() first")
112
+ return None
113
+
114
+ return _global_metrics
115
+
116
+
117
+ async def close_global_metrics():
118
+ """
119
+ Close the global metrics instance.
120
+
121
+ This should be called during application shutdown.
122
+ """
123
+ global _global_metrics, _initialized
124
+
125
+ if _global_metrics:
126
+ try:
127
+ # ExecutorMetrics doesn't have a close method, but we can clean up
128
+ logger.info("Closing global metrics...")
129
+ _global_metrics = None
130
+ _initialized = False
131
+ logger.info("✅ Global metrics closed successfully")
132
+ except Exception as e:
133
+ logger.error(f"❌ Error closing global metrics: {e}")
134
+
135
+
136
+ def is_metrics_initialized() -> bool:
137
+ """
138
+ Check if global metrics are initialized.
139
+
140
+ Returns:
141
+ True if metrics are initialized, False otherwise
142
+ """
143
+ return _initialized and _global_metrics is not None
144
+
145
+
146
+ def get_metrics_summary() -> Dict[str, Any]:
147
+ """
148
+ Get a summary of the global metrics status.
149
+
150
+ Returns:
151
+ Dictionary containing metrics status information
152
+ """
153
+ if not is_metrics_initialized():
154
+ return {
155
+ "initialized": False,
156
+ "message": "Global metrics not initialized",
157
+ }
158
+
159
+ if _global_metrics is None:
160
+ return {
161
+ "initialized": False,
162
+ "message": "Global metrics not initialized",
163
+ }
164
+ try:
165
+ return _global_metrics.get_metrics_summary()
166
+ except Exception as e:
167
+ return {
168
+ "initialized": True,
169
+ "error": str(e),
170
+ "message": "Failed to get metrics summary",
171
+ }
172
+
173
+
174
+ # Convenience functions for common operations
175
+ def record_operation(
176
+ operation_type: str,
177
+ success: bool = True,
178
+ duration: Optional[float] = None,
179
+ **kwargs,
180
+ ):
181
+ """Record an operation using global metrics."""
182
+ metrics = get_global_metrics()
183
+ if metrics:
184
+ metrics.record_operation(operation_type, success, duration, **kwargs)
185
+
186
+
187
+ def record_duration(operation: str, duration: float, labels: Optional[Dict[str, str]] = None):
188
+ """Record operation duration using global metrics."""
189
+ metrics = get_global_metrics()
190
+ if metrics:
191
+ metrics.record_duration(operation, duration, labels)
192
+
193
+
194
+ def record_operation_success(operation: str, labels: Optional[Dict[str, str]] = None):
195
+ """Record operation success using global metrics."""
196
+ metrics = get_global_metrics()
197
+ if metrics:
198
+ metrics.record_operation_success(operation, labels)
199
+
200
+
201
+ def record_operation_failure(operation: str, error_type: str, labels: Optional[Dict[str, str]] = None):
202
+ """Record operation failure using global metrics."""
203
+ metrics = get_global_metrics()
204
+ if metrics:
205
+ metrics.record_operation_failure(operation, error_type, labels)
206
+
207
+
208
+ def record_retry(operation: str, attempt_number: int):
209
+ """Record retry using global metrics."""
210
+ metrics = get_global_metrics()
211
+ if metrics:
212
+ metrics.record_retry(operation, attempt_number)
@@ -1,7 +1,7 @@
1
1
  """Structured logging setup for aiecs."""
2
+
2
3
  import logging
3
4
  import sys
4
- from typing import Optional
5
5
 
6
6
 
7
7
  def setup_structured_logging(level: str = "INFO", format_type: str = "json") -> None:
@@ -18,14 +18,10 @@ def setup_structured_logging(level: str = "INFO", format_type: str = "json") ->
18
18
  # Create formatter
19
19
  if format_type.lower() == "json":
20
20
  # Simple JSON-like format for now
21
- formatter = logging.Formatter(
22
- '{"timestamp": "%(asctime)s", "level": "%(levelname)s", "module": "%(name)s", "message": "%(message)s"}'
23
- )
21
+ formatter = logging.Formatter('{"timestamp": "%(asctime)s", "level": "%(levelname)s", "module": "%(name)s", "message": "%(message)s"}')
24
22
  else:
25
23
  # Standard text format
26
- formatter = logging.Formatter(
27
- '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
28
- )
24
+ formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
29
25
 
30
26
  # Setup root logger
31
27
  root_logger = logging.getLogger()
@@ -4,7 +4,7 @@ import os
4
4
  from typing import Dict, Any, Optional
5
5
  import jaeger_client
6
6
  import jaeger_client.config
7
- from opentracing import tracer, Span
7
+ from opentracing import Span
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -14,12 +14,16 @@ class TracingManager:
14
14
  Specialized handler for distributed tracing and link tracking
15
15
  """
16
16
 
17
- def __init__(self, service_name: str = "service_executor",
18
- jaeger_host: Optional[str] = None,
19
- jaeger_port: Optional[int] = None,
20
- enable_tracing: Optional[bool] = None):
17
+ def __init__(
18
+ self,
19
+ service_name: str = "service_executor",
20
+ jaeger_host: Optional[str] = None,
21
+ jaeger_port: Optional[int] = None,
22
+ enable_tracing: Optional[bool] = None,
23
+ ):
21
24
  self.service_name = service_name
22
- # Get configuration from environment variables, use defaults if not available
25
+ # Get configuration from environment variables, use defaults if not
26
+ # available
23
27
  self.jaeger_host = jaeger_host or os.getenv("JAEGER_AGENT_HOST", "jaeger")
24
28
  self.jaeger_port = jaeger_port or int(os.getenv("JAEGER_AGENT_PORT", "6831"))
25
29
  self.enable_tracing = enable_tracing if enable_tracing is not None else os.getenv("JAEGER_ENABLE_TRACING", "true").lower() == "true"
@@ -33,18 +37,18 @@ class TracingManager:
33
37
  try:
34
38
  config = jaeger_client.config.Config(
35
39
  config={
36
- 'sampler': {
37
- 'type': 'const',
38
- 'param': 1,
40
+ "sampler": {
41
+ "type": "const",
42
+ "param": 1,
39
43
  },
40
- 'local_agent': {
41
- 'reporting_host': self.jaeger_host,
42
- 'reporting_port': self.jaeger_port,
44
+ "local_agent": {
45
+ "reporting_host": self.jaeger_host,
46
+ "reporting_port": self.jaeger_port,
43
47
  },
44
- 'logging': True,
48
+ "logging": True,
45
49
  },
46
50
  service_name=self.service_name,
47
- validate=True
51
+ validate=True,
48
52
  )
49
53
  self.tracer = config.initialize_tracer()
50
54
  logger.info(f"Jaeger tracer initialized for service '{self.service_name}' at {self.jaeger_host}:{self.jaeger_port}")
@@ -53,8 +57,12 @@ class TracingManager:
53
57
  self.tracer = None
54
58
  self.enable_tracing = False
55
59
 
56
- def start_span(self, operation_name: str, parent_span: Optional[Span] = None,
57
- tags: Optional[Dict[str, Any]] = None) -> Optional[Span]:
60
+ def start_span(
61
+ self,
62
+ operation_name: str,
63
+ parent_span: Optional[Span] = None,
64
+ tags: Optional[Dict[str, Any]] = None,
65
+ ) -> Optional[Span]:
58
66
  """
59
67
  Start a tracing span
60
68
 
@@ -70,10 +78,7 @@ class TracingManager:
70
78
  return None
71
79
 
72
80
  try:
73
- span = self.tracer.start_span(
74
- operation_name=operation_name,
75
- child_of=parent_span
76
- )
81
+ span = self.tracer.start_span(operation_name=operation_name, child_of=parent_span)
77
82
 
78
83
  # Set initial tags
79
84
  if tags:
@@ -89,8 +94,13 @@ class TracingManager:
89
94
  logger.error(f"Error starting span '{operation_name}': {e}")
90
95
  return None
91
96
 
92
- def finish_span(self, span: Optional[Span], tags: Optional[Dict[str, Any]] = None,
93
- logs: Optional[Dict[str, Any]] = None, error: Optional[Exception] = None):
97
+ def finish_span(
98
+ self,
99
+ span: Optional[Span],
100
+ tags: Optional[Dict[str, Any]] = None,
101
+ logs: Optional[Dict[str, Any]] = None,
102
+ error: Optional[Exception] = None,
103
+ ):
94
104
  """
95
105
  Finish tracing span
96
106
 
@@ -132,6 +142,7 @@ class TracingManager:
132
142
  operation_name: Operation name
133
143
  tags: Initial tags
134
144
  """
145
+
135
146
  def decorator(func):
136
147
  @functools.wraps(func)
137
148
  async def async_wrapper(*args, **kwargs):
@@ -185,6 +196,7 @@ class TracingManager:
185
196
 
186
197
  # Return appropriate wrapper based on function type
187
198
  import asyncio
199
+
188
200
  if asyncio.iscoroutinefunction(func):
189
201
  return async_wrapper
190
202
  else:
@@ -202,29 +214,31 @@ class TracingManager:
202
214
  for i, arg in enumerate(args):
203
215
  if isinstance(arg, (str, int, float, bool)):
204
216
  span.set_tag(f"arg_{i}", arg)
205
- elif hasattr(arg, '__class__'):
217
+ elif hasattr(arg, "__class__"):
206
218
  span.set_tag(f"arg_{i}_type", arg.__class__.__name__)
207
219
 
208
220
  # Add keyword arguments
209
221
  for key, value in kwargs.items():
210
222
  if isinstance(value, (str, int, float, bool)):
211
223
  span.set_tag(key, value)
212
- elif isinstance(value, dict) and len(str(value)) < 1000: # Avoid overly large dictionaries
224
+ # Avoid overly large dictionaries
225
+ elif isinstance(value, dict) and len(str(value)) < 1000:
213
226
  span.set_tag(f"{key}_json", str(value))
214
- elif hasattr(value, '__class__'):
227
+ elif hasattr(value, "__class__"):
215
228
  span.set_tag(f"{key}_type", value.__class__.__name__)
216
229
  except Exception as e:
217
230
  logger.debug(f"Error adding function args to span: {e}")
218
231
 
219
- def trace_database_operation(self, operation: str, table: str = None, query: str = None):
232
+ def trace_database_operation(self, operation: str, table: Optional[str] = None, query: Optional[str] = None):
220
233
  """Database operation tracing decorator"""
234
+
221
235
  def decorator(func):
222
236
  @functools.wraps(func)
223
237
  async def wrapper(*args, **kwargs):
224
238
  tags = {
225
239
  "component": "database",
226
240
  "db.type": "postgresql",
227
- "db.statement.type": operation
241
+ "db.statement.type": operation,
228
242
  }
229
243
 
230
244
  if table:
@@ -237,7 +251,10 @@ class TracingManager:
237
251
  try:
238
252
  result = await func(*args, **kwargs)
239
253
  if span:
240
- span.set_tag("db.rows_affected", len(result) if isinstance(result, list) else 1)
254
+ span.set_tag(
255
+ "db.rows_affected",
256
+ len(result) if isinstance(result, list) else 1,
257
+ )
241
258
  return result
242
259
  except Exception as e:
243
260
  self.finish_span(span, error=e)
@@ -247,17 +264,19 @@ class TracingManager:
247
264
  self.finish_span(span)
248
265
 
249
266
  return wrapper
267
+
250
268
  return decorator
251
269
 
252
- def trace_external_call(self, service_name: str, endpoint: str = None):
270
+ def trace_external_call(self, service_name: str, endpoint: Optional[str] = None):
253
271
  """External service call tracing decorator"""
272
+
254
273
  def decorator(func):
255
274
  @functools.wraps(func)
256
275
  async def wrapper(*args, **kwargs):
257
276
  tags = {
258
277
  "component": "http",
259
278
  "span.kind": "client",
260
- "peer.service": service_name
279
+ "peer.service": service_name,
261
280
  }
262
281
 
263
282
  if endpoint:
@@ -280,17 +299,19 @@ class TracingManager:
280
299
  self.finish_span(span)
281
300
 
282
301
  return wrapper
302
+
283
303
  return decorator
284
304
 
285
305
  def trace_tool_execution(self, tool_name: str, operation: str):
286
306
  """Tool execution tracing decorator"""
307
+
287
308
  def decorator(func):
288
309
  @functools.wraps(func)
289
310
  async def wrapper(*args, **kwargs):
290
311
  tags = {
291
312
  "component": "tool",
292
313
  "tool.name": tool_name,
293
- "tool.operation": operation
314
+ "tool.operation": operation,
294
315
  }
295
316
 
296
317
  span = self.start_span(f"tool.{tool_name}.{operation}", tags=tags)
@@ -299,7 +320,7 @@ class TracingManager:
299
320
  result = await func(*args, **kwargs)
300
321
  if span:
301
322
  span.set_tag("tool.success", True)
302
- if hasattr(result, '__len__'):
323
+ if hasattr(result, "__len__"):
303
324
  span.set_tag("tool.result_size", len(result))
304
325
  return result
305
326
  except Exception as e:
@@ -312,10 +333,15 @@ class TracingManager:
312
333
  self.finish_span(span)
313
334
 
314
335
  return wrapper
336
+
315
337
  return decorator
316
338
 
317
- def create_child_span(self, parent_span: Optional[Span], operation_name: str,
318
- tags: Optional[Dict[str, Any]] = None) -> Optional[Span]:
339
+ def create_child_span(
340
+ self,
341
+ parent_span: Optional[Span],
342
+ operation_name: str,
343
+ tags: Optional[Dict[str, Any]] = None,
344
+ ) -> Optional[Span]:
319
345
  """Create child span"""
320
346
  if not self.enable_tracing or not parent_span:
321
347
  return None
@@ -329,6 +355,7 @@ class TracingManager:
329
355
 
330
356
  try:
331
357
  from opentracing.propagation import Format
358
+
332
359
  self.tracer.inject(span.context, Format.TEXT_MAP, carrier)
333
360
  except Exception as e:
334
361
  logger.error(f"Error injecting span context: {e}")
@@ -340,6 +367,7 @@ class TracingManager:
340
367
 
341
368
  try:
342
369
  from opentracing.propagation import Format
370
+
343
371
  return self.tracer.extract(Format.TEXT_MAP, carrier)
344
372
  except Exception as e:
345
373
  logger.error(f"Error extracting span context: {e}")
@@ -372,5 +400,5 @@ class TracingManager:
372
400
  "service_name": self.service_name,
373
401
  "jaeger_host": self.jaeger_host,
374
402
  "jaeger_port": self.jaeger_port,
375
- "tracer_initialized": self.tracer is not None
403
+ "tracer_initialized": self.tracer is not None,
376
404
  }
@@ -4,9 +4,22 @@ Contains data persistence and storage infrastructure.
4
4
  """
5
5
 
6
6
  from .database_manager import DatabaseManager
7
- from .redis_client import RedisClient
7
+ from .redis_client import RedisClient, get_redis_client
8
+ from .context_engine_client import (
9
+ initialize_context_engine,
10
+ get_context_engine,
11
+ close_context_engine,
12
+ is_context_engine_initialized,
13
+ reset_context_engine,
14
+ )
8
15
 
9
16
  __all__ = [
10
17
  "DatabaseManager",
11
18
  "RedisClient",
19
+ "get_redis_client",
20
+ "initialize_context_engine",
21
+ "get_context_engine",
22
+ "close_context_engine",
23
+ "is_context_engine_initialized",
24
+ "reset_context_engine",
12
25
  ]