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

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

Potentially problematic release.


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

Files changed (340) hide show
  1. aiecs/__init__.py +13 -16
  2. aiecs/__main__.py +7 -7
  3. aiecs/aiecs_client.py +269 -75
  4. aiecs/application/executors/operation_executor.py +79 -54
  5. aiecs/application/knowledge_graph/__init__.py +7 -0
  6. aiecs/application/knowledge_graph/builder/__init__.py +37 -0
  7. aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  8. aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  9. aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
  10. aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
  11. aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  12. aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  13. aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
  14. aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  15. aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
  16. aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
  17. aiecs/application/knowledge_graph/extractors/base.py +98 -0
  18. aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
  19. aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
  20. aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
  21. aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  22. aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  23. aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  24. aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  25. aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  26. aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  27. aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
  28. aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  29. aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  30. aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
  31. aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  32. aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  33. aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
  34. aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  35. aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  36. aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
  37. aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
  38. aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
  39. aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
  40. aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
  41. aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
  42. aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
  43. aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
  44. aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
  45. aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
  46. aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
  47. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
  48. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
  49. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
  50. aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
  51. aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
  52. aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
  53. aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
  54. aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
  55. aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
  56. aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
  57. aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
  58. aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
  59. aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
  60. aiecs/application/knowledge_graph/search/__init__.py +59 -0
  61. aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
  62. aiecs/application/knowledge_graph/search/reranker.py +293 -0
  63. aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
  64. aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
  65. aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
  66. aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
  67. aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
  68. aiecs/application/knowledge_graph/validators/__init__.py +13 -0
  69. aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
  70. aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
  71. aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
  72. aiecs/common/__init__.py +9 -0
  73. aiecs/common/knowledge_graph/__init__.py +17 -0
  74. aiecs/common/knowledge_graph/runnable.py +471 -0
  75. aiecs/config/__init__.py +20 -5
  76. aiecs/config/config.py +762 -31
  77. aiecs/config/graph_config.py +131 -0
  78. aiecs/config/tool_config.py +435 -0
  79. aiecs/core/__init__.py +29 -13
  80. aiecs/core/interface/__init__.py +2 -2
  81. aiecs/core/interface/execution_interface.py +22 -22
  82. aiecs/core/interface/storage_interface.py +37 -88
  83. aiecs/core/registry/__init__.py +31 -0
  84. aiecs/core/registry/service_registry.py +92 -0
  85. aiecs/domain/__init__.py +270 -1
  86. aiecs/domain/agent/__init__.py +191 -0
  87. aiecs/domain/agent/base_agent.py +3949 -0
  88. aiecs/domain/agent/exceptions.py +99 -0
  89. aiecs/domain/agent/graph_aware_mixin.py +569 -0
  90. aiecs/domain/agent/hybrid_agent.py +1731 -0
  91. aiecs/domain/agent/integration/__init__.py +29 -0
  92. aiecs/domain/agent/integration/context_compressor.py +216 -0
  93. aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
  94. aiecs/domain/agent/integration/protocols.py +281 -0
  95. aiecs/domain/agent/integration/retry_policy.py +218 -0
  96. aiecs/domain/agent/integration/role_config.py +213 -0
  97. aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
  98. aiecs/domain/agent/lifecycle.py +291 -0
  99. aiecs/domain/agent/llm_agent.py +692 -0
  100. aiecs/domain/agent/memory/__init__.py +12 -0
  101. aiecs/domain/agent/memory/conversation.py +1124 -0
  102. aiecs/domain/agent/migration/__init__.py +14 -0
  103. aiecs/domain/agent/migration/conversion.py +163 -0
  104. aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
  105. aiecs/domain/agent/models.py +894 -0
  106. aiecs/domain/agent/observability.py +479 -0
  107. aiecs/domain/agent/persistence.py +449 -0
  108. aiecs/domain/agent/prompts/__init__.py +29 -0
  109. aiecs/domain/agent/prompts/builder.py +159 -0
  110. aiecs/domain/agent/prompts/formatters.py +187 -0
  111. aiecs/domain/agent/prompts/template.py +255 -0
  112. aiecs/domain/agent/registry.py +253 -0
  113. aiecs/domain/agent/tool_agent.py +444 -0
  114. aiecs/domain/agent/tools/__init__.py +15 -0
  115. aiecs/domain/agent/tools/schema_generator.py +377 -0
  116. aiecs/domain/community/__init__.py +155 -0
  117. aiecs/domain/community/agent_adapter.py +469 -0
  118. aiecs/domain/community/analytics.py +432 -0
  119. aiecs/domain/community/collaborative_workflow.py +648 -0
  120. aiecs/domain/community/communication_hub.py +634 -0
  121. aiecs/domain/community/community_builder.py +320 -0
  122. aiecs/domain/community/community_integration.py +796 -0
  123. aiecs/domain/community/community_manager.py +803 -0
  124. aiecs/domain/community/decision_engine.py +849 -0
  125. aiecs/domain/community/exceptions.py +231 -0
  126. aiecs/domain/community/models/__init__.py +33 -0
  127. aiecs/domain/community/models/community_models.py +234 -0
  128. aiecs/domain/community/resource_manager.py +461 -0
  129. aiecs/domain/community/shared_context_manager.py +589 -0
  130. aiecs/domain/context/__init__.py +40 -10
  131. aiecs/domain/context/context_engine.py +1910 -0
  132. aiecs/domain/context/conversation_models.py +87 -53
  133. aiecs/domain/context/graph_memory.py +582 -0
  134. aiecs/domain/execution/model.py +12 -4
  135. aiecs/domain/knowledge_graph/__init__.py +19 -0
  136. aiecs/domain/knowledge_graph/models/__init__.py +52 -0
  137. aiecs/domain/knowledge_graph/models/entity.py +148 -0
  138. aiecs/domain/knowledge_graph/models/evidence.py +178 -0
  139. aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
  140. aiecs/domain/knowledge_graph/models/path.py +171 -0
  141. aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
  142. aiecs/domain/knowledge_graph/models/query.py +261 -0
  143. aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
  144. aiecs/domain/knowledge_graph/models/relation.py +202 -0
  145. aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
  146. aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
  147. aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
  148. aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
  149. aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
  150. aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
  151. aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
  152. aiecs/domain/task/dsl_processor.py +172 -56
  153. aiecs/domain/task/model.py +20 -8
  154. aiecs/domain/task/task_context.py +27 -24
  155. aiecs/infrastructure/__init__.py +0 -2
  156. aiecs/infrastructure/graph_storage/__init__.py +11 -0
  157. aiecs/infrastructure/graph_storage/base.py +837 -0
  158. aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
  159. aiecs/infrastructure/graph_storage/cache.py +424 -0
  160. aiecs/infrastructure/graph_storage/distributed.py +223 -0
  161. aiecs/infrastructure/graph_storage/error_handling.py +380 -0
  162. aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
  163. aiecs/infrastructure/graph_storage/health_checks.py +378 -0
  164. aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  165. aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
  166. aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
  167. aiecs/infrastructure/graph_storage/metrics.py +344 -0
  168. aiecs/infrastructure/graph_storage/migration.py +400 -0
  169. aiecs/infrastructure/graph_storage/pagination.py +483 -0
  170. aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
  171. aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  172. aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  173. aiecs/infrastructure/graph_storage/protocols.py +76 -0
  174. aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
  175. aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
  176. aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  177. aiecs/infrastructure/graph_storage/streaming.py +487 -0
  178. aiecs/infrastructure/graph_storage/tenant.py +412 -0
  179. aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
  180. aiecs/infrastructure/messaging/websocket_manager.py +51 -35
  181. aiecs/infrastructure/monitoring/__init__.py +22 -0
  182. aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
  183. aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
  184. aiecs/infrastructure/monitoring/structured_logger.py +3 -7
  185. aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
  186. aiecs/infrastructure/persistence/__init__.py +14 -1
  187. aiecs/infrastructure/persistence/context_engine_client.py +184 -0
  188. aiecs/infrastructure/persistence/database_manager.py +67 -43
  189. aiecs/infrastructure/persistence/file_storage.py +180 -103
  190. aiecs/infrastructure/persistence/redis_client.py +74 -21
  191. aiecs/llm/__init__.py +73 -25
  192. aiecs/llm/callbacks/__init__.py +11 -0
  193. aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
  194. aiecs/llm/client_factory.py +230 -37
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +328 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  199. aiecs/llm/clients/googleai_client.py +314 -0
  200. aiecs/llm/clients/openai_client.py +158 -0
  201. aiecs/llm/clients/openai_compatible_mixin.py +367 -0
  202. aiecs/llm/clients/vertex_client.py +1186 -0
  203. aiecs/llm/clients/xai_client.py +201 -0
  204. aiecs/llm/config/__init__.py +51 -0
  205. aiecs/llm/config/config_loader.py +272 -0
  206. aiecs/llm/config/config_validator.py +206 -0
  207. aiecs/llm/config/model_config.py +143 -0
  208. aiecs/llm/protocols.py +149 -0
  209. aiecs/llm/utils/__init__.py +10 -0
  210. aiecs/llm/utils/validate_config.py +89 -0
  211. aiecs/main.py +140 -121
  212. aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
  213. aiecs/scripts/aid/__init__.py +19 -0
  214. aiecs/scripts/aid/module_checker.py +499 -0
  215. aiecs/scripts/aid/version_manager.py +235 -0
  216. aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
  217. aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
  218. aiecs/scripts/dependance_check/__init__.py +15 -0
  219. aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  220. aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
  221. aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
  222. aiecs/scripts/dependance_patch/__init__.py +7 -0
  223. aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
  224. aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
  225. aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
  226. aiecs/scripts/knowledge_graph/__init__.py +3 -0
  227. aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  228. aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  229. aiecs/scripts/tools_develop/README.md +671 -0
  230. aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  231. aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  232. aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
  233. aiecs/scripts/tools_develop/__init__.py +21 -0
  234. aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  235. aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
  236. aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  237. aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  238. aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
  239. aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  240. aiecs/scripts/tools_develop/verify_tools.py +352 -0
  241. aiecs/tasks/__init__.py +0 -1
  242. aiecs/tasks/worker.py +115 -47
  243. aiecs/tools/__init__.py +194 -72
  244. aiecs/tools/apisource/__init__.py +99 -0
  245. aiecs/tools/apisource/intelligence/__init__.py +19 -0
  246. aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
  247. aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
  248. aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
  249. aiecs/tools/apisource/monitoring/__init__.py +9 -0
  250. aiecs/tools/apisource/monitoring/metrics.py +330 -0
  251. aiecs/tools/apisource/providers/__init__.py +112 -0
  252. aiecs/tools/apisource/providers/base.py +671 -0
  253. aiecs/tools/apisource/providers/census.py +397 -0
  254. aiecs/tools/apisource/providers/fred.py +535 -0
  255. aiecs/tools/apisource/providers/newsapi.py +409 -0
  256. aiecs/tools/apisource/providers/worldbank.py +352 -0
  257. aiecs/tools/apisource/reliability/__init__.py +12 -0
  258. aiecs/tools/apisource/reliability/error_handler.py +363 -0
  259. aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
  260. aiecs/tools/apisource/tool.py +832 -0
  261. aiecs/tools/apisource/utils/__init__.py +9 -0
  262. aiecs/tools/apisource/utils/validators.py +334 -0
  263. aiecs/tools/base_tool.py +415 -21
  264. aiecs/tools/docs/__init__.py +121 -0
  265. aiecs/tools/docs/ai_document_orchestrator.py +607 -0
  266. aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
  267. aiecs/tools/docs/content_insertion_tool.py +1320 -0
  268. aiecs/tools/docs/document_creator_tool.py +1464 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1016 -0
  271. aiecs/tools/docs/document_writer_tool.py +2008 -0
  272. aiecs/tools/knowledge_graph/__init__.py +17 -0
  273. aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
  274. aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
  275. aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
  276. aiecs/tools/langchain_adapter.py +300 -138
  277. aiecs/tools/schema_generator.py +455 -0
  278. aiecs/tools/search_tool/__init__.py +100 -0
  279. aiecs/tools/search_tool/analyzers.py +581 -0
  280. aiecs/tools/search_tool/cache.py +264 -0
  281. aiecs/tools/search_tool/constants.py +128 -0
  282. aiecs/tools/search_tool/context.py +224 -0
  283. aiecs/tools/search_tool/core.py +778 -0
  284. aiecs/tools/search_tool/deduplicator.py +119 -0
  285. aiecs/tools/search_tool/error_handler.py +242 -0
  286. aiecs/tools/search_tool/metrics.py +343 -0
  287. aiecs/tools/search_tool/rate_limiter.py +172 -0
  288. aiecs/tools/search_tool/schemas.py +275 -0
  289. aiecs/tools/statistics/__init__.py +80 -0
  290. aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
  291. aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
  292. aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
  293. aiecs/tools/statistics/data_loader_tool.py +555 -0
  294. aiecs/tools/statistics/data_profiler_tool.py +638 -0
  295. aiecs/tools/statistics/data_transformer_tool.py +580 -0
  296. aiecs/tools/statistics/data_visualizer_tool.py +498 -0
  297. aiecs/tools/statistics/model_trainer_tool.py +507 -0
  298. aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
  299. aiecs/tools/task_tools/__init__.py +49 -36
  300. aiecs/tools/task_tools/chart_tool.py +200 -184
  301. aiecs/tools/task_tools/classfire_tool.py +268 -267
  302. aiecs/tools/task_tools/image_tool.py +220 -141
  303. aiecs/tools/task_tools/office_tool.py +226 -146
  304. aiecs/tools/task_tools/pandas_tool.py +477 -121
  305. aiecs/tools/task_tools/report_tool.py +390 -142
  306. aiecs/tools/task_tools/research_tool.py +149 -79
  307. aiecs/tools/task_tools/scraper_tool.py +339 -145
  308. aiecs/tools/task_tools/stats_tool.py +448 -209
  309. aiecs/tools/temp_file_manager.py +26 -24
  310. aiecs/tools/tool_executor/__init__.py +18 -16
  311. aiecs/tools/tool_executor/tool_executor.py +364 -52
  312. aiecs/utils/LLM_output_structor.py +74 -48
  313. aiecs/utils/__init__.py +14 -3
  314. aiecs/utils/base_callback.py +0 -3
  315. aiecs/utils/cache_provider.py +696 -0
  316. aiecs/utils/execution_utils.py +50 -31
  317. aiecs/utils/prompt_loader.py +1 -0
  318. aiecs/utils/token_usage_repository.py +37 -11
  319. aiecs/ws/socket_server.py +14 -4
  320. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
  321. aiecs-1.7.17.dist-info/RECORD +337 -0
  322. aiecs-1.7.17.dist-info/entry_points.txt +13 -0
  323. aiecs/config/registry.py +0 -19
  324. aiecs/domain/context/content_engine.py +0 -982
  325. aiecs/llm/base_client.py +0 -99
  326. aiecs/llm/openai_client.py +0 -125
  327. aiecs/llm/vertex_client.py +0 -186
  328. aiecs/llm/xai_client.py +0 -184
  329. aiecs/scripts/dependency_checker.py +0 -857
  330. aiecs/scripts/quick_dependency_check.py +0 -269
  331. aiecs/tools/task_tools/search_api.py +0 -7
  332. aiecs-1.0.1.dist-info/RECORD +0 -90
  333. aiecs-1.0.1.dist-info/entry_points.txt +0 -7
  334. /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
  335. /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
  336. /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
  337. /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
  338. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
aiecs/tools/__init__.py CHANGED
@@ -5,190 +5,312 @@ import inspect
5
5
  import logging
6
6
  import os
7
7
  import pkgutil
8
- from typing import Any, Dict, List, Optional, Type
8
+ from typing import Dict, Any
9
9
 
10
10
  from aiecs.tools.base_tool import BaseTool
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
14
- # 全局工具注册表
15
- TOOL_REGISTRY = {}
16
- TOOL_CLASSES = {}
17
- TOOL_CONFIGS = {}
14
+ # Global tool registry
15
+ TOOL_REGISTRY: Dict[str, Any] = {}
16
+ TOOL_CLASSES: Dict[str, Any] = {}
17
+ # TOOL_CONFIGS: Legacy configuration dictionary.
18
+ # Values here are passed as explicit config to tools (highest precedence).
19
+ # Prefer using YAML config files (config/tools/{tool_name}.yaml) or .env files instead.
20
+ TOOL_CONFIGS: Dict[str, Any] = {}
21
+
18
22
 
19
23
  def register_tool(name):
20
24
  """
21
- 装饰器,用于注册工具类
25
+ Decorator for registering tool classes
22
26
 
23
27
  Args:
24
- name: 工具名称
28
+ name: Tool name
25
29
 
26
30
  Returns:
27
- 装饰后的类
31
+ Decorated class
28
32
  """
33
+
29
34
  def wrapper(cls):
30
- # 存储工具类,但不立即实例化
35
+ # Store tool class but don't instantiate immediately
31
36
  TOOL_CLASSES[name] = cls
32
- # 兼容旧版本:如果类继承自BaseTool,则不立即实例化
37
+ # Backward compatibility: if class inherits from BaseTool, don't
38
+ # instantiate immediately
33
39
  if not issubclass(cls, BaseTool):
34
40
  TOOL_REGISTRY[name] = cls()
35
41
  return cls
42
+
36
43
  return wrapper
37
44
 
45
+
38
46
  def get_tool(name):
39
47
  """
40
- 获取工具实例
48
+ Get tool instance
41
49
 
42
50
  Args:
43
- name: 工具名称
51
+ name: Tool name
44
52
 
45
53
  Returns:
46
- 工具实例
54
+ Tool instance
47
55
 
48
56
  Raises:
49
- ValueError: 如果工具未注册
57
+ ValueError: If tool is not registered
50
58
  """
51
- if name not in TOOL_REGISTRY and name in TOOL_CLASSES:
52
- # 延迟实例化BaseTool子类
53
- tool_class = TOOL_CLASSES[name]
54
- config = TOOL_CONFIGS.get(name, {})
55
- TOOL_REGISTRY[name] = tool_class(config)
59
+ # Check if placeholder needs to be replaced or lazy instantiation is needed
60
+ if name in TOOL_CLASSES:
61
+ # If TOOL_REGISTRY contains placeholder or doesn't exist, instantiate
62
+ # real tool class
63
+ current_tool = TOOL_REGISTRY.get(name)
64
+ is_placeholder = getattr(current_tool, "is_placeholder", False)
65
+
66
+ if current_tool is None or is_placeholder:
67
+ # Lazy instantiation of BaseTool subclasses, replace placeholder
68
+ # Configuration is loaded automatically by BaseTool using ToolConfigLoader:
69
+ # 1. TOOL_CONFIGS values (explicit config, highest precedence)
70
+ # 2. YAML config files (config/tools/{tool_name}.yaml or config/tools.yaml)
71
+ # 3. Environment variables (via dotenv from .env files)
72
+ # 4. Tool defaults (lowest priority)
73
+ tool_class = TOOL_CLASSES[name]
74
+ config = TOOL_CONFIGS.get(name, {})
75
+ # Pass tool name to BaseTool for config file discovery (used for YAML file lookup)
76
+ # Check if tool class accepts tool_name parameter (for backward compatibility)
77
+ sig = inspect.signature(tool_class.__init__)
78
+ if "tool_name" in sig.parameters or any(
79
+ p.kind == inspect.Parameter.VAR_KEYWORD for p in sig.parameters.values()
80
+ ):
81
+ TOOL_REGISTRY[name] = tool_class(config=config, tool_name=name)
82
+ else:
83
+ # Tool class doesn't accept tool_name, only pass config
84
+ TOOL_REGISTRY[name] = tool_class(config=config)
85
+ logger.debug(f"Instantiated tool '{name}' from class {tool_class.__name__}")
56
86
 
57
87
  if name not in TOOL_REGISTRY:
58
88
  raise ValueError(f"Tool '{name}' is not registered")
59
89
 
60
90
  return TOOL_REGISTRY[name]
61
91
 
92
+
62
93
  def list_tools():
63
94
  """
64
- 列出所有已注册的工具
95
+ List all registered tools
65
96
 
66
97
  Returns:
67
- 工具信息字典列表
98
+ List of tool information dictionaries
68
99
  """
69
100
  tools = []
70
101
  all_tool_names = list(set(list(TOOL_REGISTRY.keys()) + list(TOOL_CLASSES.keys())))
71
-
102
+
72
103
  for tool_name in all_tool_names:
73
104
  try:
74
- # 优先使用已有实例的信息
105
+ # Prefer using information from existing instances
75
106
  if tool_name in TOOL_REGISTRY:
76
107
  tool_instance = TOOL_REGISTRY[tool_name]
77
108
  tool_info = {
78
109
  "name": tool_name,
79
- "description": getattr(tool_instance, 'description', f'{tool_name} tool'),
80
- "category": getattr(tool_instance, 'category', 'general'),
110
+ "description": getattr(tool_instance, "description", f"{tool_name} tool"),
111
+ "category": getattr(tool_instance, "category", "general"),
81
112
  "class_name": tool_instance.__class__.__name__,
82
113
  "module": tool_instance.__class__.__module__,
83
- "status": "loaded"
114
+ "status": "loaded",
84
115
  }
85
116
  elif tool_name in TOOL_CLASSES:
86
- # 从类定义获取信息,但不实例化
117
+ # Get information from class definition but don't instantiate
87
118
  tool_class = TOOL_CLASSES[tool_name]
88
119
  tool_info = {
89
120
  "name": tool_name,
90
- "description": getattr(tool_class, 'description', f'{tool_name} tool'),
91
- "category": getattr(tool_class, 'category', 'general'),
121
+ "description": getattr(tool_class, "description", f"{tool_name} tool"),
122
+ "category": getattr(tool_class, "category", "general"),
92
123
  "class_name": tool_class.__name__,
93
124
  "module": tool_class.__module__,
94
- "status": "available"
125
+ "status": "available",
95
126
  }
96
127
  else:
97
128
  continue
98
-
129
+
99
130
  tools.append(tool_info)
100
-
131
+
101
132
  except Exception as e:
102
133
  logger.warning(f"Failed to get info for tool {tool_name}: {e}")
103
- # 提供基本信息
104
- tools.append({
105
- "name": tool_name,
106
- "description": f"{tool_name} (info unavailable)",
107
- "category": "unknown",
108
- "class_name": "Unknown",
109
- "module": "unknown",
110
- "status": "error"
111
- })
112
-
134
+ # Provide basic information
135
+ tools.append(
136
+ {
137
+ "name": tool_name,
138
+ "description": f"{tool_name} (info unavailable)",
139
+ "category": "unknown",
140
+ "class_name": "Unknown",
141
+ "module": "unknown",
142
+ "status": "error",
143
+ }
144
+ )
145
+
113
146
  return tools
114
147
 
148
+
115
149
  def discover_tools(package_path: str = "aiecs.tools"):
116
150
  """
117
- 发现并注册包中的所有工具
151
+ Discover and register all tools in the package
118
152
 
119
153
  Args:
120
- package_path: 要搜索的包路径
154
+ package_path: Package path to search
121
155
  """
122
156
  package = importlib.import_module(package_path)
157
+ if package.__file__ is None:
158
+ return
123
159
  package_dir = os.path.dirname(package.__file__)
124
160
 
125
161
  for _, module_name, is_pkg in pkgutil.iter_modules([package_dir]):
126
162
  if is_pkg:
127
- # 递归搜索子包中的工具
163
+ # Recursively search for tools in subpackages
128
164
  discover_tools(f"{package_path}.{module_name}")
129
165
  else:
130
- # 导入模块
166
+ # Import module
131
167
  try:
132
168
  importlib.import_module(f"{package_path}.{module_name}")
133
169
  except Exception as e:
134
170
  logger.error(f"Error importing module {module_name}: {e}")
135
171
 
136
- # 导入基础工具类供继承使用
137
- from aiecs.tools.base_tool import BaseTool
138
172
 
139
173
  # Lazy loading strategy: don't import all tools at package init
140
174
  # Tools will be loaded on-demand when requested
141
175
 
176
+
142
177
  def _ensure_task_tools_available():
143
178
  """Ensure task_tools module is available for lazy loading"""
144
179
  try:
145
- from . import task_tools
146
180
  return True
147
181
  except ImportError as e:
148
182
  logger.error(f"Failed to import task_tools: {e}")
149
183
  return False
150
184
 
185
+
186
+ def _auto_discover_tools():
187
+ """Automatically discover all tools by scanning tool directories"""
188
+ import re
189
+
190
+ # Define tool directories and their categories
191
+ tool_dirs = [
192
+ ("task_tools", "task"),
193
+ ("docs", "docs"),
194
+ ("statistics", "statistics"),
195
+ ("search_tool", "task"), # Enhanced search tool
196
+ ("api_sources", "task"), # API data sources (legacy)
197
+ ("apisource", "task"), # API Source Tool (new modular version)
198
+ ]
199
+
200
+ discovered_tools = []
201
+
202
+ for dir_name, category in tool_dirs:
203
+ dir_path = os.path.join(os.path.dirname(__file__), dir_name)
204
+ if not os.path.exists(dir_path):
205
+ continue
206
+
207
+ # Check if this is a package (has __init__.py) or a directory of
208
+ # modules
209
+ init_file = os.path.join(dir_path, "__init__.py")
210
+ files_to_scan = []
211
+
212
+ if os.path.isfile(init_file):
213
+ # Scan __init__.py for package-level registrations
214
+ files_to_scan.append(("__init__.py", init_file))
215
+
216
+ # Scan all other Python files in the directory
217
+ for filename in os.listdir(dir_path):
218
+ if filename.endswith(".py") and not filename.startswith("__"):
219
+ file_path = os.path.join(dir_path, filename)
220
+ files_to_scan.append((filename, file_path))
221
+
222
+ # Process all files
223
+ for filename, file_path in files_to_scan:
224
+ try:
225
+ with open(file_path, "r", encoding="utf-8") as f:
226
+ content = f.read()
227
+
228
+ # Find @register_tool decorators (two patterns)
229
+ # Pattern 1: @register_tool("name") decorator syntax
230
+ decorator_pattern = r'@register_tool\([\'"]([^\'"]+)[\'"]\)'
231
+ decorator_matches = re.findall(decorator_pattern, content)
232
+
233
+ # Pattern 2: register_tool("name")(ClassName) function call
234
+ # syntax
235
+ function_pattern = r'register_tool\([\'"]([^\'"]+)[\'"]\)\([A-Za-z_][A-Za-z0-9_]*\)'
236
+ function_matches = re.findall(function_pattern, content)
237
+
238
+ # Combine all matches
239
+ all_matches = list(set(decorator_matches + function_matches))
240
+
241
+ for tool_name in all_matches:
242
+ # Try to extract description from class docstring or
243
+ # module docstring
244
+ description = f"{tool_name} tool"
245
+
246
+ # Method 1: Look for class definition after the
247
+ # decorator
248
+ class_pattern = rf'@register_tool\([\'"]({tool_name})[\'"]\)\s*class\s+\w+.*?"""(.*?)"""'
249
+ class_match = re.search(class_pattern, content, re.DOTALL)
250
+ if class_match:
251
+ doc = class_match.group(2).strip()
252
+ # Get first line of docstring
253
+ first_line = doc.split("\n")[0].strip()
254
+ if first_line and len(first_line) < 200:
255
+ description = first_line
256
+
257
+ # Method 2: For __init__.py files, try to extract from
258
+ # module docstring
259
+ if not class_match and filename == "__init__.py":
260
+ module_doc_pattern = r'^"""(.*?)"""'
261
+ module_doc_match = re.search(
262
+ module_doc_pattern,
263
+ content,
264
+ re.DOTALL | re.MULTILINE,
265
+ )
266
+ if module_doc_match:
267
+ doc = module_doc_match.group(1).strip()
268
+ # Get first non-empty line
269
+ for line in doc.split("\n"):
270
+ line = line.strip()
271
+ if line and not line.startswith("#") and len(line) < 200:
272
+ description = line
273
+ break
274
+
275
+ discovered_tools.append((tool_name, description, category))
276
+ except Exception as e:
277
+ logger.debug(f"Error scanning {filename}: {e}")
278
+
279
+ return discovered_tools
280
+
281
+
151
282
  def _register_known_tools():
152
283
  """Register known tools without importing heavy dependencies"""
153
- # Pre-register tool classes for discovery without importing modules
154
- # This allows list_tools() to work before actual tool loading
155
-
156
- known_tools = [
157
- ("chart_tool", "Chart and visualization operations"),
158
- ("classfire_tool", "Text classification and keyword extraction"),
159
- ("image_tool", "Image processing and OCR operations"),
160
- ("office_tool", "Office document processing"),
161
- ("pandas_tool", "Data analysis and manipulation"),
162
- ("report_tool", "Report generation and formatting"),
163
- ("research_tool", "Research and information gathering"),
164
- ("scraper_tool", "Web scraping and data extraction"),
165
- ("search_api", "Search API integration"),
166
- ("stats_tool", "Statistical analysis and computation")
167
- ]
168
-
284
+ # Automatically discover all tools
285
+ discovered_tools = _auto_discover_tools()
286
+
287
+ logger.info(f"Auto-discovered {len(discovered_tools)} tools")
288
+
169
289
  # Register as placeholder until actually loaded
170
- for tool_name, description in known_tools:
290
+ for tool_info in discovered_tools:
291
+ tool_name, description, category = tool_info
171
292
  if tool_name not in TOOL_REGISTRY and tool_name not in TOOL_CLASSES:
172
293
  # Create a placeholder class for discovery
173
294
  class ToolPlaceholder:
174
- def __init__(self, name, desc):
295
+ def __init__(self, name, desc, cat):
175
296
  self.name = name
176
297
  self.description = desc
177
- self.category = "task"
298
+ self.category = cat
178
299
  self.is_placeholder = True
179
-
180
- TOOL_REGISTRY[tool_name] = ToolPlaceholder(tool_name, description)
300
+
301
+ TOOL_REGISTRY[tool_name] = ToolPlaceholder(tool_name, description, category)
302
+
181
303
 
182
304
  # Register known tools for discovery
183
305
  _register_known_tools()
184
306
 
185
307
  try:
186
- from . import db_api
308
+ pass
187
309
  except ImportError:
188
310
  pass
189
311
 
190
312
  try:
191
- from . import vector_search
313
+ pass
192
314
  except ImportError:
193
315
  pass
194
316
 
@@ -0,0 +1,99 @@
1
+ """
2
+ APISource Tool - Unified API Data Source Interface
3
+
4
+ A comprehensive tool for querying external API data sources with advanced features:
5
+ - Multi-provider support (FRED, World Bank, News API, Census Bureau)
6
+ - Intelligent query understanding and parameter enhancement
7
+ - Cross-provider data fusion
8
+ - Automatic fallback and retry logic
9
+ - Advanced search with relevance ranking
10
+ - Comprehensive metrics and health monitoring
11
+
12
+ Usage:
13
+ from aiecs.tools.apisource import APISourceTool
14
+
15
+ tool = APISourceTool({
16
+ 'fred_api_key': 'YOUR_KEY',
17
+ 'enable_fallback': True,
18
+ 'enable_query_enhancement': True
19
+ })
20
+
21
+ # Query with natural language
22
+ result = tool.query(
23
+ provider='fred',
24
+ operation='get_series_observations',
25
+ params={'series_id': 'GDP'},
26
+ query_text="Get GDP data for last 5 years"
27
+ )
28
+
29
+ # Multi-provider search with fusion
30
+ results = tool.search(
31
+ query="unemployment trends",
32
+ enable_fusion=True
33
+ )
34
+ """
35
+
36
+ from aiecs.tools.apisource.tool import (
37
+ APISourceTool,
38
+ APISourceError,
39
+ ProviderNotFoundError,
40
+ APIRateLimitError,
41
+ APIAuthenticationError,
42
+ )
43
+
44
+ # Import providers for convenience
45
+ from aiecs.tools.apisource.providers import (
46
+ BaseAPIProvider,
47
+ get_provider,
48
+ list_providers,
49
+ PROVIDER_REGISTRY,
50
+ )
51
+
52
+ # Import intelligence components
53
+ from aiecs.tools.apisource.intelligence import (
54
+ QueryIntentAnalyzer,
55
+ QueryEnhancer,
56
+ DataFusionEngine,
57
+ SearchEnhancer,
58
+ )
59
+
60
+ # Import reliability components
61
+ from aiecs.tools.apisource.reliability import (
62
+ SmartErrorHandler,
63
+ FallbackStrategy,
64
+ )
65
+
66
+ # Import monitoring components
67
+ from aiecs.tools.apisource.monitoring import DetailedMetrics
68
+
69
+ # Import utilities
70
+ from aiecs.tools.apisource.utils import DataValidator
71
+
72
+ __version__ = "2.0.0"
73
+
74
+ __all__ = [
75
+ # Main tool
76
+ "APISourceTool",
77
+ # Exceptions
78
+ "APISourceError",
79
+ "ProviderNotFoundError",
80
+ "APIRateLimitError",
81
+ "APIAuthenticationError",
82
+ # Providers
83
+ "BaseAPIProvider",
84
+ "get_provider",
85
+ "list_providers",
86
+ "PROVIDER_REGISTRY",
87
+ # Intelligence
88
+ "QueryIntentAnalyzer",
89
+ "QueryEnhancer",
90
+ "DataFusionEngine",
91
+ "SearchEnhancer",
92
+ # Reliability
93
+ "SmartErrorHandler",
94
+ "FallbackStrategy",
95
+ # Monitoring
96
+ "DetailedMetrics",
97
+ # Utils
98
+ "DataValidator",
99
+ ]
@@ -0,0 +1,19 @@
1
+ """
2
+ Intelligence Module
3
+
4
+ Contains query analysis, data fusion, and search enhancement components.
5
+ """
6
+
7
+ from aiecs.tools.apisource.intelligence.query_analyzer import (
8
+ QueryIntentAnalyzer,
9
+ QueryEnhancer,
10
+ )
11
+ from aiecs.tools.apisource.intelligence.data_fusion import DataFusionEngine
12
+ from aiecs.tools.apisource.intelligence.search_enhancer import SearchEnhancer
13
+
14
+ __all__ = [
15
+ "QueryIntentAnalyzer",
16
+ "QueryEnhancer",
17
+ "DataFusionEngine",
18
+ "SearchEnhancer",
19
+ ]