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,511 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Schema Coverage Reporter
4
+
5
+ Reports schema coverage across all tools with detailed metrics.
6
+ Supports multiple output formats: text, JSON, and HTML.
7
+
8
+ Usage:
9
+ # Report coverage for all tools (text format)
10
+ aiecs tools schema-coverage
11
+
12
+ # Report coverage in JSON format
13
+ aiecs tools schema-coverage --format json
14
+
15
+ # Report coverage in HTML format
16
+ aiecs tools schema-coverage --format html --output coverage.html
17
+
18
+ # Report coverage for specific tools
19
+ aiecs tools schema-coverage pandas stats
20
+
21
+ # Set minimum coverage threshold
22
+ aiecs tools schema-coverage --min-coverage 90
23
+ """
24
+
25
+ import json
26
+ import sys
27
+ from datetime import datetime
28
+ from pathlib import Path
29
+ from typing import Dict, List, Any, Optional
30
+ import argparse
31
+
32
+ from aiecs.tools import discover_tools, TOOL_CLASSES, get_tool
33
+ from aiecs.scripts.tools_develop.validate_tool_schemas import (
34
+ analyze_tool_schemas,
35
+ SchemaQualityMetrics,
36
+ )
37
+
38
+ # Ensure we can import aiecs
39
+ import os
40
+ sys.path.insert(
41
+ 0,
42
+ os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))),
43
+ )
44
+
45
+
46
+ def generate_coverage_report(
47
+ tool_names: Optional[List[str]] = None,
48
+ format: str = "text",
49
+ output: Optional[str] = None,
50
+ min_coverage: float = 0.0,
51
+ ) -> Dict[str, Any]:
52
+ """
53
+ Generate schema coverage report for tools.
54
+
55
+ Args:
56
+ tool_names: List of tool names to report on, None for all tools
57
+ format: Output format ('text', 'json', 'html')
58
+ output: Output file path (None for stdout)
59
+ min_coverage: Minimum coverage threshold (0-100)
60
+
61
+ Returns:
62
+ Dictionary with coverage data
63
+ """
64
+ discover_tools()
65
+
66
+ # Determine tools to check
67
+ if tool_names:
68
+ tools_to_check = {}
69
+ for name in tool_names:
70
+ if name in TOOL_CLASSES:
71
+ tools_to_check[name] = TOOL_CLASSES[name]
72
+ else:
73
+ print(f"Warning: Tool '{name}' not found", file=sys.stderr)
74
+ if not tools_to_check:
75
+ print("No tools found to check", file=sys.stderr)
76
+ return {}
77
+ else:
78
+ tools_to_check = TOOL_CLASSES
79
+
80
+ # Analyze all tools
81
+ all_results = {}
82
+ for tool_name in sorted(tools_to_check.keys()):
83
+ tool_class = tools_to_check[tool_name]
84
+ result = analyze_tool_schemas(tool_name, tool_class)
85
+ all_results[tool_name] = result
86
+
87
+ # Calculate overall statistics
88
+ total_methods = sum(r["metrics"].total_methods for r in all_results.values())
89
+ total_generated = sum(r["metrics"].schemas_generated for r in all_results.values())
90
+ total_fields = sum(r["metrics"].total_fields for r in all_results.values())
91
+ total_meaningful = sum(r["metrics"].fields_with_meaningful_descriptions for r in all_results.values())
92
+ total_with_types = sum(r["metrics"].fields_with_types for r in all_results.values())
93
+
94
+ # Count manual vs auto schemas
95
+ total_manual = 0
96
+ total_auto = 0
97
+ for result in all_results.values():
98
+ methods = result["methods"]
99
+ total_manual += len([m for m in methods if m.get("schema_type") == "manual"])
100
+ total_auto += len([m for m in methods if m.get("schema_type") == "auto"])
101
+
102
+ overall_generation = (total_generated / total_methods * 100) if total_methods > 0 else 0
103
+ overall_description = (total_meaningful / total_fields * 100) if total_fields > 0 else 0
104
+ overall_type_coverage = (total_with_types / total_fields * 100) if total_fields > 0 else 0
105
+ overall_score = (overall_generation + overall_description + overall_type_coverage) / 3
106
+
107
+ # Build report data
108
+ report_data = {
109
+ "timestamp": datetime.now().isoformat(),
110
+ "summary": {
111
+ "total_tools": len(all_results),
112
+ "total_methods": total_methods,
113
+ "total_schemas": total_generated,
114
+ "manual_schemas": total_manual,
115
+ "auto_generated_schemas": total_auto,
116
+ "missing_schemas": total_methods - total_generated,
117
+ "coverage_percentage": overall_generation,
118
+ "description_quality": overall_description,
119
+ "type_coverage": overall_type_coverage,
120
+ "overall_score": overall_score,
121
+ },
122
+ "tools": {},
123
+ }
124
+
125
+ # Add tool details
126
+ for tool_name, result in all_results.items():
127
+ metrics = result["metrics"]
128
+ methods = result["methods"]
129
+ scores = metrics.get_scores()
130
+
131
+ manual_count = len([m for m in methods if m.get("schema_type") == "manual"])
132
+ auto_count = len([m for m in methods if m.get("schema_type") == "auto"])
133
+
134
+ report_data["tools"][tool_name] = {
135
+ "total_methods": metrics.total_methods,
136
+ "schemas_generated": metrics.schemas_generated,
137
+ "manual_schemas": manual_count,
138
+ "auto_generated_schemas": auto_count,
139
+ "missing_schemas": metrics.total_methods - metrics.schemas_generated,
140
+ "coverage_percentage": scores["generation_rate"],
141
+ "description_quality": scores["description_quality"],
142
+ "type_coverage": scores["type_coverage"],
143
+ "overall_score": scores["overall_score"],
144
+ "methods": [
145
+ {
146
+ "name": m["name"],
147
+ "has_schema": m["schema"] is not None,
148
+ "schema_type": m.get("schema_type", "none"),
149
+ "issues": m.get("issues", []),
150
+ }
151
+ for m in methods
152
+ ],
153
+ }
154
+
155
+ # Filter by minimum coverage if specified
156
+ if min_coverage > 0:
157
+ filtered_tools = {
158
+ name: data
159
+ for name, data in report_data["tools"].items()
160
+ if data["coverage_percentage"] >= min_coverage
161
+ }
162
+ report_data["tools"] = filtered_tools
163
+ report_data["summary"]["tools_meeting_threshold"] = len(filtered_tools)
164
+
165
+ # Generate output based on format
166
+ if format == "json":
167
+ output_text = json.dumps(report_data, indent=2, ensure_ascii=False)
168
+ elif format == "html":
169
+ output_text = generate_html_report(report_data)
170
+ else: # text format
171
+ output_text = generate_text_report(report_data, min_coverage)
172
+
173
+ # Write output
174
+ if output:
175
+ with open(output, "w", encoding="utf-8") as f:
176
+ f.write(output_text)
177
+ print(f"Report written to {output}", file=sys.stderr)
178
+ else:
179
+ print(output_text)
180
+
181
+ return report_data
182
+
183
+
184
+ def generate_text_report(report_data: Dict[str, Any], min_coverage: float) -> str:
185
+ """Generate text format report."""
186
+ summary = report_data["summary"]
187
+ tools = report_data["tools"]
188
+
189
+ lines = []
190
+ lines.append("=" * 100)
191
+ lines.append("Schema Coverage Report")
192
+ lines.append("=" * 100)
193
+ lines.append(f"Generated: {report_data['timestamp']}")
194
+ lines.append("")
195
+
196
+ # Summary section
197
+ lines.append("SUMMARY")
198
+ lines.append("-" * 100)
199
+ lines.append(f"Total Tools: {summary['total_tools']}")
200
+ lines.append(f"Total Methods: {summary['total_methods']}")
201
+ lines.append(f"Schemas Generated: {summary['total_schemas']} ({summary['coverage_percentage']:.1f}%)")
202
+ lines.append(f" - Manual: {summary['manual_schemas']}")
203
+ lines.append(f" - Auto-generated: {summary['auto_generated_schemas']}")
204
+ lines.append(f"Missing Schemas: {summary['missing_schemas']}")
205
+ lines.append(f"Description Quality: {summary['description_quality']:.1f}%")
206
+ lines.append(f"Type Coverage: {summary['type_coverage']:.1f}%")
207
+ lines.append(f"Overall Score: {summary['overall_score']:.1f}%")
208
+ lines.append("")
209
+
210
+ # Tools section
211
+ lines.append("TOOLS DETAILS")
212
+ lines.append("-" * 100)
213
+
214
+ # Sort tools by coverage
215
+ sorted_tools = sorted(
216
+ tools.items(),
217
+ key=lambda x: x[1]["coverage_percentage"],
218
+ reverse=True
219
+ )
220
+
221
+ for tool_name, tool_data in sorted_tools:
222
+ coverage = tool_data["coverage_percentage"]
223
+ status = "✅" if coverage >= 90 else "⚠️" if coverage >= 70 else "❌"
224
+
225
+ lines.append(f"\n{status} {tool_name}")
226
+ lines.append(f" Methods: {tool_data['total_methods']}")
227
+ lines.append(f" Coverage: {coverage:.1f}% ({tool_data['schemas_generated']}/{tool_data['total_methods']})")
228
+ lines.append(f" - Manual: {tool_data['manual_schemas']}")
229
+ lines.append(f" - Auto: {tool_data['auto_generated_schemas']}")
230
+ lines.append(f" - Missing: {tool_data['missing_schemas']}")
231
+ lines.append(f" Description Quality: {tool_data['description_quality']:.1f}%")
232
+ lines.append(f" Type Coverage: {tool_data['type_coverage']:.1f}%")
233
+ lines.append(f" Overall Score: {tool_data['overall_score']:.1f}%")
234
+
235
+ # List methods without schemas
236
+ missing_methods = [
237
+ m["name"] for m in tool_data["methods"]
238
+ if not m["has_schema"]
239
+ ]
240
+ if missing_methods:
241
+ lines.append(f" Missing Schemas: {', '.join(missing_methods)}")
242
+
243
+ lines.append("")
244
+ lines.append("=" * 100)
245
+
246
+ return "\n".join(lines)
247
+
248
+
249
+ def generate_html_report(report_data: Dict[str, Any]) -> str:
250
+ """Generate HTML format report."""
251
+ summary = report_data["summary"]
252
+ tools = report_data["tools"]
253
+
254
+ html = """<!DOCTYPE html>
255
+ <html>
256
+ <head>
257
+ <meta charset="UTF-8">
258
+ <title>Schema Coverage Report</title>
259
+ <style>
260
+ body {
261
+ font-family: Arial, sans-serif;
262
+ margin: 20px;
263
+ background-color: #f5f5f5;
264
+ }
265
+ .container {
266
+ max-width: 1200px;
267
+ margin: 0 auto;
268
+ background-color: white;
269
+ padding: 20px;
270
+ border-radius: 8px;
271
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
272
+ }
273
+ h1 {
274
+ color: #333;
275
+ border-bottom: 3px solid #4CAF50;
276
+ padding-bottom: 10px;
277
+ }
278
+ .summary {
279
+ background-color: #f9f9f9;
280
+ padding: 15px;
281
+ border-radius: 5px;
282
+ margin: 20px 0;
283
+ }
284
+ .summary-grid {
285
+ display: grid;
286
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
287
+ gap: 15px;
288
+ margin-top: 15px;
289
+ }
290
+ .summary-item {
291
+ background-color: white;
292
+ padding: 10px;
293
+ border-radius: 5px;
294
+ border-left: 4px solid #4CAF50;
295
+ }
296
+ .summary-item h3 {
297
+ margin: 0 0 5px 0;
298
+ color: #666;
299
+ font-size: 0.9em;
300
+ }
301
+ .summary-item .value {
302
+ font-size: 1.5em;
303
+ font-weight: bold;
304
+ color: #333;
305
+ }
306
+ table {
307
+ width: 100%;
308
+ border-collapse: collapse;
309
+ margin-top: 20px;
310
+ }
311
+ th, td {
312
+ padding: 12px;
313
+ text-align: left;
314
+ border-bottom: 1px solid #ddd;
315
+ }
316
+ th {
317
+ background-color: #4CAF50;
318
+ color: white;
319
+ font-weight: bold;
320
+ }
321
+ tr:hover {
322
+ background-color: #f5f5f5;
323
+ }
324
+ .status-good {
325
+ color: #4CAF50;
326
+ font-weight: bold;
327
+ }
328
+ .status-warning {
329
+ color: #FF9800;
330
+ font-weight: bold;
331
+ }
332
+ .status-bad {
333
+ color: #F44336;
334
+ font-weight: bold;
335
+ }
336
+ .progress-bar {
337
+ width: 100%;
338
+ height: 20px;
339
+ background-color: #e0e0e0;
340
+ border-radius: 10px;
341
+ overflow: hidden;
342
+ }
343
+ .progress-fill {
344
+ height: 100%;
345
+ background-color: #4CAF50;
346
+ transition: width 0.3s ease;
347
+ }
348
+ .progress-fill.warning {
349
+ background-color: #FF9800;
350
+ }
351
+ .progress-fill.bad {
352
+ background-color: #F44336;
353
+ }
354
+ </style>
355
+ </head>
356
+ <body>
357
+ <div class="container">
358
+ <h1>Schema Coverage Report</h1>
359
+ <p>Generated: {timestamp}</p>
360
+
361
+ <div class="summary">
362
+ <h2>Summary</h2>
363
+ <div class="summary-grid">
364
+ <div class="summary-item">
365
+ <h3>Total Tools</h3>
366
+ <div class="value">{total_tools}</div>
367
+ </div>
368
+ <div class="summary-item">
369
+ <h3>Total Methods</h3>
370
+ <div class="value">{total_methods}</div>
371
+ </div>
372
+ <div class="summary-item">
373
+ <h3>Coverage</h3>
374
+ <div class="value">{coverage:.1f}%</div>
375
+ </div>
376
+ <div class="summary-item">
377
+ <h3>Overall Score</h3>
378
+ <div class="value">{overall_score:.1f}%</div>
379
+ </div>
380
+ </div>
381
+ </div>
382
+
383
+ <h2>Tools Details</h2>
384
+ <table>
385
+ <thead>
386
+ <tr>
387
+ <th>Tool</th>
388
+ <th>Methods</th>
389
+ <th>Coverage</th>
390
+ <th>Manual</th>
391
+ <th>Auto</th>
392
+ <th>Missing</th>
393
+ <th>Description Quality</th>
394
+ <th>Type Coverage</th>
395
+ <th>Overall Score</th>
396
+ </tr>
397
+ </thead>
398
+ <tbody>
399
+ """
400
+
401
+ # Sort tools by coverage
402
+ sorted_tools = sorted(
403
+ tools.items(),
404
+ key=lambda x: x[1]["coverage_percentage"],
405
+ reverse=True
406
+ )
407
+
408
+ for tool_name, tool_data in sorted_tools:
409
+ coverage = tool_data["coverage_percentage"]
410
+ status_class = "status-good" if coverage >= 90 else "status-warning" if coverage >= 70 else "status-bad"
411
+ progress_class = "" if coverage >= 90 else "warning" if coverage >= 70 else "bad"
412
+
413
+ html += f"""
414
+ <tr>
415
+ <td><strong>{tool_name}</strong></td>
416
+ <td>{tool_data['total_methods']}</td>
417
+ <td>
418
+ <span class="{status_class}">{coverage:.1f}%</span>
419
+ <div class="progress-bar">
420
+ <div class="progress-fill {progress_class}" style="width: {coverage}%"></div>
421
+ </div>
422
+ </td>
423
+ <td>{tool_data['manual_schemas']}</td>
424
+ <td>{tool_data['auto_generated_schemas']}</td>
425
+ <td>{tool_data['missing_schemas']}</td>
426
+ <td>{tool_data['description_quality']:.1f}%</td>
427
+ <td>{tool_data['type_coverage']:.1f}%</td>
428
+ <td>{tool_data['overall_score']:.1f}%</td>
429
+ </tr>
430
+ """
431
+
432
+ html += """
433
+ </tbody>
434
+ </table>
435
+ </div>
436
+ </body>
437
+ </html>
438
+ """
439
+
440
+ return html.format(
441
+ timestamp=report_data["timestamp"],
442
+ total_tools=summary["total_tools"],
443
+ total_methods=summary["total_methods"],
444
+ coverage=summary["coverage_percentage"],
445
+ overall_score=summary["overall_score"],
446
+ )
447
+
448
+
449
+ def main():
450
+ """CLI entry point."""
451
+ parser = argparse.ArgumentParser(
452
+ description="Report schema coverage across all tools",
453
+ formatter_class=argparse.RawDescriptionHelpFormatter,
454
+ epilog="""
455
+ Examples:
456
+ # Report coverage for all tools (text format)
457
+ aiecs tools schema-coverage
458
+
459
+ # Report coverage in JSON format
460
+ aiecs tools schema-coverage --format json
461
+
462
+ # Report coverage in HTML format
463
+ aiecs tools schema-coverage --format html --output coverage.html
464
+
465
+ # Report coverage for specific tools
466
+ aiecs tools schema-coverage pandas stats
467
+
468
+ # Set minimum coverage threshold
469
+ aiecs tools schema-coverage --min-coverage 90
470
+ """,
471
+ )
472
+
473
+ parser.add_argument(
474
+ "tools",
475
+ nargs="*",
476
+ help="Tool names to report on (default: all tools)"
477
+ )
478
+
479
+ parser.add_argument(
480
+ "-f", "--format",
481
+ choices=["text", "json", "html"],
482
+ default="text",
483
+ help="Output format (default: text)"
484
+ )
485
+
486
+ parser.add_argument(
487
+ "-o", "--output",
488
+ help="Output file path (default: stdout)"
489
+ )
490
+
491
+ parser.add_argument(
492
+ "-m", "--min-coverage",
493
+ type=float,
494
+ default=0.0,
495
+ help="Minimum coverage threshold (0-100, default: 0)"
496
+ )
497
+
498
+ args = parser.parse_args()
499
+
500
+ tool_names = args.tools if args.tools else None
501
+ generate_coverage_report(
502
+ tool_names=tool_names,
503
+ format=args.format,
504
+ output=args.output,
505
+ min_coverage=args.min_coverage,
506
+ )
507
+
508
+
509
+ if __name__ == "__main__":
510
+ main()
511
+