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,444 @@
1
+ """
2
+ Tool Agent
3
+
4
+ Agent implementation specialized in tool usage and execution.
5
+ """
6
+
7
+ import logging
8
+ from typing import Dict, List, Any, Optional, Union, TYPE_CHECKING
9
+ from datetime import datetime
10
+
11
+ from aiecs.tools import get_tool, BaseTool
12
+
13
+ from .base_agent import BaseAIAgent
14
+ from .models import AgentType, AgentConfiguration
15
+ from .exceptions import TaskExecutionError, ToolAccessDeniedError
16
+
17
+ if TYPE_CHECKING:
18
+ from aiecs.domain.agent.integration.protocols import (
19
+ ConfigManagerProtocol,
20
+ CheckpointerProtocol,
21
+ )
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class ToolAgent(BaseAIAgent):
27
+ """
28
+ Agent specialized in tool selection and execution.
29
+
30
+ This agent can execute one or more tools to complete tasks.
31
+
32
+ **Tool Configuration:**
33
+ - Tool names (List[str]): Backward compatible, tools loaded by name
34
+ - Tool instances (Dict[str, BaseTool]): Pre-configured tools with preserved state
35
+
36
+ Examples:
37
+ # Example 1: Basic usage with tool names (backward compatible)
38
+ agent = ToolAgent(
39
+ agent_id="agent1",
40
+ name="My Tool Agent",
41
+ tools=["search", "calculator"],
42
+ config=config
43
+ )
44
+
45
+ # Example 2: Using tool instances with preserved state
46
+ from aiecs.tools import BaseTool
47
+
48
+ class StatefulCalculatorTool(BaseTool):
49
+ def __init__(self):
50
+ self.calculation_history = [] # State preserved
51
+
52
+ async def run_async(self, operation: str, a: float, b: float):
53
+ if operation == "add":
54
+ result = a + b
55
+ elif operation == "multiply":
56
+ result = a * b
57
+ else:
58
+ raise ValueError(f"Unknown operation: {operation}")
59
+
60
+ # Store in history
61
+ self.calculation_history.append({
62
+ "operation": operation,
63
+ "a": a,
64
+ "b": b,
65
+ "result": result
66
+ })
67
+ return result
68
+
69
+ # Create tool instance
70
+ calculator = StatefulCalculatorTool()
71
+
72
+ agent = ToolAgent(
73
+ agent_id="agent1",
74
+ name="My Tool Agent",
75
+ tools={
76
+ "calculator": calculator, # Stateful tool instance
77
+ "search": SearchTool(api_key="...")
78
+ },
79
+ config=config
80
+ )
81
+
82
+ # Execute task
83
+ result = await agent.execute_task({
84
+ "tool": "calculator",
85
+ "operation": "add",
86
+ "parameters": {"a": 5, "b": 3}
87
+ }, {})
88
+
89
+ # Tool state (calculation_history) is preserved
90
+ print(f"History: {calculator.calculation_history}")
91
+
92
+ # Example 3: Tool instances with dependencies
93
+ class ContextAwareSearchTool(BaseTool):
94
+ def __init__(self, api_key: str, context_engine):
95
+ self.api_key = api_key
96
+ self.context_engine = context_engine
97
+ self.search_cache = {} # State preserved
98
+
99
+ async def run_async(self, operation: str, query: str):
100
+ # Check cache first
101
+ if query in self.search_cache:
102
+ return self.search_cache[query]
103
+
104
+ # Use context_engine for context-aware search
105
+ results = await self._perform_search(query)
106
+ self.search_cache[query] = results
107
+ return results
108
+
109
+ context_engine = ContextEngine()
110
+ await context_engine.initialize()
111
+
112
+ search_tool = ContextAwareSearchTool(
113
+ api_key="...",
114
+ context_engine=context_engine
115
+ )
116
+
117
+ agent = ToolAgent(
118
+ agent_id="agent1",
119
+ name="My Tool Agent",
120
+ tools={
121
+ "search": search_tool, # Tool with dependencies
122
+ "calculator": CalculatorTool()
123
+ },
124
+ config=config
125
+ )
126
+
127
+ # Example 4: Full-featured agent with all options
128
+ from aiecs.domain.context import ContextEngine
129
+ from aiecs.domain.agent.models import ResourceLimits
130
+
131
+ context_engine = ContextEngine()
132
+ await context_engine.initialize()
133
+
134
+ resource_limits = ResourceLimits(
135
+ max_concurrent_tasks=5,
136
+ max_tool_calls_per_minute=100
137
+ )
138
+
139
+ agent = ToolAgent(
140
+ agent_id="agent1",
141
+ name="My Tool Agent",
142
+ tools={
143
+ "search": ContextAwareSearchTool(api_key="...", context_engine=context_engine),
144
+ "calculator": StatefulCalculatorTool()
145
+ },
146
+ config=config,
147
+ config_manager=DatabaseConfigManager(),
148
+ checkpointer=RedisCheckpointer(),
149
+ context_engine=context_engine,
150
+ collaboration_enabled=True,
151
+ agent_registry={"agent2": other_agent},
152
+ learning_enabled=True,
153
+ resource_limits=resource_limits
154
+ )
155
+ """
156
+
157
+ def __init__(
158
+ self,
159
+ agent_id: str,
160
+ name: str,
161
+ tools: Union[List[str], Dict[str, BaseTool]],
162
+ config: AgentConfiguration,
163
+ description: Optional[str] = None,
164
+ version: str = "1.0.0",
165
+ config_manager: Optional["ConfigManagerProtocol"] = None,
166
+ checkpointer: Optional["CheckpointerProtocol"] = None,
167
+ context_engine: Optional[Any] = None,
168
+ collaboration_enabled: bool = False,
169
+ agent_registry: Optional[Dict[str, Any]] = None,
170
+ learning_enabled: bool = False,
171
+ resource_limits: Optional[Any] = None,
172
+ ):
173
+ """
174
+ Initialize Tool agent.
175
+
176
+ Args:
177
+ agent_id: Unique agent identifier
178
+ name: Agent name
179
+ tools: Tools - either list of tool names or dict of tool instances
180
+ config: Agent configuration
181
+ description: Optional description
182
+ version: Agent version
183
+ config_manager: Optional configuration manager for dynamic config
184
+ checkpointer: Optional checkpointer for state persistence
185
+ context_engine: Optional context engine for persistent storage
186
+ collaboration_enabled: Enable collaboration features
187
+ agent_registry: Registry of other agents for collaboration
188
+ learning_enabled: Enable learning features
189
+ resource_limits: Optional resource limits configuration
190
+
191
+ Example with tool instances:
192
+ ```python
193
+ agent = ToolAgent(
194
+ agent_id="agent1",
195
+ name="My Tool Agent",
196
+ tools={
197
+ "search": SearchTool(api_key="..."),
198
+ "calculator": CalculatorTool()
199
+ },
200
+ config=config
201
+ )
202
+ ```
203
+
204
+ Example with tool names (backward compatible):
205
+ ```python
206
+ agent = ToolAgent(
207
+ agent_id="agent1",
208
+ name="My Tool Agent",
209
+ tools=["search", "calculator"],
210
+ config=config
211
+ )
212
+ ```
213
+ """
214
+ super().__init__(
215
+ agent_id=agent_id,
216
+ name=name,
217
+ agent_type=AgentType.TASK_EXECUTOR,
218
+ config=config,
219
+ description=description or "Tool-based task execution agent",
220
+ version=version,
221
+ tools=tools,
222
+ config_manager=config_manager,
223
+ checkpointer=checkpointer,
224
+ context_engine=context_engine,
225
+ collaboration_enabled=collaboration_enabled,
226
+ agent_registry=agent_registry,
227
+ learning_enabled=learning_enabled,
228
+ resource_limits=resource_limits,
229
+ )
230
+
231
+ self._tool_instances: Dict[str, BaseTool] = {}
232
+ self._tool_usage_stats: Dict[str, Dict[str, int]] = {}
233
+
234
+ tool_count = len(tools) if isinstance(tools, (list, dict)) else 0
235
+ logger.info(f"ToolAgent initialized: {agent_id} with {tool_count} tools")
236
+
237
+ async def _initialize(self) -> None:
238
+ """Initialize Tool agent - load tools using BaseAIAgent helper."""
239
+ # Load tools using BaseAIAgent helper
240
+ self._load_tools()
241
+
242
+ # Get tool instances from BaseAIAgent (if provided as instances)
243
+ base_tool_instances = self._get_tool_instances()
244
+
245
+ if base_tool_instances:
246
+ # Tool instances were provided - use them directly
247
+ self._tool_instances = base_tool_instances
248
+ logger.info(f"ToolAgent {self.agent_id} using " f"{len(self._tool_instances)} pre-configured tool instances")
249
+ elif self._available_tools:
250
+ # Tool names were provided - load them
251
+ for tool_name in self._available_tools:
252
+ try:
253
+ self._tool_instances[tool_name] = get_tool(tool_name)
254
+ logger.debug(f"ToolAgent {self.agent_id} loaded tool: {tool_name}")
255
+ except Exception as e:
256
+ logger.warning(f"Failed to load tool {tool_name}: {e}")
257
+
258
+ logger.info(f"ToolAgent {self.agent_id} initialized with {len(self._tool_instances)} tools")
259
+
260
+ # Initialize usage stats for all tools
261
+ for tool_name in self._tool_instances.keys():
262
+ self._tool_usage_stats[tool_name] = {
263
+ "success_count": 0,
264
+ "failure_count": 0,
265
+ "total_count": 0,
266
+ }
267
+
268
+ async def _shutdown(self) -> None:
269
+ """Shutdown Tool agent."""
270
+ self._tool_instances.clear()
271
+ logger.info(f"ToolAgent {self.agent_id} shut down")
272
+
273
+ async def execute_task(self, task: Dict[str, Any], context: Dict[str, Any]) -> Dict[str, Any]:
274
+ """
275
+ Execute a task using tools.
276
+
277
+ Args:
278
+ task: Task specification with 'tool', 'operation', and 'parameters'
279
+ context: Execution context
280
+
281
+ Returns:
282
+ Execution result with 'output', 'tool_used', 'execution_time'
283
+
284
+ Raises:
285
+ TaskExecutionError: If task execution fails
286
+ """
287
+ start_time = datetime.utcnow()
288
+
289
+ try:
290
+ # Extract tool and operation
291
+ tool_name = task.get("tool")
292
+ operation = task.get("operation")
293
+ parameters = task.get("parameters", {})
294
+
295
+ if not tool_name:
296
+ raise TaskExecutionError("Task must contain 'tool' field", agent_id=self.agent_id)
297
+
298
+ # Check tool access
299
+ if not self._available_tools or tool_name not in self._available_tools:
300
+ raise ToolAccessDeniedError(self.agent_id, tool_name)
301
+
302
+ # Transition to busy state
303
+ self._transition_state(self.state.__class__.BUSY)
304
+ self._current_task_id = task.get("task_id")
305
+
306
+ # Execute tool
307
+ result = await self._execute_tool(tool_name, operation, parameters)
308
+
309
+ # Calculate execution time
310
+ execution_time = (datetime.utcnow() - start_time).total_seconds()
311
+
312
+ # Update metrics
313
+ self.update_metrics(
314
+ execution_time=execution_time,
315
+ success=True,
316
+ tool_calls=1,
317
+ )
318
+
319
+ # Update tool usage stats
320
+ self._update_tool_stats(tool_name, success=True)
321
+
322
+ # Transition back to active
323
+ self._transition_state(self.state.__class__.ACTIVE)
324
+ self._current_task_id = None
325
+ self.last_active_at = datetime.utcnow()
326
+
327
+ return {
328
+ "success": True,
329
+ "output": result,
330
+ "tool_used": tool_name,
331
+ "operation": operation,
332
+ "execution_time": execution_time,
333
+ "timestamp": datetime.utcnow().isoformat(),
334
+ }
335
+
336
+ except Exception as e:
337
+ logger.error(f"Task execution failed for {self.agent_id}: {e}")
338
+
339
+ # Update metrics for failure
340
+ execution_time = (datetime.utcnow() - start_time).total_seconds()
341
+ self.update_metrics(execution_time=execution_time, success=False)
342
+
343
+ # Update tool stats if tool was specified
344
+ if tool_name:
345
+ self._update_tool_stats(tool_name, success=False)
346
+
347
+ # Transition to error state
348
+ self._transition_state(self.state.__class__.ERROR)
349
+ self._current_task_id = None
350
+
351
+ raise TaskExecutionError(
352
+ f"Task execution failed: {str(e)}",
353
+ agent_id=self.agent_id,
354
+ task_id=task.get("task_id"),
355
+ )
356
+
357
+ async def process_message(self, message: str, sender_id: Optional[str] = None) -> Dict[str, Any]:
358
+ """
359
+ Process an incoming message.
360
+
361
+ For ToolAgent, this is limited - it's designed for direct tool execution.
362
+
363
+ Args:
364
+ message: Message content
365
+ sender_id: Optional sender identifier
366
+
367
+ Returns:
368
+ Response dictionary
369
+ """
370
+ available_tools_str = ", ".join(self._available_tools) if self._available_tools else "none"
371
+ return {
372
+ "response": (f"ToolAgent {self.name} received message but requires explicit tool tasks. " f"Available tools: {available_tools_str}"),
373
+ "available_tools": self._available_tools or [],
374
+ }
375
+
376
+ async def _execute_tool(
377
+ self,
378
+ tool_name: str,
379
+ operation: Optional[str],
380
+ parameters: Dict[str, Any],
381
+ ) -> Any:
382
+ """
383
+ Execute a tool operation.
384
+
385
+ Args:
386
+ tool_name: Tool name
387
+ operation: Operation name (optional for tools with single operation)
388
+ parameters: Operation parameters
389
+
390
+ Returns:
391
+ Tool execution result
392
+ """
393
+ tool = self._tool_instances.get(tool_name)
394
+ if not tool:
395
+ raise ValueError(f"Tool {tool_name} not loaded")
396
+
397
+ # Execute tool
398
+ if operation:
399
+ result = await tool.run_async(operation, **parameters)
400
+ else:
401
+ # If no operation specified, try to call the tool directly
402
+ if hasattr(tool, "run_async"):
403
+ result = await tool.run_async(**parameters)
404
+ else:
405
+ raise ValueError(f"Tool {tool_name} requires operation to be specified")
406
+
407
+ return result
408
+
409
+ def _update_tool_stats(self, tool_name: str, success: bool) -> None:
410
+ """Update tool usage statistics."""
411
+ if tool_name not in self._tool_usage_stats:
412
+ self._tool_usage_stats[tool_name] = {
413
+ "success_count": 0,
414
+ "failure_count": 0,
415
+ "total_count": 0,
416
+ }
417
+
418
+ stats = self._tool_usage_stats[tool_name]
419
+ stats["total_count"] += 1
420
+ if success:
421
+ stats["success_count"] += 1
422
+ else:
423
+ stats["failure_count"] += 1
424
+
425
+ def get_tool_stats(self) -> Dict[str, Dict[str, int]]:
426
+ """Get tool usage statistics."""
427
+ return self._tool_usage_stats.copy()
428
+
429
+ def get_available_tools(self) -> List[str]:
430
+ """Get list of available tools."""
431
+ return self._available_tools.copy() if self._available_tools else []
432
+
433
+ @classmethod
434
+ def from_dict(cls, data: Dict[str, Any]) -> "ToolAgent":
435
+ """
436
+ Deserialize ToolAgent from dictionary.
437
+
438
+ Args:
439
+ data: Dictionary representation
440
+
441
+ Returns:
442
+ ToolAgent instance
443
+ """
444
+ raise NotImplementedError("ToolAgent.from_dict not fully implemented yet")
@@ -0,0 +1,15 @@
1
+ """
2
+ Tool Integration
3
+
4
+ Tool schema generation and integration with AIECS tools.
5
+ """
6
+
7
+ from .schema_generator import (
8
+ ToolSchemaGenerator,
9
+ generate_tool_schema,
10
+ )
11
+
12
+ __all__ = [
13
+ "ToolSchemaGenerator",
14
+ "generate_tool_schema",
15
+ ]