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
@@ -2,22 +2,30 @@ import json
2
2
  import asyncio
3
3
  import threading
4
4
  import time
5
- from typing import Any, Callable, Dict, List, Optional, Tuple
5
+ from typing import Any, Callable, Dict, Optional, MutableMapping
6
6
  from cachetools import LRUCache
7
7
  from contextlib import contextmanager
8
8
  import logging
9
- from tenacity import retry, stop_after_attempt, wait_exponential, after_log
9
+ from tenacity import retry, stop_after_attempt, wait_exponential
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
13
+
13
14
  class ExecutionUtils:
14
15
  """
15
16
  Provides common utility set for execution layer, including caching and retry logic.
16
17
  """
17
- def __init__(self, cache_size: int = 100, cache_ttl: int = 3600, retry_attempts: int = 3, retry_backoff: float = 1.0):
18
+
19
+ def __init__(
20
+ self,
21
+ cache_size: int = 100,
22
+ cache_ttl: int = 3600,
23
+ retry_attempts: int = 3,
24
+ retry_backoff: float = 1.0,
25
+ ):
18
26
  """
19
27
  Initialize execution utility class.
20
-
28
+
21
29
  Args:
22
30
  cache_size (int): Maximum number of cache entries
23
31
  cache_ttl (int): Cache time-to-live (seconds)
@@ -28,30 +36,37 @@ class ExecutionUtils:
28
36
  self.cache_ttl = cache_ttl
29
37
  self.retry_attempts = retry_attempts
30
38
  self.retry_backoff = retry_backoff
31
- self._cache = LRUCache(maxsize=self.cache_size) if cache_size > 0 else None
39
+ self._cache: Optional[MutableMapping[str, Any]] = LRUCache(maxsize=self.cache_size) if cache_size > 0 else None
32
40
  self._cache_lock = threading.Lock()
33
41
  self._cache_ttl_dict: Dict[str, float] = {}
34
-
35
- def generate_cache_key(self, func_name: str, user_id: str, task_id: str, args: tuple, kwargs: Dict[str, Any]) -> str:
42
+
43
+ def generate_cache_key(
44
+ self,
45
+ func_name: str,
46
+ user_id: str,
47
+ task_id: str,
48
+ args: tuple,
49
+ kwargs: Dict[str, Any],
50
+ ) -> str:
36
51
  """
37
52
  Generate context-based cache key including user ID, task ID, function name and parameters.
38
-
53
+
39
54
  Args:
40
55
  func_name (str): Function name
41
56
  user_id (str): User ID
42
57
  task_id (str): Task ID
43
58
  args (tuple): Positional arguments
44
59
  kwargs (Dict[str, Any]): Keyword arguments
45
-
60
+
46
61
  Returns:
47
62
  str: Cache key
48
63
  """
49
64
  key_dict = {
50
- 'func': func_name,
51
- 'user_id': user_id,
52
- 'task_id': task_id,
53
- 'args': args,
54
- 'kwargs': {k: v for k, v in kwargs.items() if k != 'self'}
65
+ "func": func_name,
66
+ "user_id": user_id,
67
+ "task_id": task_id,
68
+ "args": args,
69
+ "kwargs": {k: v for k, v in kwargs.items() if k != "self"},
55
70
  }
56
71
  try:
57
72
  key_str = json.dumps(key_dict, sort_keys=True)
@@ -62,14 +77,14 @@ class ExecutionUtils:
62
77
  def get_from_cache(self, cache_key: str) -> Optional[Any]:
63
78
  """
64
79
  Get result from cache if it exists and is not expired.
65
-
80
+
66
81
  Args:
67
82
  cache_key (str): Cache key
68
-
83
+
69
84
  Returns:
70
85
  Optional[Any]: Cached result or None
71
86
  """
72
- if not self._cache:
87
+ if self._cache is None:
73
88
  return None
74
89
  with self._cache_lock:
75
90
  if cache_key in self._cache:
@@ -83,13 +98,13 @@ class ExecutionUtils:
83
98
  def add_to_cache(self, cache_key: str, result: Any, ttl: Optional[int] = None) -> None:
84
99
  """
85
100
  Add result to cache with optional time-to-live setting.
86
-
101
+
87
102
  Args:
88
103
  cache_key (str): Cache key
89
104
  result (Any): Cached result
90
105
  ttl (Optional[int]): Time-to-live (seconds)
91
106
  """
92
- if not self._cache:
107
+ if self._cache is None:
93
108
  return
94
109
  with self._cache_lock:
95
110
  self._cache[cache_key] = result
@@ -100,36 +115,40 @@ class ExecutionUtils:
100
115
  def create_retry_strategy(self, metric_name: Optional[str] = None) -> Callable:
101
116
  """
102
117
  Create retry strategy for execution operations.
103
-
118
+
104
119
  Args:
105
120
  metric_name (Optional[str]): Metric name for logging
106
-
121
+
107
122
  Returns:
108
123
  Callable: Retry decorator
109
124
  """
125
+
110
126
  def after_retry(retry_state):
111
127
  logger.warning(f"Retry {retry_state.attempt_number}/{self.retry_attempts} for {metric_name or 'operation'} after {retry_state.idle_for}s: {retry_state.outcome.exception()}")
112
-
128
+
113
129
  return retry(
114
130
  stop=stop_after_attempt(self.retry_attempts),
115
131
  wait=wait_exponential(multiplier=self.retry_backoff, min=1, max=10),
116
- after=after_retry
132
+ after=after_retry,
117
133
  )
118
134
 
119
135
  @contextmanager
120
136
  def timeout_context(self, seconds: int):
121
137
  """
122
138
  Context manager for enforcing operation timeout.
123
-
139
+
124
140
  Args:
125
141
  seconds (int): Timeout duration (seconds)
126
-
142
+
127
143
  Raises:
128
144
  TimeoutError: If operation exceeds timeout duration
129
145
  """
130
146
  loop = asyncio.get_event_loop()
131
- future = asyncio.Future()
132
- handle = loop.call_later(seconds, lambda: future.set_exception(TimeoutError(f"Operation timed out after {seconds}s")))
147
+ future: asyncio.Future[None] = asyncio.Future()
148
+ handle = loop.call_later(
149
+ seconds,
150
+ lambda: future.set_exception(TimeoutError(f"Operation timed out after {seconds}s")),
151
+ )
133
152
  try:
134
153
  yield future
135
154
  finally:
@@ -138,16 +157,16 @@ class ExecutionUtils:
138
157
  async def execute_with_retry_and_timeout(self, func: Callable, timeout: int, *args, **kwargs) -> Any:
139
158
  """
140
159
  Execute operation with retry and timeout mechanism.
141
-
160
+
142
161
  Args:
143
162
  func (Callable): Function to execute
144
163
  timeout (int): Timeout duration (seconds)
145
164
  *args: Positional arguments
146
165
  **kwargs: Keyword arguments
147
-
166
+
148
167
  Returns:
149
168
  Any: Operation result
150
-
169
+
151
170
  Raises:
152
171
  OperationError: If all retry attempts fail
153
172
  """
@@ -155,4 +174,4 @@ class ExecutionUtils:
155
174
  try:
156
175
  return await asyncio.wait_for(retry_strategy(func)(*args, **kwargs), timeout=timeout)
157
176
  except asyncio.TimeoutError:
158
- raise TimeoutError(f"Operation timed out after {timeout}s")
177
+ raise TimeoutError(f"Operation timed out after {timeout}s")
@@ -1,6 +1,7 @@
1
1
  import yaml
2
2
  import os
3
3
 
4
+
4
5
  def get_prompt(mode: str, service: str) -> str:
5
6
  """
6
7
  Load the prompt for the specified service from services/{mode}/prompts.yaml.
@@ -1,10 +1,11 @@
1
1
  from datetime import datetime
2
2
  from typing import Optional, Dict, Any
3
3
  import logging
4
- from ..infrastructure.persistence.redis_client import get_redis_client
4
+ from aiecs.infrastructure.persistence.redis_client import get_redis_client
5
5
 
6
6
  logger = logging.getLogger(__name__)
7
7
 
8
+
8
9
  class TokenUsageRepository:
9
10
  """Encapsulates all Redis operations related to user token usage"""
10
11
 
@@ -28,7 +29,12 @@ class TokenUsageRepository:
28
29
 
29
30
  return f"token_usage:{user_id}:{period}"
30
31
 
31
- async def increment_prompt_tokens(self, user_id: str, prompt_tokens: int, cycle_start_date: Optional[str] = None):
32
+ async def increment_prompt_tokens(
33
+ self,
34
+ user_id: str,
35
+ prompt_tokens: int,
36
+ cycle_start_date: Optional[str] = None,
37
+ ):
32
38
  """
33
39
  Increment prompt token usage for specified user
34
40
 
@@ -51,7 +57,12 @@ class TokenUsageRepository:
51
57
  logger.error(f"Failed to increment prompt tokens for user {user_id}: {e}")
52
58
  raise
53
59
 
54
- async def increment_completion_tokens(self, user_id: str, completion_tokens: int, cycle_start_date: Optional[str] = None):
60
+ async def increment_completion_tokens(
61
+ self,
62
+ user_id: str,
63
+ completion_tokens: int,
64
+ cycle_start_date: Optional[str] = None,
65
+ ):
55
66
  """
56
67
  Increment completion token usage for specified user
57
68
 
@@ -74,7 +85,12 @@ class TokenUsageRepository:
74
85
  logger.error(f"Failed to increment completion tokens for user {user_id}: {e}")
75
86
  raise
76
87
 
77
- async def increment_total_usage(self, user_id: str, total_tokens: int, cycle_start_date: Optional[str] = None):
88
+ async def increment_total_usage(
89
+ self,
90
+ user_id: str,
91
+ total_tokens: int,
92
+ cycle_start_date: Optional[str] = None,
93
+ ):
78
94
  """
79
95
  Increment total token usage for specified user
80
96
 
@@ -102,7 +118,7 @@ class TokenUsageRepository:
102
118
  user_id: str,
103
119
  prompt_tokens: int,
104
120
  completion_tokens: int,
105
- cycle_start_date: Optional[str] = None
121
+ cycle_start_date: Optional[str] = None,
106
122
  ):
107
123
  """
108
124
  Increment both prompt and completion token usage for specified user
@@ -187,7 +203,7 @@ class TokenUsageRepository:
187
203
  return {
188
204
  "prompt_tokens": 0,
189
205
  "completion_tokens": 0,
190
- "total_tokens": 0
206
+ "total_tokens": 0,
191
207
  }
192
208
 
193
209
  async def reset_usage(self, user_id: str, cycle_start_date: Optional[str] = None):
@@ -228,7 +244,7 @@ class TokenUsageRepository:
228
244
 
229
245
  try:
230
246
  client = await get_redis_client()
231
- await client.hset(redis_key, {"usage_limit": str(limit)})
247
+ await client.hset(redis_key, key="usage_limit", value=str(limit))
232
248
  logger.info(f"[Repository] Set usage limit {limit} for user '{user_id}' in key '{redis_key}'.")
233
249
  except Exception as e:
234
250
  logger.error(f"Failed to set usage limit for user {user_id}: {e}")
@@ -246,7 +262,12 @@ class TokenUsageRepository:
246
262
  Dictionary containing limit check results
247
263
  """
248
264
  if not user_id:
249
- return {"exceeded": False, "current_usage": 0, "limit": 0, "remaining": 0}
265
+ return {
266
+ "exceeded": False,
267
+ "current_usage": 0,
268
+ "limit": 0,
269
+ "remaining": 0,
270
+ }
250
271
 
251
272
  try:
252
273
  stats = await self.get_usage_stats(user_id, cycle_start_date)
@@ -258,13 +279,13 @@ class TokenUsageRepository:
258
279
  limit = int(limit_str) if limit_str else 0
259
280
 
260
281
  exceeded = limit > 0 and current_usage >= limit
261
- remaining = max(0, limit - current_usage) if limit > 0 else float('inf')
282
+ remaining = max(0, limit - current_usage) if limit > 0 else float("inf")
262
283
 
263
284
  result = {
264
285
  "exceeded": exceeded,
265
286
  "current_usage": current_usage,
266
287
  "limit": limit,
267
- "remaining": remaining
288
+ "remaining": remaining,
268
289
  }
269
290
 
270
291
  logger.debug(f"[Repository] Usage limit check for user '{user_id}': {result}")
@@ -272,7 +293,12 @@ class TokenUsageRepository:
272
293
 
273
294
  except Exception as e:
274
295
  logger.error(f"Failed to check usage limit for user {user_id}: {e}")
275
- return {"exceeded": False, "current_usage": 0, "limit": 0, "remaining": 0}
296
+ return {
297
+ "exceeded": False,
298
+ "current_usage": 0,
299
+ "limit": 0,
300
+ "remaining": 0,
301
+ }
276
302
 
277
303
 
278
304
  # Create a singleton for global application use
aiecs/ws/socket_server.py CHANGED
@@ -1,4 +1,7 @@
1
- import socketio
1
+ from typing import Any, Dict
2
+
3
+ import socketio # type: ignore[import-untyped]
4
+ from typing import Dict, Any
2
5
  from aiecs.config.config import get_settings
3
6
 
4
7
  settings = get_settings()
@@ -9,17 +12,20 @@ allowed_origins = settings.cors_allowed_origins.split(",") if hasattr(settings,
9
12
  # Allow all origins for development (more permissive)
10
13
  # In production, you should use specific origins
11
14
  # Explicitly set async_mode to 'asgi' for compatibility with uvicorn
12
- sio = socketio.AsyncServer(cors_allowed_origins="*", async_mode='asgi')
15
+ sio = socketio.AsyncServer(cors_allowed_origins="*", async_mode="asgi")
13
16
  # We no longer create a FastAPI app or combined ASGI app here
14
- # The FastAPI app will be created in main.py and the Socket.IO server will be mounted there
17
+ # The FastAPI app will be created in main.py and the Socket.IO server will
18
+ # be mounted there
15
19
 
16
20
  # Store connected clients by user ID
17
- connected_clients = {}
21
+ connected_clients: Dict[str, Any] = {}
22
+
18
23
 
19
24
  @sio.event
20
25
  async def connect(sid, environ, auth=None):
21
26
  print(f"Client connected: {sid}")
22
27
 
28
+
23
29
  @sio.event
24
30
  async def disconnect(sid):
25
31
  print(f"Client disconnected: {sid}")
@@ -27,6 +33,7 @@ async def disconnect(sid):
27
33
  if socket_id == sid:
28
34
  del connected_clients[user]
29
35
 
36
+
30
37
  @sio.event
31
38
  async def register(sid, data):
32
39
  user_id = data.get("user_id")
@@ -34,7 +41,10 @@ async def register(sid, data):
34
41
  connected_clients[user_id] = sid
35
42
  print(f"Registered user {user_id} on SID {sid}")
36
43
 
44
+
37
45
  # Send progress update to user
46
+
47
+
38
48
  async def push_progress(user_id: str, data: dict):
39
49
  sid = connected_clients.get(user_id)
40
50
  if sid:
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiecs
3
- Version: 1.0.1
3
+ Version: 1.7.6
4
4
  Summary: AI Execute Services - A middleware framework for AI-powered task execution and tool orchestration
5
5
  Author-email: AIECS Team <iretbl@gmail.com>
6
6
  License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/aiecs-team/aiecs
8
- Project-URL: Bug Tracker, https://github.com/aiecs-team/aiecs/issues
7
+ Project-URL: Homepage, https://github.com/Howmany-Zeta/AI-Execute-Services
8
+ Project-URL: Bug Tracker, https://github.com/Howmany-Zeta/AI-Execute-Services/issues
9
9
  Project-URL: Documentation, https://aiecs.readthedocs.io
10
10
  Keywords: ai,middleware,llm,orchestration,async,tools
11
11
  Classifier: Development Status :: 4 - Beta
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Framework :: FastAPI
19
19
  Classifier: Framework :: Celery
20
20
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
- Requires-Python: <3.13,>=3.10
21
+ Requires-Python: <3.13,>=3.11
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: fastapi<0.116.0,>=0.115.12
@@ -37,7 +37,12 @@ Requires-Dist: python-engineio<5.0.0,>=4.12.1
37
37
  Requires-Dist: tenacity<10.0.0,>=9.1.2
38
38
  Requires-Dist: flower<3.0.0,>=2.0.1
39
39
  Requires-Dist: openai<1.76.0,>=1.68.2
40
- Requires-Dist: google-cloud-aiplatform<2.0.0,>=1.71.1
40
+ Requires-Dist: google-cloud-aiplatform<2.0.0,>=1.80.0
41
+ Requires-Dist: google-genai<2.0.0,>=1.0.0
42
+ Requires-Dist: google-api-python-client<3.0.0,>=2.108.0
43
+ Requires-Dist: google-auth<3.0.0,>=2.25.0
44
+ Requires-Dist: google-auth-httplib2<1.0.0,>=0.2.0
45
+ Requires-Dist: google-auth-oauthlib<2.0.0,>=1.2.0
41
46
  Requires-Dist: langchain<0.4.0,>=0.3.26
42
47
  Requires-Dist: langgraph<0.6.0,>=0.5.3
43
48
  Requires-Dist: weasel==0.4.1
@@ -49,13 +54,14 @@ Requires-Dist: scipy<2.0.0,>=1.15.3
49
54
  Requires-Dist: scikit-learn<2.0.0,>=1.5.0
50
55
  Requires-Dist: statsmodels<0.15.0,>=0.14.4
51
56
  Requires-Dist: pyreadstat<2.0.0,>=1.2.9
57
+ Requires-Dist: pyarrow<22.0.0,>=21.0.0
52
58
  Requires-Dist: tabulate<0.10.0,>=0.9.0
53
59
  Requires-Dist: python-docx<2.0.0,>=1.1.2
54
60
  Requires-Dist: python-pptx<2.0.0,>=1.0.2
55
61
  Requires-Dist: openpyxl<4.0.0,>=3.1.5
56
62
  Requires-Dist: pdfplumber<0.12.0,>=0.11.7
57
63
  Requires-Dist: pdfminer-six==20250506
58
- Requires-Dist: tika<3.0.0,>=2.6.0
64
+ Requires-Dist: tika<4.0.0,>=3.1.0
59
65
  Requires-Dist: matplotlib<4.0.0,>=3.10.3
60
66
  Requires-Dist: seaborn<0.14.0,>=0.13.2
61
67
  Requires-Dist: jinja2<4.0.0,>=3.1.6
@@ -70,20 +76,35 @@ Requires-Dist: markdown<4.0,>=3.8
70
76
  Requires-Dist: bleach<7.0.0,>=6.2.0
71
77
  Requires-Dist: sqlalchemy<3.0.0,>=2.0.41
72
78
  Requires-Dist: asyncpg<1.0.0,>=0.30.0
79
+ Requires-Dist: aiosqlite<1.0.0,>=0.20.0
80
+ Requires-Dist: networkx<4.0.0,>=3.0
81
+ Requires-Dist: lark-parser<0.13.0,>=0.12.0
73
82
  Requires-Dist: prometheus-client<1.0.0,>=0.21.1
74
83
  Requires-Dist: jaeger-client<5.0.0,>=4.8.0
75
84
  Requires-Dist: opentracing<3.0.0,>=2.4.0
76
85
  Requires-Dist: psutil<8.0.0,>=7.0.0
77
86
  Provides-Extra: dev
78
- Requires-Dist: pytest>=8.3.5; extra == "dev"
79
- Requires-Dist: pytest-asyncio>=1.0.0; extra == "dev"
80
- Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
81
- Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
82
- Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
83
- Requires-Dist: black>=25.1.0; extra == "dev"
84
- Requires-Dist: flake8>=7.2.0; extra == "dev"
85
- Requires-Dist: mypy>=1.15.0; extra == "dev"
86
- Requires-Dist: bump-pydantic>=0.8.0; extra == "dev"
87
+ Requires-Dist: pytest<9.0.0,>=8.4.2; extra == "dev"
88
+ Requires-Dist: pytest-asyncio<2.0.0,>=1.2.0; extra == "dev"
89
+ Requires-Dist: pytest-cov<8.0.0,>=7.0.0; extra == "dev"
90
+ Requires-Dist: pytest-timeout<3.0.0,>=2.4.0; extra == "dev"
91
+ Requires-Dist: mypy<2.0.0,>=1.18.2; extra == "dev"
92
+ Requires-Dist: flake8<8.0.0,>=7.3.0; extra == "dev"
93
+ Requires-Dist: black<26.0.0,>=25.1.0; extra == "dev"
94
+ Requires-Dist: types-aiofiles>=25.1.0.20251011; extra == "dev"
95
+ Requires-Dist: types-cachetools>=6.2.0.20251022; extra == "dev"
96
+ Requires-Dist: types-colorama>=0.4.15.20250801; extra == "dev"
97
+ Requires-Dist: types-tqdm>=4.67.0.20250809; extra == "dev"
98
+ Requires-Dist: types-pyyaml>=6.0.12.20250915; extra == "dev"
99
+ Requires-Dist: types-opentracing>=2.4.10.20250622; extra == "dev"
100
+ Requires-Dist: types-lxml>=2025.8.25; extra == "dev"
101
+ Requires-Dist: types-bleach>=6.3.0.20251115; extra == "dev"
102
+ Provides-Extra: docs
103
+ Requires-Dist: sphinx<8.0.0,>=7.0.0; extra == "docs"
104
+ Requires-Dist: sphinx-rtd-theme<3.0.0,>=2.0.0; extra == "docs"
105
+ Requires-Dist: sphinx-autodoc-typehints<3.0.0,>=2.0.0; extra == "docs"
106
+ Requires-Dist: myst-parser<3.0.0,>=2.0.0; extra == "docs"
107
+ Requires-Dist: sphinx-copybutton<1.0.0,>=0.5.0; extra == "docs"
87
108
  Dynamic: license-file
88
109
 
89
110
  # AIECS - AI Execute Services
@@ -146,6 +167,22 @@ aiecs-fix-deps
146
167
  aiecs-patch-weasel
147
168
  ```
148
169
 
170
+ ### Container Deployment
171
+
172
+ When installing aiecs in a container (e.g., Docker), you may encounter a warning about scripts not being on PATH:
173
+
174
+ ```
175
+ WARNING: The scripts aiecs, aiecs-check-deps, ... are installed in '/tmp/.local/bin' which is not on PATH.
176
+ ```
177
+
178
+ **Quick Fix:** Add the user bin directory to PATH in your Dockerfile:
179
+
180
+ ```dockerfile
181
+ ENV PATH="${PATH}:/root/.local/bin"
182
+ ```
183
+
184
+ For detailed troubleshooting and best practices, see [Deployment Troubleshooting Guide](docs/user/DEPLOYMENT_TROUBLESHOOTING.md).
185
+
149
186
  ## Quick Start
150
187
 
151
188
  ### Basic Usage