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

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

Potentially problematic release.


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

Files changed (340) hide show
  1. aiecs/__init__.py +13 -16
  2. aiecs/__main__.py +7 -7
  3. aiecs/aiecs_client.py +269 -75
  4. aiecs/application/executors/operation_executor.py +79 -54
  5. aiecs/application/knowledge_graph/__init__.py +7 -0
  6. aiecs/application/knowledge_graph/builder/__init__.py +37 -0
  7. aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  8. aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  9. aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
  10. aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
  11. aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  12. aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  13. aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
  14. aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  15. aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
  16. aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
  17. aiecs/application/knowledge_graph/extractors/base.py +98 -0
  18. aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
  19. aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
  20. aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
  21. aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  22. aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  23. aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  24. aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  25. aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  26. aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  27. aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
  28. aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  29. aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  30. aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
  31. aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  32. aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  33. aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
  34. aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  35. aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  36. aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
  37. aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
  38. aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
  39. aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
  40. aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
  41. aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
  42. aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
  43. aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
  44. aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
  45. aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
  46. aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
  47. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
  48. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
  49. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
  50. aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
  51. aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
  52. aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
  53. aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
  54. aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
  55. aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
  56. aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
  57. aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
  58. aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
  59. aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
  60. aiecs/application/knowledge_graph/search/__init__.py +59 -0
  61. aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
  62. aiecs/application/knowledge_graph/search/reranker.py +293 -0
  63. aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
  64. aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
  65. aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
  66. aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
  67. aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
  68. aiecs/application/knowledge_graph/validators/__init__.py +13 -0
  69. aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
  70. aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
  71. aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
  72. aiecs/common/__init__.py +9 -0
  73. aiecs/common/knowledge_graph/__init__.py +17 -0
  74. aiecs/common/knowledge_graph/runnable.py +471 -0
  75. aiecs/config/__init__.py +20 -5
  76. aiecs/config/config.py +762 -31
  77. aiecs/config/graph_config.py +131 -0
  78. aiecs/config/tool_config.py +435 -0
  79. aiecs/core/__init__.py +29 -13
  80. aiecs/core/interface/__init__.py +2 -2
  81. aiecs/core/interface/execution_interface.py +22 -22
  82. aiecs/core/interface/storage_interface.py +37 -88
  83. aiecs/core/registry/__init__.py +31 -0
  84. aiecs/core/registry/service_registry.py +92 -0
  85. aiecs/domain/__init__.py +270 -1
  86. aiecs/domain/agent/__init__.py +191 -0
  87. aiecs/domain/agent/base_agent.py +3949 -0
  88. aiecs/domain/agent/exceptions.py +99 -0
  89. aiecs/domain/agent/graph_aware_mixin.py +569 -0
  90. aiecs/domain/agent/hybrid_agent.py +1731 -0
  91. aiecs/domain/agent/integration/__init__.py +29 -0
  92. aiecs/domain/agent/integration/context_compressor.py +216 -0
  93. aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
  94. aiecs/domain/agent/integration/protocols.py +281 -0
  95. aiecs/domain/agent/integration/retry_policy.py +218 -0
  96. aiecs/domain/agent/integration/role_config.py +213 -0
  97. aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
  98. aiecs/domain/agent/lifecycle.py +291 -0
  99. aiecs/domain/agent/llm_agent.py +692 -0
  100. aiecs/domain/agent/memory/__init__.py +12 -0
  101. aiecs/domain/agent/memory/conversation.py +1124 -0
  102. aiecs/domain/agent/migration/__init__.py +14 -0
  103. aiecs/domain/agent/migration/conversion.py +163 -0
  104. aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
  105. aiecs/domain/agent/models.py +894 -0
  106. aiecs/domain/agent/observability.py +479 -0
  107. aiecs/domain/agent/persistence.py +449 -0
  108. aiecs/domain/agent/prompts/__init__.py +29 -0
  109. aiecs/domain/agent/prompts/builder.py +159 -0
  110. aiecs/domain/agent/prompts/formatters.py +187 -0
  111. aiecs/domain/agent/prompts/template.py +255 -0
  112. aiecs/domain/agent/registry.py +253 -0
  113. aiecs/domain/agent/tool_agent.py +444 -0
  114. aiecs/domain/agent/tools/__init__.py +15 -0
  115. aiecs/domain/agent/tools/schema_generator.py +377 -0
  116. aiecs/domain/community/__init__.py +155 -0
  117. aiecs/domain/community/agent_adapter.py +469 -0
  118. aiecs/domain/community/analytics.py +432 -0
  119. aiecs/domain/community/collaborative_workflow.py +648 -0
  120. aiecs/domain/community/communication_hub.py +634 -0
  121. aiecs/domain/community/community_builder.py +320 -0
  122. aiecs/domain/community/community_integration.py +796 -0
  123. aiecs/domain/community/community_manager.py +803 -0
  124. aiecs/domain/community/decision_engine.py +849 -0
  125. aiecs/domain/community/exceptions.py +231 -0
  126. aiecs/domain/community/models/__init__.py +33 -0
  127. aiecs/domain/community/models/community_models.py +234 -0
  128. aiecs/domain/community/resource_manager.py +461 -0
  129. aiecs/domain/community/shared_context_manager.py +589 -0
  130. aiecs/domain/context/__init__.py +40 -10
  131. aiecs/domain/context/context_engine.py +1910 -0
  132. aiecs/domain/context/conversation_models.py +87 -53
  133. aiecs/domain/context/graph_memory.py +582 -0
  134. aiecs/domain/execution/model.py +12 -4
  135. aiecs/domain/knowledge_graph/__init__.py +19 -0
  136. aiecs/domain/knowledge_graph/models/__init__.py +52 -0
  137. aiecs/domain/knowledge_graph/models/entity.py +148 -0
  138. aiecs/domain/knowledge_graph/models/evidence.py +178 -0
  139. aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
  140. aiecs/domain/knowledge_graph/models/path.py +171 -0
  141. aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
  142. aiecs/domain/knowledge_graph/models/query.py +261 -0
  143. aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
  144. aiecs/domain/knowledge_graph/models/relation.py +202 -0
  145. aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
  146. aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
  147. aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
  148. aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
  149. aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
  150. aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
  151. aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
  152. aiecs/domain/task/dsl_processor.py +172 -56
  153. aiecs/domain/task/model.py +20 -8
  154. aiecs/domain/task/task_context.py +27 -24
  155. aiecs/infrastructure/__init__.py +0 -2
  156. aiecs/infrastructure/graph_storage/__init__.py +11 -0
  157. aiecs/infrastructure/graph_storage/base.py +837 -0
  158. aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
  159. aiecs/infrastructure/graph_storage/cache.py +424 -0
  160. aiecs/infrastructure/graph_storage/distributed.py +223 -0
  161. aiecs/infrastructure/graph_storage/error_handling.py +380 -0
  162. aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
  163. aiecs/infrastructure/graph_storage/health_checks.py +378 -0
  164. aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  165. aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
  166. aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
  167. aiecs/infrastructure/graph_storage/metrics.py +344 -0
  168. aiecs/infrastructure/graph_storage/migration.py +400 -0
  169. aiecs/infrastructure/graph_storage/pagination.py +483 -0
  170. aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
  171. aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  172. aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  173. aiecs/infrastructure/graph_storage/protocols.py +76 -0
  174. aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
  175. aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
  176. aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  177. aiecs/infrastructure/graph_storage/streaming.py +487 -0
  178. aiecs/infrastructure/graph_storage/tenant.py +412 -0
  179. aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
  180. aiecs/infrastructure/messaging/websocket_manager.py +51 -35
  181. aiecs/infrastructure/monitoring/__init__.py +22 -0
  182. aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
  183. aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
  184. aiecs/infrastructure/monitoring/structured_logger.py +3 -7
  185. aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
  186. aiecs/infrastructure/persistence/__init__.py +14 -1
  187. aiecs/infrastructure/persistence/context_engine_client.py +184 -0
  188. aiecs/infrastructure/persistence/database_manager.py +67 -43
  189. aiecs/infrastructure/persistence/file_storage.py +180 -103
  190. aiecs/infrastructure/persistence/redis_client.py +74 -21
  191. aiecs/llm/__init__.py +73 -25
  192. aiecs/llm/callbacks/__init__.py +11 -0
  193. aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
  194. aiecs/llm/client_factory.py +230 -37
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +328 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  199. aiecs/llm/clients/googleai_client.py +314 -0
  200. aiecs/llm/clients/openai_client.py +158 -0
  201. aiecs/llm/clients/openai_compatible_mixin.py +367 -0
  202. aiecs/llm/clients/vertex_client.py +1186 -0
  203. aiecs/llm/clients/xai_client.py +201 -0
  204. aiecs/llm/config/__init__.py +51 -0
  205. aiecs/llm/config/config_loader.py +272 -0
  206. aiecs/llm/config/config_validator.py +206 -0
  207. aiecs/llm/config/model_config.py +143 -0
  208. aiecs/llm/protocols.py +149 -0
  209. aiecs/llm/utils/__init__.py +10 -0
  210. aiecs/llm/utils/validate_config.py +89 -0
  211. aiecs/main.py +140 -121
  212. aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
  213. aiecs/scripts/aid/__init__.py +19 -0
  214. aiecs/scripts/aid/module_checker.py +499 -0
  215. aiecs/scripts/aid/version_manager.py +235 -0
  216. aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
  217. aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
  218. aiecs/scripts/dependance_check/__init__.py +15 -0
  219. aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  220. aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
  221. aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
  222. aiecs/scripts/dependance_patch/__init__.py +7 -0
  223. aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
  224. aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
  225. aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
  226. aiecs/scripts/knowledge_graph/__init__.py +3 -0
  227. aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  228. aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  229. aiecs/scripts/tools_develop/README.md +671 -0
  230. aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  231. aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  232. aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
  233. aiecs/scripts/tools_develop/__init__.py +21 -0
  234. aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  235. aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
  236. aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  237. aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  238. aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
  239. aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  240. aiecs/scripts/tools_develop/verify_tools.py +352 -0
  241. aiecs/tasks/__init__.py +0 -1
  242. aiecs/tasks/worker.py +115 -47
  243. aiecs/tools/__init__.py +194 -72
  244. aiecs/tools/apisource/__init__.py +99 -0
  245. aiecs/tools/apisource/intelligence/__init__.py +19 -0
  246. aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
  247. aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
  248. aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
  249. aiecs/tools/apisource/monitoring/__init__.py +9 -0
  250. aiecs/tools/apisource/monitoring/metrics.py +330 -0
  251. aiecs/tools/apisource/providers/__init__.py +112 -0
  252. aiecs/tools/apisource/providers/base.py +671 -0
  253. aiecs/tools/apisource/providers/census.py +397 -0
  254. aiecs/tools/apisource/providers/fred.py +535 -0
  255. aiecs/tools/apisource/providers/newsapi.py +409 -0
  256. aiecs/tools/apisource/providers/worldbank.py +352 -0
  257. aiecs/tools/apisource/reliability/__init__.py +12 -0
  258. aiecs/tools/apisource/reliability/error_handler.py +363 -0
  259. aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
  260. aiecs/tools/apisource/tool.py +832 -0
  261. aiecs/tools/apisource/utils/__init__.py +9 -0
  262. aiecs/tools/apisource/utils/validators.py +334 -0
  263. aiecs/tools/base_tool.py +415 -21
  264. aiecs/tools/docs/__init__.py +121 -0
  265. aiecs/tools/docs/ai_document_orchestrator.py +607 -0
  266. aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
  267. aiecs/tools/docs/content_insertion_tool.py +1320 -0
  268. aiecs/tools/docs/document_creator_tool.py +1464 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1016 -0
  271. aiecs/tools/docs/document_writer_tool.py +2008 -0
  272. aiecs/tools/knowledge_graph/__init__.py +17 -0
  273. aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
  274. aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
  275. aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
  276. aiecs/tools/langchain_adapter.py +300 -138
  277. aiecs/tools/schema_generator.py +455 -0
  278. aiecs/tools/search_tool/__init__.py +100 -0
  279. aiecs/tools/search_tool/analyzers.py +581 -0
  280. aiecs/tools/search_tool/cache.py +264 -0
  281. aiecs/tools/search_tool/constants.py +128 -0
  282. aiecs/tools/search_tool/context.py +224 -0
  283. aiecs/tools/search_tool/core.py +778 -0
  284. aiecs/tools/search_tool/deduplicator.py +119 -0
  285. aiecs/tools/search_tool/error_handler.py +242 -0
  286. aiecs/tools/search_tool/metrics.py +343 -0
  287. aiecs/tools/search_tool/rate_limiter.py +172 -0
  288. aiecs/tools/search_tool/schemas.py +275 -0
  289. aiecs/tools/statistics/__init__.py +80 -0
  290. aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
  291. aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
  292. aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
  293. aiecs/tools/statistics/data_loader_tool.py +555 -0
  294. aiecs/tools/statistics/data_profiler_tool.py +638 -0
  295. aiecs/tools/statistics/data_transformer_tool.py +580 -0
  296. aiecs/tools/statistics/data_visualizer_tool.py +498 -0
  297. aiecs/tools/statistics/model_trainer_tool.py +507 -0
  298. aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
  299. aiecs/tools/task_tools/__init__.py +49 -36
  300. aiecs/tools/task_tools/chart_tool.py +200 -184
  301. aiecs/tools/task_tools/classfire_tool.py +268 -267
  302. aiecs/tools/task_tools/image_tool.py +220 -141
  303. aiecs/tools/task_tools/office_tool.py +226 -146
  304. aiecs/tools/task_tools/pandas_tool.py +477 -121
  305. aiecs/tools/task_tools/report_tool.py +390 -142
  306. aiecs/tools/task_tools/research_tool.py +149 -79
  307. aiecs/tools/task_tools/scraper_tool.py +339 -145
  308. aiecs/tools/task_tools/stats_tool.py +448 -209
  309. aiecs/tools/temp_file_manager.py +26 -24
  310. aiecs/tools/tool_executor/__init__.py +18 -16
  311. aiecs/tools/tool_executor/tool_executor.py +364 -52
  312. aiecs/utils/LLM_output_structor.py +74 -48
  313. aiecs/utils/__init__.py +14 -3
  314. aiecs/utils/base_callback.py +0 -3
  315. aiecs/utils/cache_provider.py +696 -0
  316. aiecs/utils/execution_utils.py +50 -31
  317. aiecs/utils/prompt_loader.py +1 -0
  318. aiecs/utils/token_usage_repository.py +37 -11
  319. aiecs/ws/socket_server.py +14 -4
  320. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
  321. aiecs-1.7.17.dist-info/RECORD +337 -0
  322. aiecs-1.7.17.dist-info/entry_points.txt +13 -0
  323. aiecs/config/registry.py +0 -19
  324. aiecs/domain/context/content_engine.py +0 -982
  325. aiecs/llm/base_client.py +0 -99
  326. aiecs/llm/openai_client.py +0 -125
  327. aiecs/llm/vertex_client.py +0 -186
  328. aiecs/llm/xai_client.py +0 -184
  329. aiecs/scripts/dependency_checker.py +0 -857
  330. aiecs/scripts/quick_dependency_check.py +0 -269
  331. aiecs/tools/task_tools/search_api.py +0 -7
  332. aiecs-1.0.1.dist-info/RECORD +0 -90
  333. aiecs-1.0.1.dist-info/entry_points.txt +0 -7
  334. /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
  335. /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
  336. /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
  337. /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
  338. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,417 @@
1
+ """
2
+ Query Intent Analysis and Enhancement
3
+
4
+ Provides intelligent query understanding and parameter auto-completion:
5
+ - Detect query intent (time_series, comparison, search, metadata)
6
+ - Extract entities (economic indicators, countries, etc.)
7
+ - Parse time ranges and geographic scope
8
+ - Suggest appropriate providers and operations
9
+ - Auto-complete missing parameters based on intent
10
+ """
11
+
12
+ import logging
13
+ import re
14
+ from typing import Any, Dict, List, Optional, cast
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class QueryIntentAnalyzer:
20
+ """
21
+ Analyzes query intent to help route requests and optimize parameters.
22
+ """
23
+
24
+ # Intent keywords
25
+ INTENT_KEYWORDS = {
26
+ "time_series": [
27
+ "trend",
28
+ "over time",
29
+ "historical",
30
+ "series",
31
+ "change",
32
+ "growth",
33
+ "history",
34
+ ],
35
+ "comparison": [
36
+ "compare",
37
+ "versus",
38
+ "vs",
39
+ "difference",
40
+ "between",
41
+ "against",
42
+ "relative to",
43
+ ],
44
+ "search": [
45
+ "search",
46
+ "find",
47
+ "look for",
48
+ "list",
49
+ "show me",
50
+ "what are",
51
+ ],
52
+ "metadata": [
53
+ "info",
54
+ "information",
55
+ "about",
56
+ "describe",
57
+ "details",
58
+ "metadata",
59
+ ],
60
+ "recent": [
61
+ "recent",
62
+ "latest",
63
+ "current",
64
+ "now",
65
+ "today",
66
+ "this week",
67
+ "this month",
68
+ ],
69
+ "forecast": ["forecast", "predict", "future", "project", "estimate"],
70
+ }
71
+
72
+ # Economic indicators mapping
73
+ ECONOMIC_INDICATORS = {
74
+ "gdp": {
75
+ "keywords": ["gdp", "gross domestic product", "economic output"],
76
+ "providers": ["fred", "worldbank"],
77
+ "fred_series": ["GDP", "GDPC1"],
78
+ "wb_indicator": "NY.GDP.MKTP.CD",
79
+ },
80
+ "unemployment": {
81
+ "keywords": ["unemployment", "jobless", "labor force"],
82
+ "providers": ["fred"],
83
+ "fred_series": ["UNRATE", "UNEMPLOY"],
84
+ },
85
+ "inflation": {
86
+ "keywords": ["inflation", "cpi", "consumer price", "price index"],
87
+ "providers": ["fred", "worldbank"],
88
+ "fred_series": ["CPIAUCSL", "CPILFESL"],
89
+ "wb_indicator": "FP.CPI.TOTL",
90
+ },
91
+ "interest_rate": {
92
+ "keywords": [
93
+ "interest rate",
94
+ "fed rate",
95
+ "federal funds",
96
+ "treasury",
97
+ ],
98
+ "providers": ["fred"],
99
+ "fred_series": ["DFF", "DGS10", "DGS30"],
100
+ },
101
+ "population": {
102
+ "keywords": ["population", "demographic", "people count"],
103
+ "providers": ["census", "worldbank"],
104
+ "wb_indicator": "SP.POP.TOTL",
105
+ },
106
+ "trade": {
107
+ "keywords": ["trade", "export", "import", "trade balance"],
108
+ "providers": ["fred", "worldbank"],
109
+ "fred_series": ["BOPGSTB"],
110
+ "wb_indicator": "NE.EXP.GNFS.CD",
111
+ },
112
+ }
113
+
114
+ # Country codes and names
115
+ COUNTRIES = {
116
+ "us": ["us", "usa", "united states", "america"],
117
+ "uk": ["uk", "united kingdom", "britain"],
118
+ "china": ["china", "cn"],
119
+ "japan": ["japan", "jp"],
120
+ "germany": ["germany", "de"],
121
+ "france": ["france", "fr"],
122
+ "india": ["india", "in"],
123
+ "canada": ["canada", "ca"],
124
+ }
125
+
126
+ def analyze_intent(self, query_text: str) -> Dict[str, Any]:
127
+ """
128
+ Analyze query intent and extract key information.
129
+
130
+ Args:
131
+ query_text: Natural language query string
132
+
133
+ Returns:
134
+ Dictionary with:
135
+ - intent_type: Primary intent (time_series, comparison, search, etc.)
136
+ - entities: Extracted entities (indicators, countries, etc.)
137
+ - time_range: Extracted time information
138
+ - geographic_scope: Geographic context
139
+ - suggested_providers: Recommended providers
140
+ - suggested_operations: Recommended operations
141
+ - confidence: Confidence score (0-1)
142
+ """
143
+ query_lower = query_text.lower()
144
+
145
+ intent_result: Dict[str, Any] = {
146
+ "intent_type": "search", # Default
147
+ "entities": [],
148
+ "time_range": None,
149
+ "geographic_scope": None,
150
+ "suggested_providers": [],
151
+ "suggested_operations": [],
152
+ "confidence": 0.0,
153
+ "keywords_matched": [],
154
+ }
155
+
156
+ # Detect intent type
157
+ intent_scores = {}
158
+ for intent_type, keywords in self.INTENT_KEYWORDS.items():
159
+ score = sum(1 for kw in keywords if kw in query_lower)
160
+ if score > 0:
161
+ intent_scores[intent_type] = score
162
+
163
+ if intent_scores:
164
+ # Primary intent is the one with highest score
165
+ primary_intent = max(intent_scores.items(), key=lambda x: x[1])
166
+ intent_result["intent_type"] = primary_intent[0]
167
+ intent_result["confidence"] += 0.3
168
+
169
+ # Extract economic indicators
170
+ entities = cast(List[Dict[str, Any]], intent_result["entities"])
171
+ suggested_providers = cast(List[str], intent_result["suggested_providers"])
172
+ keywords_matched = cast(List[str], intent_result["keywords_matched"])
173
+
174
+ for indicator_name, indicator_info_raw in self.ECONOMIC_INDICATORS.items():
175
+ indicator_info = cast(Dict[str, Any], indicator_info_raw)
176
+ for keyword in indicator_info["keywords"]:
177
+ if keyword in query_lower:
178
+ entities.append(
179
+ {
180
+ "type": "indicator",
181
+ "name": indicator_name,
182
+ "matched_keyword": keyword,
183
+ }
184
+ )
185
+ suggested_providers.extend(indicator_info["providers"])
186
+ intent_result["confidence"] += 0.2
187
+ keywords_matched.append(keyword)
188
+ break
189
+
190
+ # Extract countries
191
+ for country_code, country_names in self.COUNTRIES.items():
192
+ for country_name in country_names:
193
+ if country_name in query_lower:
194
+ intent_result["geographic_scope"] = country_code.upper()
195
+ intent_result["confidence"] += 0.2
196
+ break
197
+
198
+ # Extract time range
199
+ time_info = self._extract_time_range(query_lower)
200
+ if time_info:
201
+ intent_result["time_range"] = time_info
202
+ intent_result["confidence"] += 0.2
203
+
204
+ # Suggest operations based on intent
205
+ intent_result["suggested_operations"] = self._suggest_operations(intent_result["intent_type"], intent_result["suggested_providers"])
206
+
207
+ # Remove duplicates from providers
208
+ intent_result["suggested_providers"] = list(set(intent_result["suggested_providers"]))
209
+
210
+ # Cap confidence at 1.0
211
+ intent_result["confidence"] = min(1.0, intent_result["confidence"])
212
+
213
+ return intent_result
214
+
215
+ def _extract_time_range(self, query_lower: str) -> Optional[Dict[str, Any]]:
216
+ """
217
+ Extract time range information from query.
218
+
219
+ Args:
220
+ query_lower: Lowercase query string
221
+
222
+ Returns:
223
+ Dictionary with start_date, end_date, or None
224
+ """
225
+ time_range: Dict[str, Any] = {}
226
+
227
+ # Look for year patterns (4 digits)
228
+ year_pattern = r"\b(19|20)\d{2}\b"
229
+ years = re.findall(year_pattern, query_lower)
230
+
231
+ if len(years) >= 2:
232
+ # Found multiple years
233
+ years_int = sorted([int(y) for y in years])
234
+ time_range["start_date"] = f"{years_int[0]}-01-01"
235
+ time_range["end_date"] = f"{years_int[-1]}-12-31"
236
+ time_range["type"] = "explicit_range"
237
+ elif len(years) == 1:
238
+ # Single year mentioned
239
+ year = int(years[0])
240
+ time_range["start_date"] = f"{year}-01-01"
241
+ time_range["end_date"] = f"{year}-12-31"
242
+ time_range["type"] = "single_year"
243
+
244
+ # Look for relative time expressions
245
+ if "last" in query_lower or "past" in query_lower:
246
+ # Extract number
247
+ number_pattern = r"(last|past)\s+(\d+)\s+(year|month|day|week)"
248
+ match = re.search(number_pattern, query_lower)
249
+ if match:
250
+ quantity = int(match.group(2))
251
+ unit = match.group(3)
252
+ time_range["type"] = "relative"
253
+ time_range["quantity"] = quantity
254
+ time_range["unit"] = unit
255
+
256
+ return time_range if time_range else None
257
+
258
+ def _suggest_operations(self, intent_type: str, providers: List[str]) -> List[Dict[str, str]]:
259
+ """
260
+ Suggest appropriate operations based on intent and providers.
261
+
262
+ Args:
263
+ intent_type: Detected intent type
264
+ providers: List of suggested providers
265
+
266
+ Returns:
267
+ List of {provider, operation} dictionaries
268
+ """
269
+ suggestions = []
270
+
271
+ for provider in providers:
272
+ if intent_type == "time_series":
273
+ if provider == "fred":
274
+ suggestions.append(
275
+ {
276
+ "provider": "fred",
277
+ "operation": "get_series_observations",
278
+ }
279
+ )
280
+ elif provider == "worldbank":
281
+ suggestions.append({"provider": "worldbank", "operation": "get_indicator"})
282
+
283
+ elif intent_type == "search":
284
+ if provider == "fred":
285
+ suggestions.append({"provider": "fred", "operation": "search_series"})
286
+ elif provider == "worldbank":
287
+ suggestions.append(
288
+ {
289
+ "provider": "worldbank",
290
+ "operation": "search_indicators",
291
+ }
292
+ )
293
+ elif provider == "newsapi":
294
+ suggestions.append(
295
+ {
296
+ "provider": "newsapi",
297
+ "operation": "search_everything",
298
+ }
299
+ )
300
+
301
+ elif intent_type == "metadata":
302
+ if provider == "fred":
303
+ suggestions.append({"provider": "fred", "operation": "get_series_info"})
304
+
305
+ return suggestions
306
+
307
+
308
+ class QueryEnhancer:
309
+ """
310
+ Enhances queries by auto-completing parameters based on intent.
311
+ """
312
+
313
+ def __init__(self, intent_analyzer: Optional[QueryIntentAnalyzer] = None):
314
+ """
315
+ Initialize query enhancer.
316
+
317
+ Args:
318
+ intent_analyzer: Intent analyzer instance (creates new if not provided)
319
+ """
320
+ self.intent_analyzer = intent_analyzer or QueryIntentAnalyzer()
321
+
322
+ def auto_complete_params(
323
+ self,
324
+ provider: str,
325
+ operation: str,
326
+ params: Dict[str, Any],
327
+ query_text: Optional[str] = None,
328
+ ) -> Dict[str, Any]:
329
+ """
330
+ Auto-complete missing parameters based on query intent.
331
+
332
+ Args:
333
+ provider: Provider name
334
+ operation: Operation name
335
+ params: Current parameters
336
+ query_text: Optional natural language query for intent analysis
337
+
338
+ Returns:
339
+ Enhanced parameters dictionary
340
+ """
341
+ completed_params = params.copy()
342
+
343
+ # Analyze intent if query text provided
344
+ intent = None
345
+ if query_text:
346
+ intent = self.intent_analyzer.analyze_intent(query_text)
347
+
348
+ # Add time range parameters if detected and not present
349
+ if intent and intent.get("time_range") and provider == "fred":
350
+ time_range = intent["time_range"]
351
+ if time_range.get("type") in ["explicit_range", "single_year"]:
352
+ if "observation_start" not in params and "start_date" in time_range:
353
+ completed_params["observation_start"] = time_range["start_date"]
354
+ if "observation_end" not in params and "end_date" in time_range:
355
+ completed_params["observation_end"] = time_range["end_date"]
356
+
357
+ # Add reasonable limits if not specified
358
+ if "limit" not in params and "page_size" not in params:
359
+ if intent and intent.get("intent_type") == "time_series":
360
+ # Time series typically need more data
361
+ if provider == "fred":
362
+ # FRED API max is 100000, but 1000 is reasonable default
363
+ completed_params["limit"] = 1000
364
+ elif provider == "worldbank":
365
+ completed_params["per_page"] = 1000
366
+ else:
367
+ # Search results typically need fewer
368
+ if provider == "fred":
369
+ completed_params["limit"] = 20
370
+ elif provider == "worldbank":
371
+ completed_params["limit"] = 20
372
+ elif provider == "newsapi":
373
+ completed_params["page_size"] = 10
374
+
375
+ # Add sort order for time series
376
+ if intent and intent.get("intent_type") == "time_series":
377
+ if provider == "fred" and "sort_order" not in params:
378
+ completed_params["sort_order"] = "desc" # Most recent first
379
+
380
+ # Add country code if detected and needed
381
+ if intent and intent.get("geographic_scope"):
382
+ if provider == "worldbank" and "country_code" not in params:
383
+ completed_params["country_code"] = intent["geographic_scope"]
384
+
385
+ return completed_params
386
+
387
+ def enhance_query_text(self, query_text: str, provider: str) -> str:
388
+ """
389
+ Enhance query text for better search results.
390
+
391
+ Args:
392
+ query_text: Original query text
393
+ provider: Target provider
394
+
395
+ Returns:
396
+ Enhanced query text
397
+ """
398
+ # Analyze intent
399
+ intent = self.intent_analyzer.analyze_intent(query_text)
400
+
401
+ # For searches, add indicator-specific terms
402
+ enhanced = query_text
403
+
404
+ if provider == "fred" and intent.get("entities"):
405
+ # Add FRED series IDs if we recognize the indicator
406
+ for entity in intent["entities"]:
407
+ if entity["type"] == "indicator":
408
+ indicator_name = entity["name"]
409
+ indicator_info_raw = QueryIntentAnalyzer.ECONOMIC_INDICATORS.get(indicator_name, {})
410
+ indicator_info = cast(Dict[str, Any], indicator_info_raw)
411
+ if "fred_series" in indicator_info:
412
+ # Add common series IDs to improve search
413
+ series_ids = " ".join(indicator_info["fred_series"])
414
+ enhanced = f"{query_text} {series_ids}"
415
+ break
416
+
417
+ return enhanced