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,479 @@
1
+ """
2
+ Agent Observability
3
+
4
+ Observer pattern and controllers for monitoring agent behavior.
5
+ """
6
+
7
+ import logging
8
+ from typing import Dict, Any, List, Protocol
9
+ from datetime import datetime
10
+
11
+ from .base_agent import BaseAIAgent
12
+ from .models import AgentState
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class AgentObserver(Protocol):
18
+ """Protocol for observing agent events."""
19
+
20
+ def on_state_changed(
21
+ self,
22
+ agent_id: str,
23
+ old_state: AgentState,
24
+ new_state: AgentState,
25
+ timestamp: datetime,
26
+ ) -> None:
27
+ """
28
+ Called when agent state changes.
29
+
30
+ Args:
31
+ agent_id: Agent identifier
32
+ old_state: Previous state
33
+ new_state: New state
34
+ timestamp: Change timestamp
35
+ """
36
+ ...
37
+
38
+ def on_task_started(
39
+ self,
40
+ agent_id: str,
41
+ task_id: str,
42
+ task: Dict[str, Any],
43
+ timestamp: datetime,
44
+ ) -> None:
45
+ """
46
+ Called when agent starts a task.
47
+
48
+ Args:
49
+ agent_id: Agent identifier
50
+ task_id: Task identifier
51
+ task: Task specification
52
+ timestamp: Start timestamp
53
+ """
54
+ ...
55
+
56
+ def on_task_completed(
57
+ self,
58
+ agent_id: str,
59
+ task_id: str,
60
+ result: Dict[str, Any],
61
+ timestamp: datetime,
62
+ ) -> None:
63
+ """
64
+ Called when agent completes a task.
65
+
66
+ Args:
67
+ agent_id: Agent identifier
68
+ task_id: Task identifier
69
+ result: Task result
70
+ timestamp: Completion timestamp
71
+ """
72
+ ...
73
+
74
+ def on_task_failed(
75
+ self,
76
+ agent_id: str,
77
+ task_id: str,
78
+ error: Exception,
79
+ timestamp: datetime,
80
+ ) -> None:
81
+ """
82
+ Called when agent task fails.
83
+
84
+ Args:
85
+ agent_id: Agent identifier
86
+ task_id: Task identifier
87
+ error: Error that occurred
88
+ timestamp: Failure timestamp
89
+ """
90
+ ...
91
+
92
+ def on_health_status_changed(
93
+ self,
94
+ agent_id: str,
95
+ health_status: Dict[str, Any],
96
+ timestamp: datetime,
97
+ ) -> None:
98
+ """
99
+ Called when agent health status changes significantly.
100
+
101
+ Args:
102
+ agent_id: Agent identifier
103
+ health_status: Health status dictionary with score and issues
104
+ timestamp: Status change timestamp
105
+ """
106
+ ...
107
+
108
+ def on_tool_called(
109
+ self,
110
+ agent_id: str,
111
+ tool_name: str,
112
+ parameters: Dict[str, Any],
113
+ timestamp: datetime,
114
+ ) -> None:
115
+ """
116
+ Called when agent calls a tool.
117
+
118
+ Args:
119
+ agent_id: Agent identifier
120
+ tool_name: Tool name
121
+ parameters: Tool parameters
122
+ timestamp: Call timestamp
123
+ """
124
+ ...
125
+
126
+
127
+ class LoggingObserver:
128
+ """Observer that logs agent events."""
129
+
130
+ def __init__(self, log_level: int = logging.INFO):
131
+ """
132
+ Initialize logging observer.
133
+
134
+ Args:
135
+ log_level: Logging level
136
+ """
137
+ self.logger = logging.getLogger(f"{__name__}.LoggingObserver")
138
+ self.log_level = log_level
139
+
140
+ def on_state_changed(
141
+ self,
142
+ agent_id: str,
143
+ old_state: AgentState,
144
+ new_state: AgentState,
145
+ timestamp: datetime,
146
+ ) -> None:
147
+ """Log state change."""
148
+ self.logger.log(
149
+ self.log_level,
150
+ f"Agent {agent_id}: {old_state.value} → {new_state.value}",
151
+ )
152
+
153
+ def on_task_started(
154
+ self,
155
+ agent_id: str,
156
+ task_id: str,
157
+ task: Dict[str, Any],
158
+ timestamp: datetime,
159
+ ) -> None:
160
+ """Log task start."""
161
+ self.logger.log(self.log_level, f"Agent {agent_id}: Task {task_id} started")
162
+
163
+ def on_task_completed(
164
+ self,
165
+ agent_id: str,
166
+ task_id: str,
167
+ result: Dict[str, Any],
168
+ timestamp: datetime,
169
+ ) -> None:
170
+ """Log task completion."""
171
+ self.logger.log(self.log_level, f"Agent {agent_id}: Task {task_id} completed")
172
+
173
+ def on_task_failed(
174
+ self,
175
+ agent_id: str,
176
+ task_id: str,
177
+ error: Exception,
178
+ timestamp: datetime,
179
+ ) -> None:
180
+ """Log task failure."""
181
+ self.logger.log(
182
+ self.log_level,
183
+ f"Agent {agent_id}: Task {task_id} failed - {str(error)}",
184
+ )
185
+
186
+ def on_tool_called(
187
+ self,
188
+ agent_id: str,
189
+ tool_name: str,
190
+ parameters: Dict[str, Any],
191
+ timestamp: datetime,
192
+ ) -> None:
193
+ """Log tool call."""
194
+ self.logger.log(self.log_level, f"Agent {agent_id}: Tool '{tool_name}' called")
195
+
196
+ def on_health_status_changed(
197
+ self,
198
+ agent_id: str,
199
+ health_status: Dict[str, Any],
200
+ timestamp: datetime,
201
+ ) -> None:
202
+ """Log health status change."""
203
+ status = health_status.get("status", "unknown")
204
+ score = health_status.get("health_score", 0)
205
+ issues = health_status.get("issues", [])
206
+
207
+ log_level = self.log_level
208
+ if status == "unhealthy":
209
+ log_level = logging.WARNING
210
+ elif status == "degraded":
211
+ log_level = logging.INFO
212
+
213
+ message = f"Agent {agent_id}: Health status {status} (score: {score:.1f}/100)"
214
+ if issues:
215
+ message += f" - Issues: {', '.join(issues)}"
216
+
217
+ self.logger.log(log_level, message)
218
+
219
+
220
+ class MetricsObserver:
221
+ """Observer that collects metrics."""
222
+
223
+ def __init__(self) -> None:
224
+ """Initialize metrics observer."""
225
+ self.state_changes: List[Dict[str, Any]] = []
226
+ self.task_events: List[Dict[str, Any]] = []
227
+ self.tool_calls: List[Dict[str, Any]] = []
228
+ self.health_status_changes: List[Dict[str, Any]] = []
229
+
230
+ def on_state_changed(
231
+ self,
232
+ agent_id: str,
233
+ old_state: AgentState,
234
+ new_state: AgentState,
235
+ timestamp: datetime,
236
+ ) -> None:
237
+ """Record state change."""
238
+ self.state_changes.append(
239
+ {
240
+ "agent_id": agent_id,
241
+ "old_state": old_state.value,
242
+ "new_state": new_state.value,
243
+ "timestamp": timestamp.isoformat(),
244
+ }
245
+ )
246
+
247
+ def on_task_started(
248
+ self,
249
+ agent_id: str,
250
+ task_id: str,
251
+ task: Dict[str, Any],
252
+ timestamp: datetime,
253
+ ) -> None:
254
+ """Record task start."""
255
+ self.task_events.append(
256
+ {
257
+ "agent_id": agent_id,
258
+ "task_id": task_id,
259
+ "event": "started",
260
+ "timestamp": timestamp.isoformat(),
261
+ }
262
+ )
263
+
264
+ def on_task_completed(
265
+ self,
266
+ agent_id: str,
267
+ task_id: str,
268
+ result: Dict[str, Any],
269
+ timestamp: datetime,
270
+ ) -> None:
271
+ """Record task completion."""
272
+ self.task_events.append(
273
+ {
274
+ "agent_id": agent_id,
275
+ "task_id": task_id,
276
+ "event": "completed",
277
+ "timestamp": timestamp.isoformat(),
278
+ }
279
+ )
280
+
281
+ def on_task_failed(
282
+ self,
283
+ agent_id: str,
284
+ task_id: str,
285
+ error: Exception,
286
+ timestamp: datetime,
287
+ ) -> None:
288
+ """Record task failure."""
289
+ self.task_events.append(
290
+ {
291
+ "agent_id": agent_id,
292
+ "task_id": task_id,
293
+ "event": "failed",
294
+ "error": str(error),
295
+ "timestamp": timestamp.isoformat(),
296
+ }
297
+ )
298
+
299
+ def on_tool_called(
300
+ self,
301
+ agent_id: str,
302
+ tool_name: str,
303
+ parameters: Dict[str, Any],
304
+ timestamp: datetime,
305
+ ) -> None:
306
+ """Record tool call."""
307
+ self.tool_calls.append(
308
+ {
309
+ "agent_id": agent_id,
310
+ "tool_name": tool_name,
311
+ "timestamp": timestamp.isoformat(),
312
+ }
313
+ )
314
+
315
+ def on_health_status_changed(
316
+ self,
317
+ agent_id: str,
318
+ health_status: Dict[str, Any],
319
+ timestamp: datetime,
320
+ ) -> None:
321
+ """Record health status change."""
322
+ self.health_status_changes.append(
323
+ {
324
+ "agent_id": agent_id,
325
+ "status": health_status.get("status"),
326
+ "health_score": health_status.get("health_score"),
327
+ "issues": health_status.get("issues", []),
328
+ "timestamp": timestamp.isoformat(),
329
+ }
330
+ )
331
+
332
+ def get_metrics(self) -> Dict[str, Any]:
333
+ """Get collected metrics."""
334
+ return {
335
+ "state_changes": len(self.state_changes),
336
+ "task_events": len(self.task_events),
337
+ "tool_calls": len(self.tool_calls),
338
+ "health_status_changes": len(self.health_status_changes),
339
+ "state_changes_data": self.state_changes,
340
+ "task_events_data": self.task_events,
341
+ "tool_calls_data": self.tool_calls,
342
+ "health_status_changes_data": self.health_status_changes,
343
+ }
344
+
345
+ def clear(self) -> None:
346
+ """Clear all metrics."""
347
+ self.state_changes.clear()
348
+ self.task_events.clear()
349
+ self.tool_calls.clear()
350
+ self.health_status_changes.clear()
351
+
352
+
353
+ class AgentController:
354
+ """
355
+ Controller for managing agent execution and monitoring.
356
+
357
+ Integrates with observers for event tracking.
358
+ """
359
+
360
+ def __init__(self, agent: BaseAIAgent):
361
+ """
362
+ Initialize agent controller.
363
+
364
+ Args:
365
+ agent: Agent to control
366
+ """
367
+ self.agent = agent
368
+ self.observers: List[AgentObserver] = []
369
+ logger.info(f"AgentController initialized for agent {agent.agent_id}")
370
+
371
+ def add_observer(self, observer: AgentObserver) -> None:
372
+ """
373
+ Add an observer.
374
+
375
+ Args:
376
+ observer: Observer to add
377
+ """
378
+ self.observers.append(observer)
379
+ logger.debug(f"Observer added to agent {self.agent.agent_id}")
380
+
381
+ def remove_observer(self, observer: AgentObserver) -> None:
382
+ """
383
+ Remove an observer.
384
+
385
+ Args:
386
+ observer: Observer to remove
387
+ """
388
+ if observer in self.observers:
389
+ self.observers.remove(observer)
390
+ logger.debug(f"Observer removed from agent {self.agent.agent_id}")
391
+
392
+ def notify_state_changed(self, old_state: AgentState, new_state: AgentState) -> None:
393
+ """Notify observers of state change."""
394
+ timestamp = datetime.utcnow()
395
+ for observer in self.observers:
396
+ try:
397
+ observer.on_state_changed(self.agent.agent_id, old_state, new_state, timestamp)
398
+ except Exception as e:
399
+ logger.error(f"Observer notification failed: {e}")
400
+
401
+ def notify_task_started(self, task_id: str, task: Dict[str, Any]) -> None:
402
+ """Notify observers of task start."""
403
+ timestamp = datetime.utcnow()
404
+ for observer in self.observers:
405
+ try:
406
+ observer.on_task_started(self.agent.agent_id, task_id, task, timestamp)
407
+ except Exception as e:
408
+ logger.error(f"Observer notification failed: {e}")
409
+
410
+ def notify_task_completed(self, task_id: str, result: Dict[str, Any]) -> None:
411
+ """Notify observers of task completion."""
412
+ timestamp = datetime.utcnow()
413
+ for observer in self.observers:
414
+ try:
415
+ observer.on_task_completed(self.agent.agent_id, task_id, result, timestamp)
416
+ except Exception as e:
417
+ logger.error(f"Observer notification failed: {e}")
418
+
419
+ def notify_task_failed(self, task_id: str, error: Exception) -> None:
420
+ """Notify observers of task failure."""
421
+ timestamp = datetime.utcnow()
422
+ for observer in self.observers:
423
+ try:
424
+ observer.on_task_failed(self.agent.agent_id, task_id, error, timestamp)
425
+ except Exception as e:
426
+ logger.error(f"Observer notification failed: {e}")
427
+
428
+ def notify_tool_called(self, tool_name: str, parameters: Dict[str, Any]) -> None:
429
+ """Notify observers of tool call."""
430
+ timestamp = datetime.utcnow()
431
+ for observer in self.observers:
432
+ try:
433
+ observer.on_tool_called(self.agent.agent_id, tool_name, parameters, timestamp)
434
+ except Exception as e:
435
+ logger.error(f"Observer notification failed: {e}")
436
+
437
+ def notify_health_status_changed(self, health_status: Dict[str, Any]) -> None:
438
+ """
439
+ Notify observers of health status change.
440
+
441
+ Args:
442
+ health_status: Health status dictionary with score and issues
443
+ """
444
+ timestamp = datetime.utcnow()
445
+ for observer in self.observers:
446
+ try:
447
+ observer.on_health_status_changed(self.agent.agent_id, health_status, timestamp)
448
+ except Exception as e:
449
+ logger.error(f"Observer notification failed: {e}")
450
+
451
+ async def execute_task_with_observation(self, task: Dict[str, Any], context: Dict[str, Any]) -> Dict[str, Any]:
452
+ """
453
+ Execute task with observer notifications.
454
+
455
+ Args:
456
+ task: Task specification
457
+ context: Execution context
458
+
459
+ Returns:
460
+ Task result
461
+ """
462
+ task_id = task.get("task_id", f"task_{datetime.utcnow().timestamp()}")
463
+
464
+ # Notify start
465
+ self.notify_task_started(task_id, task)
466
+
467
+ try:
468
+ # Execute task
469
+ result = await self.agent.execute_task(task, context)
470
+
471
+ # Notify completion
472
+ self.notify_task_completed(task_id, result)
473
+
474
+ return result
475
+
476
+ except Exception as e:
477
+ # Notify failure
478
+ self.notify_task_failed(task_id, e)
479
+ raise