aiecs 1.0.1__py3-none-any.whl → 1.7.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of aiecs might be problematic. Click here for more details.
- aiecs/__init__.py +13 -16
- aiecs/__main__.py +7 -7
- aiecs/aiecs_client.py +269 -75
- aiecs/application/executors/operation_executor.py +79 -54
- aiecs/application/knowledge_graph/__init__.py +7 -0
- aiecs/application/knowledge_graph/builder/__init__.py +37 -0
- aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
- aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
- aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
- aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
- aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
- aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
- aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
- aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
- aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
- aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
- aiecs/application/knowledge_graph/extractors/base.py +98 -0
- aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
- aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
- aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
- aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
- aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
- aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
- aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
- aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
- aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
- aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
- aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
- aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
- aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
- aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
- aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
- aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
- aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
- aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
- aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
- aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
- aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
- aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
- aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
- aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
- aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
- aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
- aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
- aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
- aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
- aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
- aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
- aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
- aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
- aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
- aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
- aiecs/application/knowledge_graph/search/__init__.py +59 -0
- aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
- aiecs/application/knowledge_graph/search/reranker.py +293 -0
- aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
- aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
- aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
- aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
- aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
- aiecs/application/knowledge_graph/validators/__init__.py +13 -0
- aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
- aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
- aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
- aiecs/common/__init__.py +9 -0
- aiecs/common/knowledge_graph/__init__.py +17 -0
- aiecs/common/knowledge_graph/runnable.py +471 -0
- aiecs/config/__init__.py +20 -5
- aiecs/config/config.py +762 -31
- aiecs/config/graph_config.py +131 -0
- aiecs/config/tool_config.py +399 -0
- aiecs/core/__init__.py +29 -13
- aiecs/core/interface/__init__.py +2 -2
- aiecs/core/interface/execution_interface.py +22 -22
- aiecs/core/interface/storage_interface.py +37 -88
- aiecs/core/registry/__init__.py +31 -0
- aiecs/core/registry/service_registry.py +92 -0
- aiecs/domain/__init__.py +270 -1
- aiecs/domain/agent/__init__.py +191 -0
- aiecs/domain/agent/base_agent.py +3870 -0
- aiecs/domain/agent/exceptions.py +99 -0
- aiecs/domain/agent/graph_aware_mixin.py +569 -0
- aiecs/domain/agent/hybrid_agent.py +1435 -0
- aiecs/domain/agent/integration/__init__.py +29 -0
- aiecs/domain/agent/integration/context_compressor.py +216 -0
- aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
- aiecs/domain/agent/integration/protocols.py +281 -0
- aiecs/domain/agent/integration/retry_policy.py +218 -0
- aiecs/domain/agent/integration/role_config.py +213 -0
- aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
- aiecs/domain/agent/lifecycle.py +291 -0
- aiecs/domain/agent/llm_agent.py +692 -0
- aiecs/domain/agent/memory/__init__.py +12 -0
- aiecs/domain/agent/memory/conversation.py +1124 -0
- aiecs/domain/agent/migration/__init__.py +14 -0
- aiecs/domain/agent/migration/conversion.py +163 -0
- aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
- aiecs/domain/agent/models.py +884 -0
- aiecs/domain/agent/observability.py +479 -0
- aiecs/domain/agent/persistence.py +449 -0
- aiecs/domain/agent/prompts/__init__.py +29 -0
- aiecs/domain/agent/prompts/builder.py +159 -0
- aiecs/domain/agent/prompts/formatters.py +187 -0
- aiecs/domain/agent/prompts/template.py +255 -0
- aiecs/domain/agent/registry.py +253 -0
- aiecs/domain/agent/tool_agent.py +444 -0
- aiecs/domain/agent/tools/__init__.py +15 -0
- aiecs/domain/agent/tools/schema_generator.py +364 -0
- aiecs/domain/community/__init__.py +155 -0
- aiecs/domain/community/agent_adapter.py +469 -0
- aiecs/domain/community/analytics.py +432 -0
- aiecs/domain/community/collaborative_workflow.py +648 -0
- aiecs/domain/community/communication_hub.py +634 -0
- aiecs/domain/community/community_builder.py +320 -0
- aiecs/domain/community/community_integration.py +796 -0
- aiecs/domain/community/community_manager.py +803 -0
- aiecs/domain/community/decision_engine.py +849 -0
- aiecs/domain/community/exceptions.py +231 -0
- aiecs/domain/community/models/__init__.py +33 -0
- aiecs/domain/community/models/community_models.py +234 -0
- aiecs/domain/community/resource_manager.py +461 -0
- aiecs/domain/community/shared_context_manager.py +589 -0
- aiecs/domain/context/__init__.py +40 -10
- aiecs/domain/context/context_engine.py +1910 -0
- aiecs/domain/context/conversation_models.py +87 -53
- aiecs/domain/context/graph_memory.py +582 -0
- aiecs/domain/execution/model.py +12 -4
- aiecs/domain/knowledge_graph/__init__.py +19 -0
- aiecs/domain/knowledge_graph/models/__init__.py +52 -0
- aiecs/domain/knowledge_graph/models/entity.py +148 -0
- aiecs/domain/knowledge_graph/models/evidence.py +178 -0
- aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
- aiecs/domain/knowledge_graph/models/path.py +171 -0
- aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
- aiecs/domain/knowledge_graph/models/query.py +261 -0
- aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
- aiecs/domain/knowledge_graph/models/relation.py +202 -0
- aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
- aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
- aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
- aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
- aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
- aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
- aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
- aiecs/domain/task/dsl_processor.py +172 -56
- aiecs/domain/task/model.py +20 -8
- aiecs/domain/task/task_context.py +27 -24
- aiecs/infrastructure/__init__.py +0 -2
- aiecs/infrastructure/graph_storage/__init__.py +11 -0
- aiecs/infrastructure/graph_storage/base.py +837 -0
- aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
- aiecs/infrastructure/graph_storage/cache.py +424 -0
- aiecs/infrastructure/graph_storage/distributed.py +223 -0
- aiecs/infrastructure/graph_storage/error_handling.py +380 -0
- aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
- aiecs/infrastructure/graph_storage/health_checks.py +378 -0
- aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
- aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
- aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
- aiecs/infrastructure/graph_storage/metrics.py +344 -0
- aiecs/infrastructure/graph_storage/migration.py +400 -0
- aiecs/infrastructure/graph_storage/pagination.py +483 -0
- aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
- aiecs/infrastructure/graph_storage/postgres.py +1563 -0
- aiecs/infrastructure/graph_storage/property_storage.py +353 -0
- aiecs/infrastructure/graph_storage/protocols.py +76 -0
- aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
- aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
- aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
- aiecs/infrastructure/graph_storage/streaming.py +487 -0
- aiecs/infrastructure/graph_storage/tenant.py +412 -0
- aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
- aiecs/infrastructure/messaging/websocket_manager.py +51 -35
- aiecs/infrastructure/monitoring/__init__.py +22 -0
- aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
- aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
- aiecs/infrastructure/monitoring/structured_logger.py +3 -7
- aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
- aiecs/infrastructure/persistence/__init__.py +14 -1
- aiecs/infrastructure/persistence/context_engine_client.py +184 -0
- aiecs/infrastructure/persistence/database_manager.py +67 -43
- aiecs/infrastructure/persistence/file_storage.py +180 -103
- aiecs/infrastructure/persistence/redis_client.py +74 -21
- aiecs/llm/__init__.py +73 -25
- aiecs/llm/callbacks/__init__.py +11 -0
- aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
- aiecs/llm/client_factory.py +224 -36
- aiecs/llm/client_resolver.py +155 -0
- aiecs/llm/clients/__init__.py +38 -0
- aiecs/llm/clients/base_client.py +324 -0
- aiecs/llm/clients/google_function_calling_mixin.py +457 -0
- aiecs/llm/clients/googleai_client.py +241 -0
- aiecs/llm/clients/openai_client.py +158 -0
- aiecs/llm/clients/openai_compatible_mixin.py +367 -0
- aiecs/llm/clients/vertex_client.py +897 -0
- aiecs/llm/clients/xai_client.py +201 -0
- aiecs/llm/config/__init__.py +51 -0
- aiecs/llm/config/config_loader.py +272 -0
- aiecs/llm/config/config_validator.py +206 -0
- aiecs/llm/config/model_config.py +143 -0
- aiecs/llm/protocols.py +149 -0
- aiecs/llm/utils/__init__.py +10 -0
- aiecs/llm/utils/validate_config.py +89 -0
- aiecs/main.py +140 -121
- aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
- aiecs/scripts/aid/__init__.py +19 -0
- aiecs/scripts/aid/module_checker.py +499 -0
- aiecs/scripts/aid/version_manager.py +235 -0
- aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
- aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
- aiecs/scripts/dependance_check/__init__.py +15 -0
- aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
- aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
- aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
- aiecs/scripts/dependance_patch/__init__.py +7 -0
- aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
- aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
- aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
- aiecs/scripts/knowledge_graph/__init__.py +3 -0
- aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
- aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
- aiecs/scripts/tools_develop/README.md +671 -0
- aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
- aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
- aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
- aiecs/scripts/tools_develop/__init__.py +21 -0
- aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
- aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
- aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
- aiecs/scripts/tools_develop/schema_coverage.py +511 -0
- aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
- aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
- aiecs/scripts/tools_develop/verify_tools.py +352 -0
- aiecs/tasks/__init__.py +0 -1
- aiecs/tasks/worker.py +115 -47
- aiecs/tools/__init__.py +194 -72
- aiecs/tools/apisource/__init__.py +99 -0
- aiecs/tools/apisource/intelligence/__init__.py +19 -0
- aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
- aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
- aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
- aiecs/tools/apisource/monitoring/__init__.py +9 -0
- aiecs/tools/apisource/monitoring/metrics.py +330 -0
- aiecs/tools/apisource/providers/__init__.py +112 -0
- aiecs/tools/apisource/providers/base.py +671 -0
- aiecs/tools/apisource/providers/census.py +397 -0
- aiecs/tools/apisource/providers/fred.py +535 -0
- aiecs/tools/apisource/providers/newsapi.py +409 -0
- aiecs/tools/apisource/providers/worldbank.py +352 -0
- aiecs/tools/apisource/reliability/__init__.py +12 -0
- aiecs/tools/apisource/reliability/error_handler.py +363 -0
- aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
- aiecs/tools/apisource/tool.py +832 -0
- aiecs/tools/apisource/utils/__init__.py +9 -0
- aiecs/tools/apisource/utils/validators.py +334 -0
- aiecs/tools/base_tool.py +415 -21
- aiecs/tools/docs/__init__.py +121 -0
- aiecs/tools/docs/ai_document_orchestrator.py +607 -0
- aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
- aiecs/tools/docs/content_insertion_tool.py +1320 -0
- aiecs/tools/docs/document_creator_tool.py +1323 -0
- aiecs/tools/docs/document_layout_tool.py +1160 -0
- aiecs/tools/docs/document_parser_tool.py +1011 -0
- aiecs/tools/docs/document_writer_tool.py +1829 -0
- aiecs/tools/knowledge_graph/__init__.py +17 -0
- aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
- aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
- aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
- aiecs/tools/langchain_adapter.py +300 -138
- aiecs/tools/schema_generator.py +455 -0
- aiecs/tools/search_tool/__init__.py +100 -0
- aiecs/tools/search_tool/analyzers.py +581 -0
- aiecs/tools/search_tool/cache.py +264 -0
- aiecs/tools/search_tool/constants.py +128 -0
- aiecs/tools/search_tool/context.py +224 -0
- aiecs/tools/search_tool/core.py +778 -0
- aiecs/tools/search_tool/deduplicator.py +119 -0
- aiecs/tools/search_tool/error_handler.py +242 -0
- aiecs/tools/search_tool/metrics.py +343 -0
- aiecs/tools/search_tool/rate_limiter.py +172 -0
- aiecs/tools/search_tool/schemas.py +275 -0
- aiecs/tools/statistics/__init__.py +80 -0
- aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
- aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
- aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
- aiecs/tools/statistics/data_loader_tool.py +555 -0
- aiecs/tools/statistics/data_profiler_tool.py +638 -0
- aiecs/tools/statistics/data_transformer_tool.py +580 -0
- aiecs/tools/statistics/data_visualizer_tool.py +498 -0
- aiecs/tools/statistics/model_trainer_tool.py +507 -0
- aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
- aiecs/tools/task_tools/__init__.py +49 -36
- aiecs/tools/task_tools/chart_tool.py +200 -184
- aiecs/tools/task_tools/classfire_tool.py +268 -267
- aiecs/tools/task_tools/image_tool.py +175 -131
- aiecs/tools/task_tools/office_tool.py +226 -146
- aiecs/tools/task_tools/pandas_tool.py +477 -121
- aiecs/tools/task_tools/report_tool.py +390 -142
- aiecs/tools/task_tools/research_tool.py +149 -79
- aiecs/tools/task_tools/scraper_tool.py +339 -145
- aiecs/tools/task_tools/stats_tool.py +448 -209
- aiecs/tools/temp_file_manager.py +26 -24
- aiecs/tools/tool_executor/__init__.py +18 -16
- aiecs/tools/tool_executor/tool_executor.py +364 -52
- aiecs/utils/LLM_output_structor.py +74 -48
- aiecs/utils/__init__.py +14 -3
- aiecs/utils/base_callback.py +0 -3
- aiecs/utils/cache_provider.py +696 -0
- aiecs/utils/execution_utils.py +50 -31
- aiecs/utils/prompt_loader.py +1 -0
- aiecs/utils/token_usage_repository.py +37 -11
- aiecs/ws/socket_server.py +14 -4
- {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/METADATA +52 -15
- aiecs-1.7.6.dist-info/RECORD +337 -0
- aiecs-1.7.6.dist-info/entry_points.txt +13 -0
- aiecs/config/registry.py +0 -19
- aiecs/domain/context/content_engine.py +0 -982
- aiecs/llm/base_client.py +0 -99
- aiecs/llm/openai_client.py +0 -125
- aiecs/llm/vertex_client.py +0 -186
- aiecs/llm/xai_client.py +0 -184
- aiecs/scripts/dependency_checker.py +0 -857
- aiecs/scripts/quick_dependency_check.py +0 -269
- aiecs/tools/task_tools/search_api.py +0 -7
- aiecs-1.0.1.dist-info/RECORD +0 -90
- aiecs-1.0.1.dist-info/entry_points.txt +0 -7
- /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
- /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
- /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
- /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/WHEEL +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/licenses/LICENSE +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.6.dist-info}/top_level.txt +0 -0
|
@@ -39,7 +39,6 @@ class LLMOutputTransformer:
|
|
|
39
39
|
"agent_requirements": "required components",
|
|
40
40
|
"meta_architect": "strategic planner",
|
|
41
41
|
"intent_parser": "request analyzer",
|
|
42
|
-
|
|
43
42
|
# Analysis terms
|
|
44
43
|
"fails most SMART criteria": "lacks several key details",
|
|
45
44
|
"SMART criteria": "clarity requirements",
|
|
@@ -49,7 +48,6 @@ class LLMOutputTransformer:
|
|
|
49
48
|
"not Time-bound": "missing timeframe",
|
|
50
49
|
"high-level goal": "general objective",
|
|
51
50
|
"actionable task": "specific action item",
|
|
52
|
-
|
|
53
51
|
# Common phrases
|
|
54
52
|
"classic example": "typical case",
|
|
55
53
|
"significant clarification": "more details",
|
|
@@ -58,7 +56,7 @@ class LLMOutputTransformer:
|
|
|
58
56
|
"problem_analysis": "situation assessment",
|
|
59
57
|
"intent parsing": "request understanding",
|
|
60
58
|
"blueprint": "detailed plan",
|
|
61
|
-
"roadmap": "action sequence"
|
|
59
|
+
"roadmap": "action sequence",
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
# Friendly section headers
|
|
@@ -71,26 +69,31 @@ class LLMOutputTransformer:
|
|
|
71
69
|
"Key Components:": "🔧 Main Elements:",
|
|
72
70
|
"Confidence:": "📊 Confidence Level:",
|
|
73
71
|
"Intent Categories:": "🎯 Identified Goals:",
|
|
74
|
-
"Complexity:": "📈 Complexity Level:"
|
|
72
|
+
"Complexity:": "📈 Complexity Level:",
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
# Opening greetings
|
|
78
76
|
self.greetings = {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
"clarification": "Hello! Thank you for reaching out. Let me help you with your request.",
|
|
78
|
+
"confirmation": "Great! I've carefully analyzed your requirements.",
|
|
79
|
+
"completion": "Excellent! I've completed the analysis.",
|
|
80
|
+
"general": "Thank you for your message.",
|
|
83
81
|
}
|
|
84
82
|
|
|
85
83
|
# Closing messages
|
|
86
84
|
self.closings = {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
"clarification": "\n\n✨ These details will help me provide you with the most accurate and helpful solution!",
|
|
86
|
+
"confirmation": "\n\n🤝 I'm ready to proceed whenever you are. Feel free to ask any questions or suggest modifications!",
|
|
87
|
+
"completion": "\n\n✅ Everything is set up and ready. Let me know if you need any adjustments!",
|
|
88
|
+
"general": "\n\n💬 Please let me know if you need any clarification!",
|
|
91
89
|
}
|
|
92
90
|
|
|
93
|
-
def transform_message(
|
|
91
|
+
def transform_message(
|
|
92
|
+
self,
|
|
93
|
+
content: str,
|
|
94
|
+
message_type: str = "general",
|
|
95
|
+
preserve_structure: bool = True,
|
|
96
|
+
) -> str:
|
|
94
97
|
"""
|
|
95
98
|
Transform LLM output to be more readable while preserving content.
|
|
96
99
|
|
|
@@ -109,9 +112,9 @@ class LLMOutputTransformer:
|
|
|
109
112
|
transformed_content = self._enhance_readability(content)
|
|
110
113
|
|
|
111
114
|
# Special handling for different message types
|
|
112
|
-
if message_type ==
|
|
115
|
+
if message_type == "clarification":
|
|
113
116
|
transformed_content = self._enhance_clarification(transformed_content)
|
|
114
|
-
elif message_type ==
|
|
117
|
+
elif message_type == "confirmation":
|
|
115
118
|
transformed_content = self._enhance_confirmation(transformed_content)
|
|
116
119
|
|
|
117
120
|
result += "\n\n" + transformed_content
|
|
@@ -123,11 +126,11 @@ class LLMOutputTransformer:
|
|
|
123
126
|
|
|
124
127
|
def _add_greeting(self, message_type: str) -> str:
|
|
125
128
|
"""Add an appropriate greeting based on message type."""
|
|
126
|
-
return self.greetings.get(message_type, self.greetings[
|
|
129
|
+
return self.greetings.get(message_type, self.greetings["general"])
|
|
127
130
|
|
|
128
131
|
def _add_closing(self, message_type: str) -> str:
|
|
129
132
|
"""Add an appropriate closing based on message type."""
|
|
130
|
-
return self.closings.get(message_type, self.closings[
|
|
133
|
+
return self.closings.get(message_type, self.closings["general"])
|
|
131
134
|
|
|
132
135
|
def _enhance_readability(self, content: str) -> str:
|
|
133
136
|
"""Enhance readability by replacing technical terms and improving formatting."""
|
|
@@ -140,7 +143,12 @@ class LLMOutputTransformer:
|
|
|
140
143
|
# Replace technical terms with friendly alternatives
|
|
141
144
|
for technical, friendly in self.technical_replacements.items():
|
|
142
145
|
# Case-insensitive replacement
|
|
143
|
-
result = re.sub(
|
|
146
|
+
result = re.sub(
|
|
147
|
+
rf"\b{re.escape(technical)}\b",
|
|
148
|
+
friendly,
|
|
149
|
+
result,
|
|
150
|
+
flags=re.IGNORECASE,
|
|
151
|
+
)
|
|
144
152
|
|
|
145
153
|
# Improve JSON-like structures visibility
|
|
146
154
|
result = self._format_json_structures(result)
|
|
@@ -160,7 +168,7 @@ class LLMOutputTransformer:
|
|
|
160
168
|
r"(💭 My Analysis:)(.*?)(?=\n\n|$)",
|
|
161
169
|
lambda m: f"{m.group(1)}\n{self._make_reasoning_conversational(m.group(2))}",
|
|
162
170
|
content,
|
|
163
|
-
flags=re.DOTALL
|
|
171
|
+
flags=re.DOTALL,
|
|
164
172
|
)
|
|
165
173
|
|
|
166
174
|
# Format questions better
|
|
@@ -175,7 +183,7 @@ class LLMOutputTransformer:
|
|
|
175
183
|
r"I have generated a detailed (.*?):(.*?)(?=Do you|Would you|$)",
|
|
176
184
|
r"I've prepared a comprehensive \1 for you:\n\n\2\n",
|
|
177
185
|
content,
|
|
178
|
-
flags=re.DOTALL
|
|
186
|
+
flags=re.DOTALL,
|
|
179
187
|
)
|
|
180
188
|
|
|
181
189
|
# Format proposed plans better
|
|
@@ -183,7 +191,7 @@ class LLMOutputTransformer:
|
|
|
183
191
|
r"Proposed plan:(.*?)(?=Do you|Would you|$)",
|
|
184
192
|
r"📋 **Proposed Approach:**\n\1\n",
|
|
185
193
|
content,
|
|
186
|
-
flags=re.DOTALL
|
|
194
|
+
flags=re.DOTALL,
|
|
187
195
|
)
|
|
188
196
|
|
|
189
197
|
return content
|
|
@@ -194,7 +202,7 @@ class LLMOutputTransformer:
|
|
|
194
202
|
reasoning = self._convert_perspective(reasoning)
|
|
195
203
|
|
|
196
204
|
# Split into sentences for processing
|
|
197
|
-
sentences = reasoning.strip().split(
|
|
205
|
+
sentences = reasoning.strip().split(".")
|
|
198
206
|
conversational_parts = []
|
|
199
207
|
|
|
200
208
|
for i, sentence in enumerate(sentences):
|
|
@@ -204,8 +212,13 @@ class LLMOutputTransformer:
|
|
|
204
212
|
|
|
205
213
|
# Make the first sentence more natural
|
|
206
214
|
if i == 0:
|
|
207
|
-
# Remove phrases like "is a classic example of" to be more
|
|
208
|
-
|
|
215
|
+
# Remove phrases like "is a classic example of" to be more
|
|
216
|
+
# direct
|
|
217
|
+
sentence = re.sub(
|
|
218
|
+
r"is a (?:classic|typical|clear) example of",
|
|
219
|
+
"seems to be",
|
|
220
|
+
sentence,
|
|
221
|
+
)
|
|
209
222
|
sentence = "Looking at what you've shared, " + sentence.lower()
|
|
210
223
|
# For sentences about what's missing
|
|
211
224
|
elif any(word in sentence.lower() for word in ["lacks", "missing", "doesn't have", "without"]):
|
|
@@ -213,7 +226,12 @@ class LLMOutputTransformer:
|
|
|
213
226
|
sentence = "I notice that it " + sentence.lower()
|
|
214
227
|
# For sentences about what's not clear
|
|
215
228
|
elif "not" in sentence.lower() and any(word in sentence.lower() for word in ["specific", "clear", "measurable"]):
|
|
216
|
-
sentence = re.sub(
|
|
229
|
+
sentence = re.sub(
|
|
230
|
+
r"it is not",
|
|
231
|
+
"it isn't quite",
|
|
232
|
+
sentence,
|
|
233
|
+
flags=re.IGNORECASE,
|
|
234
|
+
)
|
|
217
235
|
if not sentence.lower().startswith(("i ", "this ")):
|
|
218
236
|
sentence = "I can see that " + sentence.lower()
|
|
219
237
|
# For requirement sentences
|
|
@@ -226,9 +244,9 @@ class LLMOutputTransformer:
|
|
|
226
244
|
|
|
227
245
|
conversational_parts.append(sentence)
|
|
228
246
|
|
|
229
|
-
result =
|
|
230
|
-
if result and not result.endswith(
|
|
231
|
-
result +=
|
|
247
|
+
result = ". ".join(conversational_parts)
|
|
248
|
+
if result and not result.endswith("."):
|
|
249
|
+
result += "."
|
|
232
250
|
|
|
233
251
|
return result
|
|
234
252
|
|
|
@@ -246,7 +264,12 @@ class LLMOutputTransformer:
|
|
|
246
264
|
|
|
247
265
|
# Replace impersonal constructions
|
|
248
266
|
text = re.sub(r"it is (?:a|an)", "this is", text, flags=re.IGNORECASE)
|
|
249
|
-
text = re.sub(
|
|
267
|
+
text = re.sub(
|
|
268
|
+
r"this is (?:a|an) vague",
|
|
269
|
+
"this seems vague",
|
|
270
|
+
text,
|
|
271
|
+
flags=re.IGNORECASE,
|
|
272
|
+
)
|
|
250
273
|
|
|
251
274
|
return text
|
|
252
275
|
|
|
@@ -264,9 +287,9 @@ class LLMOutputTransformer:
|
|
|
264
287
|
formatted = "📝 Questions to Help Me Understand Better:\n\n"
|
|
265
288
|
for i, q in enumerate(questions, 1):
|
|
266
289
|
# Clean up the question
|
|
267
|
-
q = q.strip().strip(
|
|
268
|
-
if not q.endswith(
|
|
269
|
-
q +=
|
|
290
|
+
q = q.strip().strip("-*•")
|
|
291
|
+
if not q.endswith("?"):
|
|
292
|
+
q += "?"
|
|
270
293
|
formatted += f"**{i}.** {q}\n\n"
|
|
271
294
|
|
|
272
295
|
# Replace the original questions section
|
|
@@ -277,18 +300,19 @@ class LLMOutputTransformer:
|
|
|
277
300
|
def _extract_questions(self, text: str) -> List[str]:
|
|
278
301
|
"""Extract individual questions from text."""
|
|
279
302
|
# Split by semicolons or line breaks
|
|
280
|
-
parts = re.split(r
|
|
303
|
+
parts = re.split(r"[;\n]", text)
|
|
281
304
|
questions = []
|
|
282
305
|
|
|
283
306
|
for part in parts:
|
|
284
307
|
part = part.strip()
|
|
285
|
-
if part and not part.startswith(
|
|
308
|
+
if part and not part.startswith("*Reason:"):
|
|
286
309
|
questions.append(part)
|
|
287
310
|
|
|
288
311
|
return questions
|
|
289
312
|
|
|
290
313
|
def _format_json_structures(self, content: str) -> str:
|
|
291
314
|
"""Format JSON-like structures to be more readable."""
|
|
315
|
+
|
|
292
316
|
# Find JSON-like structures
|
|
293
317
|
def format_dict(match):
|
|
294
318
|
try:
|
|
@@ -300,32 +324,37 @@ class LLMOutputTransformer:
|
|
|
300
324
|
formatted = formatted.replace(",", ",\n ")
|
|
301
325
|
formatted = formatted.replace("}", "\n}")
|
|
302
326
|
return formatted
|
|
303
|
-
except:
|
|
327
|
+
except Exception:
|
|
304
328
|
return match.group(0)
|
|
305
329
|
|
|
306
330
|
# Apply to simple dictionaries
|
|
307
|
-
content = re.sub(r
|
|
331
|
+
content = re.sub(r"\{[^{}]+\}", format_dict, content)
|
|
308
332
|
|
|
309
333
|
return content
|
|
310
334
|
|
|
311
335
|
def _enhance_bullet_points(self, content: str) -> str:
|
|
312
336
|
"""Enhance bullet points for better visibility."""
|
|
313
337
|
# Replace various bullet point styles with a consistent one
|
|
314
|
-
content = re.sub(r
|
|
315
|
-
content = re.sub(
|
|
338
|
+
content = re.sub(r"^[-*•]\s*", "• ", content, flags=re.MULTILINE)
|
|
339
|
+
content = re.sub(
|
|
340
|
+
r"^\d+\.\s*",
|
|
341
|
+
lambda m: f"**{m.group(0)}**",
|
|
342
|
+
content,
|
|
343
|
+
flags=re.MULTILINE,
|
|
344
|
+
)
|
|
316
345
|
|
|
317
346
|
return content
|
|
318
347
|
|
|
319
348
|
def _improve_spacing(self, content: str) -> str:
|
|
320
349
|
"""Improve spacing for better readability."""
|
|
321
350
|
# Add space before emoji headers
|
|
322
|
-
content = re.sub(r
|
|
351
|
+
content = re.sub(r"(?<!\n)(💭|📝|🔍|💡|🔧|📊|🎯|📈)", r"\n\n\1", content)
|
|
323
352
|
|
|
324
353
|
# Ensure proper spacing after headers
|
|
325
|
-
content = re.sub(r
|
|
354
|
+
content = re.sub(r"(💭|📝|🔍|💡|🔧|📊|🎯|📈)(.*?):", r"\1\2:\n", content)
|
|
326
355
|
|
|
327
356
|
# Clean up excessive newlines
|
|
328
|
-
content = re.sub(r
|
|
357
|
+
content = re.sub(r"\n{3,}", "\n\n", content)
|
|
329
358
|
|
|
330
359
|
return content.strip()
|
|
331
360
|
|
|
@@ -334,7 +363,7 @@ class LLMOutputTransformer:
|
|
|
334
363
|
def format_clarification_message(
|
|
335
364
|
questions: List[str],
|
|
336
365
|
round_number: int = 1,
|
|
337
|
-
reasoning: Optional[str] = None
|
|
366
|
+
reasoning: Optional[str] = None,
|
|
338
367
|
) -> str:
|
|
339
368
|
"""
|
|
340
369
|
Format clarification messages with preserved reasoning.
|
|
@@ -356,13 +385,10 @@ def format_clarification_message(
|
|
|
356
385
|
if reasoning:
|
|
357
386
|
content += f"\n\nReasoning: {reasoning}"
|
|
358
387
|
|
|
359
|
-
return transformer.transform_message(content,
|
|
388
|
+
return transformer.transform_message(content, "clarification")
|
|
360
389
|
|
|
361
390
|
|
|
362
|
-
def format_confirmation_message(
|
|
363
|
-
content: Union[str, Dict[str, Any]],
|
|
364
|
-
confirmation_type: str = 'strategy'
|
|
365
|
-
) -> str:
|
|
391
|
+
def format_confirmation_message(content: Union[str, Dict[str, Any]], confirmation_type: str = "strategy") -> str:
|
|
366
392
|
"""
|
|
367
393
|
Format confirmation messages with preserved technical details.
|
|
368
394
|
|
|
@@ -378,7 +404,7 @@ def format_confirmation_message(
|
|
|
378
404
|
if isinstance(content, dict):
|
|
379
405
|
content = json.dumps(content, indent=2)
|
|
380
406
|
|
|
381
|
-
return transformer.transform_message(content,
|
|
407
|
+
return transformer.transform_message(content, "confirmation")
|
|
382
408
|
|
|
383
409
|
|
|
384
410
|
def enhance_reasoning(reasoning: str) -> str:
|
aiecs/utils/__init__.py
CHANGED
|
@@ -5,16 +5,27 @@ This module provides utility functions including:
|
|
|
5
5
|
- Prompt loading functionality
|
|
6
6
|
- Token usage tracking
|
|
7
7
|
- Execution utilities
|
|
8
|
+
- Cache provider interfaces and implementations
|
|
8
9
|
"""
|
|
9
10
|
|
|
10
11
|
from .prompt_loader import get_prompt
|
|
11
12
|
from .token_usage_repository import TokenUsageRepository
|
|
12
13
|
from .execution_utils import ExecutionUtils
|
|
14
|
+
from .cache_provider import (
|
|
15
|
+
ICacheProvider,
|
|
16
|
+
LRUCacheProvider,
|
|
17
|
+
DualLayerCacheProvider,
|
|
18
|
+
RedisCacheProvider,
|
|
19
|
+
)
|
|
13
20
|
|
|
14
21
|
__all__ = [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
"get_prompt",
|
|
23
|
+
"TokenUsageRepository",
|
|
24
|
+
"ExecutionUtils",
|
|
25
|
+
"ICacheProvider",
|
|
26
|
+
"LRUCacheProvider",
|
|
27
|
+
"DualLayerCacheProvider",
|
|
28
|
+
"RedisCacheProvider",
|
|
18
29
|
]
|
|
19
30
|
|
|
20
31
|
# Version information
|
aiecs/utils/base_callback.py
CHANGED
|
@@ -25,7 +25,6 @@ class CustomAsyncCallbackHandler(ABC):
|
|
|
25
25
|
messages: List of message dictionaries, each containing 'role' and 'content' keys
|
|
26
26
|
**kwargs: Additional parameters such as provider, model, etc.
|
|
27
27
|
"""
|
|
28
|
-
pass
|
|
29
28
|
|
|
30
29
|
@abstractmethod
|
|
31
30
|
async def on_llm_end(self, response: dict, **kwargs: Any) -> None:
|
|
@@ -36,7 +35,6 @@ class CustomAsyncCallbackHandler(ABC):
|
|
|
36
35
|
response: Response dictionary containing 'content', 'tokens_used', 'model', etc.
|
|
37
36
|
**kwargs: Additional parameters such as provider, model, etc.
|
|
38
37
|
"""
|
|
39
|
-
pass
|
|
40
38
|
|
|
41
39
|
@abstractmethod
|
|
42
40
|
async def on_llm_error(self, error: Exception, **kwargs: Any) -> None:
|
|
@@ -47,4 +45,3 @@ class CustomAsyncCallbackHandler(ABC):
|
|
|
47
45
|
error: The exception that occurred during the LLM call
|
|
48
46
|
**kwargs: Additional parameters such as provider, model, etc.
|
|
49
47
|
"""
|
|
50
|
-
pass
|