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,409 @@
1
+ """
2
+ News API Provider
3
+
4
+ Provides access to news articles from various sources worldwide.
5
+ Supports headline retrieval, article search, and source listing.
6
+
7
+ API Documentation: https://newsapi.org/docs
8
+ """
9
+
10
+ import logging
11
+ from datetime import datetime, timedelta
12
+ from typing import Any, Dict, List, Optional, Tuple
13
+
14
+ from aiecs.tools.apisource.providers.base import (
15
+ BaseAPIProvider,
16
+ expose_operation,
17
+ )
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+ # Optional HTTP client
22
+ try:
23
+ import requests
24
+
25
+ REQUESTS_AVAILABLE = True
26
+ except ImportError:
27
+ REQUESTS_AVAILABLE = False
28
+
29
+
30
+ class NewsAPIProvider(BaseAPIProvider):
31
+ """
32
+ News API provider for accessing news articles and headlines.
33
+
34
+ Provides access to:
35
+ - Top headlines from various sources
36
+ - Article search by keywords
37
+ - News sources listing
38
+ - Filtering by country, language, category
39
+ """
40
+
41
+ BASE_URL = "https://newsapi.org/v2"
42
+
43
+ @property
44
+ def name(self) -> str:
45
+ return "newsapi"
46
+
47
+ @property
48
+ def description(self) -> str:
49
+ return "News API for accessing news articles, headlines, and sources worldwide"
50
+
51
+ @property
52
+ def supported_operations(self) -> List[str]:
53
+ return ["get_top_headlines", "search_everything", "get_sources"]
54
+
55
+ def validate_params(self, operation: str, params: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
56
+ """Validate parameters for News API operations"""
57
+
58
+ if operation == "get_top_headlines":
59
+ # At least one of these is required
60
+ if not any(k in params for k in ["q", "country", "category", "sources"]):
61
+ return (
62
+ False,
63
+ "At least one of q, country, category, or sources is required",
64
+ )
65
+
66
+ elif operation == "search_everything":
67
+ if "q" not in params:
68
+ return False, "Missing required parameter: q (search query)"
69
+
70
+ return True, None
71
+
72
+ # Exposed operations for AI agent visibility
73
+
74
+ @expose_operation(
75
+ operation_name="get_top_headlines",
76
+ description="Get top news headlines from various sources with optional filtering",
77
+ )
78
+ def get_top_headlines(
79
+ self,
80
+ q: Optional[str] = None,
81
+ country: Optional[str] = None,
82
+ category: Optional[str] = None,
83
+ sources: Optional[str] = None,
84
+ page_size: Optional[int] = None,
85
+ ) -> Dict[str, Any]:
86
+ """
87
+ Get top headlines.
88
+
89
+ Args:
90
+ q: Keywords or phrases to search for in article title and body
91
+ country: 2-letter ISO country code (e.g., 'us', 'gb', 'cn')
92
+ category: Category (business, entertainment, general, health, science, sports, technology)
93
+ sources: Comma-separated news source IDs
94
+ page_size: Number of results to return (max 100)
95
+
96
+ Returns:
97
+ Dictionary containing news articles and metadata
98
+ """
99
+ params: Dict[str, Any] = {}
100
+ if q:
101
+ params["q"] = q
102
+ if country:
103
+ params["country"] = country
104
+ if category:
105
+ params["category"] = category
106
+ if sources:
107
+ params["sources"] = sources
108
+ if page_size:
109
+ params["page_size"] = page_size
110
+
111
+ return self.execute("get_top_headlines", params)
112
+
113
+ @expose_operation(
114
+ operation_name="search_everything",
115
+ description="Search through millions of articles from news sources and blogs",
116
+ )
117
+ def search_everything(
118
+ self,
119
+ q: str,
120
+ from_date: Optional[str] = None,
121
+ to_date: Optional[str] = None,
122
+ language: Optional[str] = None,
123
+ sort_by: Optional[str] = None,
124
+ page_size: Optional[int] = None,
125
+ ) -> Dict[str, Any]:
126
+ """
127
+ Search all articles.
128
+
129
+ Args:
130
+ q: Keywords or phrases to search for
131
+ from_date: Start date (YYYY-MM-DD or ISO 8601)
132
+ to_date: End date (YYYY-MM-DD or ISO 8601)
133
+ language: 2-letter ISO language code (e.g., 'en', 'es', 'fr')
134
+ sort_by: Sort order (relevancy, popularity, publishedAt)
135
+ page_size: Number of results to return (max 100)
136
+
137
+ Returns:
138
+ Dictionary containing search results and metadata
139
+ """
140
+ params: Dict[str, Any] = {"q": q}
141
+ if from_date:
142
+ params["from"] = from_date
143
+ if to_date:
144
+ params["to"] = to_date
145
+ if language:
146
+ params["language"] = language
147
+ if sort_by:
148
+ params["sortBy"] = sort_by
149
+ if page_size:
150
+ params["pageSize"] = page_size
151
+
152
+ return self.execute("search_everything", params)
153
+
154
+ @expose_operation(
155
+ operation_name="get_sources",
156
+ description="Get the list of available news sources",
157
+ )
158
+ def get_sources(
159
+ self,
160
+ category: Optional[str] = None,
161
+ language: Optional[str] = None,
162
+ country: Optional[str] = None,
163
+ ) -> Dict[str, Any]:
164
+ """
165
+ Get available news sources.
166
+
167
+ Args:
168
+ category: Filter by category
169
+ language: Filter by language (2-letter ISO code)
170
+ country: Filter by country (2-letter ISO code)
171
+
172
+ Returns:
173
+ Dictionary containing list of news sources
174
+ """
175
+ params = {}
176
+ if category:
177
+ params["category"] = category
178
+ if language:
179
+ params["language"] = language
180
+ if country:
181
+ params["country"] = country
182
+
183
+ return self.execute("get_sources", params)
184
+
185
+ def fetch(self, operation: str, params: Dict[str, Any]) -> Dict[str, Any]:
186
+ """Fetch data from News API"""
187
+
188
+ if not REQUESTS_AVAILABLE:
189
+ raise ImportError("requests library is required for News API provider")
190
+
191
+ # Get API key
192
+ api_key = self._get_api_key("NEWSAPI_API_KEY")
193
+ if not api_key:
194
+ raise ValueError("News API key not found. Set NEWSAPI_API_KEY environment variable or " "provide 'api_key' in config. Get your key at https://newsapi.org")
195
+
196
+ headers = {"X-Api-Key": api_key}
197
+ timeout = self.config.get("timeout", 30)
198
+
199
+ # Build endpoint based on operation
200
+ if operation == "get_top_headlines":
201
+ endpoint = f"{self.BASE_URL}/top-headlines"
202
+ query_params = {}
203
+
204
+ # Optional parameters
205
+ if "q" in params:
206
+ query_params["q"] = params["q"]
207
+ if "country" in params:
208
+ query_params["country"] = params["country"]
209
+ if "category" in params:
210
+ query_params["category"] = params["category"]
211
+ if "sources" in params:
212
+ query_params["sources"] = params["sources"]
213
+ if "page_size" in params:
214
+ query_params["pageSize"] = params["page_size"]
215
+ if "page" in params:
216
+ query_params["page"] = params["page"]
217
+
218
+ elif operation == "search_everything":
219
+ endpoint = f"{self.BASE_URL}/everything"
220
+ query_params = {"q": params["q"]}
221
+
222
+ # Optional parameters
223
+ if "from_date" in params:
224
+ query_params["from"] = params["from_date"]
225
+ elif "days_back" in params:
226
+ # Convenience parameter: go back N days
227
+ from_date = datetime.now() - timedelta(days=params["days_back"])
228
+ query_params["from"] = from_date.strftime("%Y-%m-%d")
229
+
230
+ if "to_date" in params:
231
+ query_params["to"] = params["to_date"]
232
+ if "language" in params:
233
+ query_params["language"] = params["language"]
234
+ if "sort_by" in params:
235
+ query_params["sortBy"] = params["sort_by"]
236
+ if "page_size" in params:
237
+ query_params["pageSize"] = params["page_size"]
238
+ if "page" in params:
239
+ query_params["page"] = params["page"]
240
+
241
+ elif operation == "get_sources":
242
+ endpoint = f"{self.BASE_URL}/top-headlines/sources"
243
+ query_params = {}
244
+
245
+ # Optional parameters
246
+ if "country" in params:
247
+ query_params["country"] = params["country"]
248
+ if "language" in params:
249
+ query_params["language"] = params["language"]
250
+ if "category" in params:
251
+ query_params["category"] = params["category"]
252
+
253
+ else:
254
+ raise ValueError(f"Unknown operation: {operation}")
255
+
256
+ # Make API request
257
+ try:
258
+ response = requests.get(endpoint, params=query_params, headers=headers, timeout=timeout)
259
+ response.raise_for_status()
260
+
261
+ data = response.json()
262
+
263
+ # Check API response status
264
+ if data.get("status") != "ok":
265
+ raise Exception(f"News API error: {data.get('message', 'Unknown error')}")
266
+
267
+ # Extract relevant data
268
+ if operation == "get_sources":
269
+ result_data = data.get("sources", [])
270
+ else:
271
+ result_data = {
272
+ "articles": data.get("articles", []),
273
+ "total_results": data.get("totalResults", 0),
274
+ }
275
+
276
+ return self._format_response(
277
+ operation=operation,
278
+ data=result_data,
279
+ source=f"News API - {endpoint}",
280
+ )
281
+
282
+ except requests.exceptions.RequestException as e:
283
+ self.logger.error(f"News API request failed: {e}")
284
+ raise Exception(f"News API request failed: {str(e)}")
285
+
286
+ def get_operation_schema(self, operation: str) -> Optional[Dict[str, Any]]:
287
+ """Get detailed schema for News API operations"""
288
+
289
+ schemas = {
290
+ "get_top_headlines": {
291
+ "description": "Get top news headlines",
292
+ "parameters": {
293
+ "q": {
294
+ "type": "string",
295
+ "required": False,
296
+ "description": "Keywords or phrases to search for",
297
+ "examples": [
298
+ "bitcoin",
299
+ "climate change",
300
+ "technology",
301
+ ],
302
+ },
303
+ "country": {
304
+ "type": "string",
305
+ "required": False,
306
+ "description": "2-letter ISO country code",
307
+ "examples": ["us", "gb", "cn", "jp"],
308
+ },
309
+ "category": {
310
+ "type": "string",
311
+ "required": False,
312
+ "description": "News category",
313
+ "examples": [
314
+ "business",
315
+ "entertainment",
316
+ "health",
317
+ "science",
318
+ "sports",
319
+ "technology",
320
+ ],
321
+ },
322
+ "sources": {
323
+ "type": "string",
324
+ "required": False,
325
+ "description": "Comma-separated news source IDs",
326
+ "examples": ["bbc-news", "cnn", "the-verge"],
327
+ },
328
+ "page_size": {
329
+ "type": "integer",
330
+ "required": False,
331
+ "description": "Number of results (max 100)",
332
+ "examples": [10, 20, 50],
333
+ "default": 20,
334
+ },
335
+ },
336
+ },
337
+ "search_everything": {
338
+ "description": "Search all news articles",
339
+ "parameters": {
340
+ "q": {
341
+ "type": "string",
342
+ "required": True,
343
+ "description": "Keywords or phrases to search for",
344
+ "examples": [
345
+ "artificial intelligence",
346
+ "climate summit",
347
+ "stock market",
348
+ ],
349
+ },
350
+ "from_date": {
351
+ "type": "string",
352
+ "required": False,
353
+ "description": "Start date (YYYY-MM-DD)",
354
+ "examples": ["2024-01-01", "2024-10-01"],
355
+ },
356
+ "to_date": {
357
+ "type": "string",
358
+ "required": False,
359
+ "description": "End date (YYYY-MM-DD)",
360
+ "examples": ["2024-12-31", "2024-10-17"],
361
+ },
362
+ "language": {
363
+ "type": "string",
364
+ "required": False,
365
+ "description": "2-letter ISO language code",
366
+ "examples": ["en", "es", "fr", "de"],
367
+ },
368
+ "sort_by": {
369
+ "type": "string",
370
+ "required": False,
371
+ "description": "Sort order",
372
+ "examples": ["relevancy", "popularity", "publishedAt"],
373
+ "default": "publishedAt",
374
+ },
375
+ "page_size": {
376
+ "type": "integer",
377
+ "required": False,
378
+ "description": "Number of results (max 100)",
379
+ "examples": [10, 20, 50],
380
+ "default": 20,
381
+ },
382
+ },
383
+ },
384
+ "get_sources": {
385
+ "description": "Get available news sources",
386
+ "parameters": {
387
+ "category": {
388
+ "type": "string",
389
+ "required": False,
390
+ "description": "Filter by category",
391
+ "examples": ["business", "technology", "sports"],
392
+ },
393
+ "language": {
394
+ "type": "string",
395
+ "required": False,
396
+ "description": "Filter by language (2-letter ISO code)",
397
+ "examples": ["en", "es", "fr"],
398
+ },
399
+ "country": {
400
+ "type": "string",
401
+ "required": False,
402
+ "description": "Filter by country (2-letter ISO code)",
403
+ "examples": ["us", "gb", "cn"],
404
+ },
405
+ },
406
+ },
407
+ }
408
+
409
+ return schemas.get(operation)