aiecs 1.5.1__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.
- aiecs/__init__.py +72 -0
- aiecs/__main__.py +41 -0
- aiecs/aiecs_client.py +469 -0
- aiecs/application/__init__.py +10 -0
- aiecs/application/executors/__init__.py +10 -0
- aiecs/application/executors/operation_executor.py +363 -0
- aiecs/application/knowledge_graph/__init__.py +7 -0
- aiecs/application/knowledge_graph/builder/__init__.py +37 -0
- aiecs/application/knowledge_graph/builder/document_builder.py +375 -0
- aiecs/application/knowledge_graph/builder/graph_builder.py +356 -0
- aiecs/application/knowledge_graph/builder/schema_mapping.py +531 -0
- aiecs/application/knowledge_graph/builder/structured_pipeline.py +443 -0
- aiecs/application/knowledge_graph/builder/text_chunker.py +319 -0
- aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
- aiecs/application/knowledge_graph/extractors/base.py +100 -0
- aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +327 -0
- aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +349 -0
- aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +244 -0
- aiecs/application/knowledge_graph/fusion/__init__.py +23 -0
- aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +387 -0
- aiecs/application/knowledge_graph/fusion/entity_linker.py +343 -0
- aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +580 -0
- aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +189 -0
- aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
- aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +344 -0
- aiecs/application/knowledge_graph/pattern_matching/query_executor.py +378 -0
- aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
- aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +199 -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 +347 -0
- aiecs/application/knowledge_graph/reasoning/inference_engine.py +504 -0
- aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +167 -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 +630 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +654 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +477 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +390 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +217 -0
- aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +169 -0
- aiecs/application/knowledge_graph/reasoning/query_planner.py +872 -0
- aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +554 -0
- aiecs/application/knowledge_graph/retrieval/__init__.py +19 -0
- aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +596 -0
- aiecs/application/knowledge_graph/search/__init__.py +59 -0
- aiecs/application/knowledge_graph/search/hybrid_search.py +423 -0
- aiecs/application/knowledge_graph/search/reranker.py +295 -0
- aiecs/application/knowledge_graph/search/reranker_strategies.py +553 -0
- aiecs/application/knowledge_graph/search/text_similarity.py +398 -0
- aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
- aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +329 -0
- aiecs/application/knowledge_graph/traversal/path_scorer.py +269 -0
- aiecs/application/knowledge_graph/validators/__init__.py +13 -0
- aiecs/application/knowledge_graph/validators/relation_validator.py +189 -0
- aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
- aiecs/application/knowledge_graph/visualization/graph_visualizer.py +321 -0
- aiecs/common/__init__.py +9 -0
- aiecs/common/knowledge_graph/__init__.py +17 -0
- aiecs/common/knowledge_graph/runnable.py +484 -0
- aiecs/config/__init__.py +16 -0
- aiecs/config/config.py +498 -0
- aiecs/config/graph_config.py +137 -0
- aiecs/config/registry.py +23 -0
- aiecs/core/__init__.py +46 -0
- aiecs/core/interface/__init__.py +34 -0
- aiecs/core/interface/execution_interface.py +152 -0
- aiecs/core/interface/storage_interface.py +171 -0
- aiecs/domain/__init__.py +289 -0
- aiecs/domain/agent/__init__.py +189 -0
- aiecs/domain/agent/base_agent.py +697 -0
- aiecs/domain/agent/exceptions.py +103 -0
- aiecs/domain/agent/graph_aware_mixin.py +559 -0
- aiecs/domain/agent/hybrid_agent.py +490 -0
- aiecs/domain/agent/integration/__init__.py +26 -0
- aiecs/domain/agent/integration/context_compressor.py +222 -0
- aiecs/domain/agent/integration/context_engine_adapter.py +252 -0
- aiecs/domain/agent/integration/retry_policy.py +219 -0
- aiecs/domain/agent/integration/role_config.py +213 -0
- aiecs/domain/agent/knowledge_aware_agent.py +646 -0
- aiecs/domain/agent/lifecycle.py +296 -0
- aiecs/domain/agent/llm_agent.py +300 -0
- aiecs/domain/agent/memory/__init__.py +12 -0
- aiecs/domain/agent/memory/conversation.py +197 -0
- aiecs/domain/agent/migration/__init__.py +14 -0
- aiecs/domain/agent/migration/conversion.py +160 -0
- aiecs/domain/agent/migration/legacy_wrapper.py +90 -0
- aiecs/domain/agent/models.py +317 -0
- aiecs/domain/agent/observability.py +407 -0
- aiecs/domain/agent/persistence.py +289 -0
- aiecs/domain/agent/prompts/__init__.py +29 -0
- aiecs/domain/agent/prompts/builder.py +161 -0
- aiecs/domain/agent/prompts/formatters.py +189 -0
- aiecs/domain/agent/prompts/template.py +255 -0
- aiecs/domain/agent/registry.py +260 -0
- aiecs/domain/agent/tool_agent.py +257 -0
- aiecs/domain/agent/tools/__init__.py +12 -0
- aiecs/domain/agent/tools/schema_generator.py +221 -0
- aiecs/domain/community/__init__.py +155 -0
- aiecs/domain/community/agent_adapter.py +477 -0
- aiecs/domain/community/analytics.py +481 -0
- aiecs/domain/community/collaborative_workflow.py +642 -0
- aiecs/domain/community/communication_hub.py +645 -0
- aiecs/domain/community/community_builder.py +320 -0
- aiecs/domain/community/community_integration.py +800 -0
- aiecs/domain/community/community_manager.py +813 -0
- aiecs/domain/community/decision_engine.py +879 -0
- aiecs/domain/community/exceptions.py +225 -0
- aiecs/domain/community/models/__init__.py +33 -0
- aiecs/domain/community/models/community_models.py +268 -0
- aiecs/domain/community/resource_manager.py +457 -0
- aiecs/domain/community/shared_context_manager.py +603 -0
- aiecs/domain/context/__init__.py +58 -0
- aiecs/domain/context/context_engine.py +989 -0
- aiecs/domain/context/conversation_models.py +354 -0
- aiecs/domain/context/graph_memory.py +467 -0
- aiecs/domain/execution/__init__.py +12 -0
- aiecs/domain/execution/model.py +57 -0
- aiecs/domain/knowledge_graph/__init__.py +19 -0
- aiecs/domain/knowledge_graph/models/__init__.py +52 -0
- aiecs/domain/knowledge_graph/models/entity.py +130 -0
- aiecs/domain/knowledge_graph/models/evidence.py +194 -0
- aiecs/domain/knowledge_graph/models/inference_rule.py +186 -0
- aiecs/domain/knowledge_graph/models/path.py +179 -0
- aiecs/domain/knowledge_graph/models/path_pattern.py +173 -0
- aiecs/domain/knowledge_graph/models/query.py +272 -0
- aiecs/domain/knowledge_graph/models/query_plan.py +187 -0
- aiecs/domain/knowledge_graph/models/relation.py +136 -0
- aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
- aiecs/domain/knowledge_graph/schema/entity_type.py +135 -0
- aiecs/domain/knowledge_graph/schema/graph_schema.py +271 -0
- aiecs/domain/knowledge_graph/schema/property_schema.py +155 -0
- aiecs/domain/knowledge_graph/schema/relation_type.py +171 -0
- aiecs/domain/knowledge_graph/schema/schema_manager.py +496 -0
- aiecs/domain/knowledge_graph/schema/type_enums.py +205 -0
- aiecs/domain/task/__init__.py +13 -0
- aiecs/domain/task/dsl_processor.py +613 -0
- aiecs/domain/task/model.py +62 -0
- aiecs/domain/task/task_context.py +268 -0
- aiecs/infrastructure/__init__.py +24 -0
- aiecs/infrastructure/graph_storage/__init__.py +11 -0
- aiecs/infrastructure/graph_storage/base.py +601 -0
- aiecs/infrastructure/graph_storage/batch_operations.py +449 -0
- aiecs/infrastructure/graph_storage/cache.py +429 -0
- aiecs/infrastructure/graph_storage/distributed.py +226 -0
- aiecs/infrastructure/graph_storage/error_handling.py +390 -0
- aiecs/infrastructure/graph_storage/graceful_degradation.py +306 -0
- aiecs/infrastructure/graph_storage/health_checks.py +378 -0
- aiecs/infrastructure/graph_storage/in_memory.py +514 -0
- aiecs/infrastructure/graph_storage/index_optimization.py +483 -0
- aiecs/infrastructure/graph_storage/lazy_loading.py +410 -0
- aiecs/infrastructure/graph_storage/metrics.py +357 -0
- aiecs/infrastructure/graph_storage/migration.py +413 -0
- aiecs/infrastructure/graph_storage/pagination.py +471 -0
- aiecs/infrastructure/graph_storage/performance_monitoring.py +466 -0
- aiecs/infrastructure/graph_storage/postgres.py +871 -0
- aiecs/infrastructure/graph_storage/query_optimizer.py +635 -0
- aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
- aiecs/infrastructure/graph_storage/sqlite.py +623 -0
- aiecs/infrastructure/graph_storage/streaming.py +495 -0
- aiecs/infrastructure/messaging/__init__.py +13 -0
- aiecs/infrastructure/messaging/celery_task_manager.py +383 -0
- aiecs/infrastructure/messaging/websocket_manager.py +298 -0
- aiecs/infrastructure/monitoring/__init__.py +34 -0
- aiecs/infrastructure/monitoring/executor_metrics.py +174 -0
- aiecs/infrastructure/monitoring/global_metrics_manager.py +213 -0
- aiecs/infrastructure/monitoring/structured_logger.py +48 -0
- aiecs/infrastructure/monitoring/tracing_manager.py +410 -0
- aiecs/infrastructure/persistence/__init__.py +24 -0
- aiecs/infrastructure/persistence/context_engine_client.py +187 -0
- aiecs/infrastructure/persistence/database_manager.py +333 -0
- aiecs/infrastructure/persistence/file_storage.py +754 -0
- aiecs/infrastructure/persistence/redis_client.py +220 -0
- aiecs/llm/__init__.py +86 -0
- aiecs/llm/callbacks/__init__.py +11 -0
- aiecs/llm/callbacks/custom_callbacks.py +264 -0
- aiecs/llm/client_factory.py +420 -0
- aiecs/llm/clients/__init__.py +33 -0
- aiecs/llm/clients/base_client.py +193 -0
- aiecs/llm/clients/googleai_client.py +181 -0
- aiecs/llm/clients/openai_client.py +131 -0
- aiecs/llm/clients/vertex_client.py +437 -0
- aiecs/llm/clients/xai_client.py +184 -0
- aiecs/llm/config/__init__.py +51 -0
- aiecs/llm/config/config_loader.py +275 -0
- aiecs/llm/config/config_validator.py +236 -0
- aiecs/llm/config/model_config.py +151 -0
- aiecs/llm/utils/__init__.py +10 -0
- aiecs/llm/utils/validate_config.py +91 -0
- aiecs/main.py +363 -0
- aiecs/scripts/__init__.py +3 -0
- aiecs/scripts/aid/VERSION_MANAGEMENT.md +97 -0
- aiecs/scripts/aid/__init__.py +19 -0
- aiecs/scripts/aid/version_manager.py +215 -0
- aiecs/scripts/dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md +242 -0
- aiecs/scripts/dependance_check/README_DEPENDENCY_CHECKER.md +310 -0
- aiecs/scripts/dependance_check/__init__.py +17 -0
- aiecs/scripts/dependance_check/dependency_checker.py +938 -0
- aiecs/scripts/dependance_check/dependency_fixer.py +391 -0
- aiecs/scripts/dependance_check/download_nlp_data.py +396 -0
- aiecs/scripts/dependance_check/quick_dependency_check.py +270 -0
- aiecs/scripts/dependance_check/setup_nlp_data.sh +217 -0
- aiecs/scripts/dependance_patch/__init__.py +7 -0
- aiecs/scripts/dependance_patch/fix_weasel/README_WEASEL_PATCH.md +126 -0
- aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
- aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.py +128 -0
- aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.sh +82 -0
- aiecs/scripts/dependance_patch/fix_weasel/patch_weasel_library.sh +188 -0
- aiecs/scripts/dependance_patch/fix_weasel/run_weasel_patch.sh +41 -0
- aiecs/scripts/tools_develop/README.md +449 -0
- aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
- aiecs/scripts/tools_develop/__init__.py +21 -0
- aiecs/scripts/tools_develop/check_type_annotations.py +259 -0
- aiecs/scripts/tools_develop/validate_tool_schemas.py +422 -0
- aiecs/scripts/tools_develop/verify_tools.py +356 -0
- aiecs/tasks/__init__.py +1 -0
- aiecs/tasks/worker.py +172 -0
- aiecs/tools/__init__.py +299 -0
- aiecs/tools/apisource/__init__.py +99 -0
- aiecs/tools/apisource/intelligence/__init__.py +19 -0
- aiecs/tools/apisource/intelligence/data_fusion.py +381 -0
- aiecs/tools/apisource/intelligence/query_analyzer.py +413 -0
- aiecs/tools/apisource/intelligence/search_enhancer.py +388 -0
- aiecs/tools/apisource/monitoring/__init__.py +9 -0
- aiecs/tools/apisource/monitoring/metrics.py +303 -0
- aiecs/tools/apisource/providers/__init__.py +115 -0
- aiecs/tools/apisource/providers/base.py +664 -0
- aiecs/tools/apisource/providers/census.py +401 -0
- aiecs/tools/apisource/providers/fred.py +564 -0
- aiecs/tools/apisource/providers/newsapi.py +412 -0
- aiecs/tools/apisource/providers/worldbank.py +357 -0
- aiecs/tools/apisource/reliability/__init__.py +12 -0
- aiecs/tools/apisource/reliability/error_handler.py +375 -0
- aiecs/tools/apisource/reliability/fallback_strategy.py +391 -0
- aiecs/tools/apisource/tool.py +850 -0
- aiecs/tools/apisource/utils/__init__.py +9 -0
- aiecs/tools/apisource/utils/validators.py +338 -0
- aiecs/tools/base_tool.py +201 -0
- aiecs/tools/docs/__init__.py +121 -0
- aiecs/tools/docs/ai_document_orchestrator.py +599 -0
- aiecs/tools/docs/ai_document_writer_orchestrator.py +2403 -0
- aiecs/tools/docs/content_insertion_tool.py +1333 -0
- aiecs/tools/docs/document_creator_tool.py +1317 -0
- aiecs/tools/docs/document_layout_tool.py +1166 -0
- aiecs/tools/docs/document_parser_tool.py +994 -0
- aiecs/tools/docs/document_writer_tool.py +1818 -0
- aiecs/tools/knowledge_graph/__init__.py +17 -0
- aiecs/tools/knowledge_graph/graph_reasoning_tool.py +734 -0
- aiecs/tools/knowledge_graph/graph_search_tool.py +923 -0
- aiecs/tools/knowledge_graph/kg_builder_tool.py +476 -0
- aiecs/tools/langchain_adapter.py +542 -0
- aiecs/tools/schema_generator.py +275 -0
- aiecs/tools/search_tool/__init__.py +100 -0
- aiecs/tools/search_tool/analyzers.py +589 -0
- aiecs/tools/search_tool/cache.py +260 -0
- aiecs/tools/search_tool/constants.py +128 -0
- aiecs/tools/search_tool/context.py +216 -0
- aiecs/tools/search_tool/core.py +749 -0
- aiecs/tools/search_tool/deduplicator.py +123 -0
- aiecs/tools/search_tool/error_handler.py +271 -0
- aiecs/tools/search_tool/metrics.py +371 -0
- aiecs/tools/search_tool/rate_limiter.py +178 -0
- aiecs/tools/search_tool/schemas.py +277 -0
- aiecs/tools/statistics/__init__.py +80 -0
- aiecs/tools/statistics/ai_data_analysis_orchestrator.py +643 -0
- aiecs/tools/statistics/ai_insight_generator_tool.py +505 -0
- aiecs/tools/statistics/ai_report_orchestrator_tool.py +694 -0
- aiecs/tools/statistics/data_loader_tool.py +564 -0
- aiecs/tools/statistics/data_profiler_tool.py +658 -0
- aiecs/tools/statistics/data_transformer_tool.py +573 -0
- aiecs/tools/statistics/data_visualizer_tool.py +495 -0
- aiecs/tools/statistics/model_trainer_tool.py +487 -0
- aiecs/tools/statistics/statistical_analyzer_tool.py +459 -0
- aiecs/tools/task_tools/__init__.py +86 -0
- aiecs/tools/task_tools/chart_tool.py +732 -0
- aiecs/tools/task_tools/classfire_tool.py +922 -0
- aiecs/tools/task_tools/image_tool.py +447 -0
- aiecs/tools/task_tools/office_tool.py +684 -0
- aiecs/tools/task_tools/pandas_tool.py +635 -0
- aiecs/tools/task_tools/report_tool.py +635 -0
- aiecs/tools/task_tools/research_tool.py +392 -0
- aiecs/tools/task_tools/scraper_tool.py +715 -0
- aiecs/tools/task_tools/stats_tool.py +688 -0
- aiecs/tools/temp_file_manager.py +130 -0
- aiecs/tools/tool_executor/__init__.py +37 -0
- aiecs/tools/tool_executor/tool_executor.py +881 -0
- aiecs/utils/LLM_output_structor.py +445 -0
- aiecs/utils/__init__.py +34 -0
- aiecs/utils/base_callback.py +47 -0
- aiecs/utils/cache_provider.py +695 -0
- aiecs/utils/execution_utils.py +184 -0
- aiecs/utils/logging.py +1 -0
- aiecs/utils/prompt_loader.py +14 -0
- aiecs/utils/token_usage_repository.py +323 -0
- aiecs/ws/__init__.py +0 -0
- aiecs/ws/socket_server.py +52 -0
- aiecs-1.5.1.dist-info/METADATA +608 -0
- aiecs-1.5.1.dist-info/RECORD +302 -0
- aiecs-1.5.1.dist-info/WHEEL +5 -0
- aiecs-1.5.1.dist-info/entry_points.txt +10 -0
- aiecs-1.5.1.dist-info/licenses/LICENSE +225 -0
- aiecs-1.5.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Validation script for LLM models configuration.
|
|
4
|
+
|
|
5
|
+
This script validates the LLM models configuration file and prints
|
|
6
|
+
information about configured providers and models.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
# Setup logging
|
|
13
|
+
logging.basicConfig(
|
|
14
|
+
level=logging.INFO,
|
|
15
|
+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
16
|
+
)
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def main():
|
|
21
|
+
"""Main validation function"""
|
|
22
|
+
try:
|
|
23
|
+
from aiecs.llm.config import get_llm_config_loader, validate_llm_config
|
|
24
|
+
|
|
25
|
+
logger.info("=" * 70)
|
|
26
|
+
logger.info("LLM Models Configuration Validator")
|
|
27
|
+
logger.info("=" * 70)
|
|
28
|
+
|
|
29
|
+
# Load configuration
|
|
30
|
+
loader = get_llm_config_loader()
|
|
31
|
+
config = loader.get_config()
|
|
32
|
+
|
|
33
|
+
logger.info(f"\nConfiguration loaded from: {loader.get_config_path()}")
|
|
34
|
+
|
|
35
|
+
# Validate configuration
|
|
36
|
+
logger.info("\nValidating configuration...")
|
|
37
|
+
is_valid, warnings = validate_llm_config(config)
|
|
38
|
+
|
|
39
|
+
if is_valid:
|
|
40
|
+
logger.info("✓ Configuration is valid!")
|
|
41
|
+
|
|
42
|
+
# Print summary
|
|
43
|
+
logger.info("\n" + "=" * 70)
|
|
44
|
+
logger.info("Configuration Summary")
|
|
45
|
+
logger.info("=" * 70)
|
|
46
|
+
|
|
47
|
+
logger.info(f"\nTotal Providers: {len(config.providers)}")
|
|
48
|
+
|
|
49
|
+
for provider_name, provider_config in config.providers.items():
|
|
50
|
+
logger.info(f"\n{provider_name}:")
|
|
51
|
+
logger.info(f" Default Model: {provider_config.default_model}")
|
|
52
|
+
logger.info(f" Total Models: {len(provider_config.models)}")
|
|
53
|
+
|
|
54
|
+
if provider_config.model_mappings:
|
|
55
|
+
logger.info(f" Model Aliases: {len(provider_config.model_mappings)}")
|
|
56
|
+
|
|
57
|
+
logger.info(" Available Models:")
|
|
58
|
+
for model in provider_config.models:
|
|
59
|
+
cost_str = (
|
|
60
|
+
f"${model.costs.input:.6f} in / ${model.costs.output:.6f} out (per 1K tokens)"
|
|
61
|
+
)
|
|
62
|
+
logger.info(f" - {model.name}: {cost_str}")
|
|
63
|
+
if model.capabilities.vision:
|
|
64
|
+
logger.info(" Vision: Yes")
|
|
65
|
+
if model.capabilities.function_calling:
|
|
66
|
+
logger.info(" Function Calling: Yes")
|
|
67
|
+
|
|
68
|
+
logger.info("\n" + "=" * 70)
|
|
69
|
+
logger.info("Validation Complete!")
|
|
70
|
+
logger.info("=" * 70)
|
|
71
|
+
|
|
72
|
+
if warnings:
|
|
73
|
+
logger.info(f"\nNote: {len(warnings)} warnings were generated during validation.")
|
|
74
|
+
logger.info("See logs above for details.")
|
|
75
|
+
|
|
76
|
+
return 0
|
|
77
|
+
|
|
78
|
+
except FileNotFoundError as e:
|
|
79
|
+
logger.error(f"\n✗ Configuration file not found: {e}")
|
|
80
|
+
logger.error("\nPlease ensure the LLM models configuration file exists at:")
|
|
81
|
+
logger.error(" - aiecs/config/llm_models.yaml")
|
|
82
|
+
logger.error(" - Or set LLM_MODELS_CONFIG environment variable")
|
|
83
|
+
return 1
|
|
84
|
+
|
|
85
|
+
except Exception as e:
|
|
86
|
+
logger.error(f"\n✗ Validation failed: {e}", exc_info=True)
|
|
87
|
+
return 1
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
if __name__ == "__main__":
|
|
91
|
+
sys.exit(main())
|
aiecs/main.py
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AIECS - AI Execute Services
|
|
3
|
+
A middleware service for AI-powered task execution and tool orchestration
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from fastapi import FastAPI, HTTPException, Request, status
|
|
7
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
8
|
+
from fastapi.responses import JSONResponse
|
|
9
|
+
from contextlib import asynccontextmanager
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
from typing import Optional
|
|
13
|
+
import socketio
|
|
14
|
+
|
|
15
|
+
# Import configuration
|
|
16
|
+
from aiecs.config.config import get_settings
|
|
17
|
+
|
|
18
|
+
# Import WebSocket server
|
|
19
|
+
from aiecs.ws.socket_server import sio
|
|
20
|
+
|
|
21
|
+
# Import infrastructure
|
|
22
|
+
from aiecs.infrastructure.persistence.database_manager import DatabaseManager
|
|
23
|
+
from aiecs.infrastructure.persistence import (
|
|
24
|
+
initialize_context_engine,
|
|
25
|
+
close_context_engine,
|
|
26
|
+
)
|
|
27
|
+
from aiecs.infrastructure.messaging.celery_task_manager import (
|
|
28
|
+
CeleryTaskManager,
|
|
29
|
+
)
|
|
30
|
+
from aiecs.infrastructure.monitoring.structured_logger import (
|
|
31
|
+
setup_structured_logging,
|
|
32
|
+
)
|
|
33
|
+
from aiecs.infrastructure.monitoring import (
|
|
34
|
+
initialize_global_metrics,
|
|
35
|
+
close_global_metrics,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Import LLM client factory
|
|
39
|
+
from aiecs.llm.client_factory import LLMClientFactory
|
|
40
|
+
|
|
41
|
+
# Import domain models
|
|
42
|
+
from aiecs.domain.task.task_context import TaskContext
|
|
43
|
+
|
|
44
|
+
# Import tool discovery
|
|
45
|
+
from aiecs.tools import discover_tools
|
|
46
|
+
|
|
47
|
+
# Setup logging
|
|
48
|
+
logger = logging.getLogger(__name__)
|
|
49
|
+
|
|
50
|
+
# Get settings
|
|
51
|
+
settings = get_settings()
|
|
52
|
+
|
|
53
|
+
# Global instances
|
|
54
|
+
db_manager: Optional[DatabaseManager] = None
|
|
55
|
+
task_manager: Optional[CeleryTaskManager] = None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@asynccontextmanager
|
|
59
|
+
async def lifespan(app: FastAPI):
|
|
60
|
+
"""Application lifespan manager"""
|
|
61
|
+
global db_manager, task_manager
|
|
62
|
+
|
|
63
|
+
logger.info("Starting AIECS - AI Execute Services...")
|
|
64
|
+
|
|
65
|
+
# Setup structured logging
|
|
66
|
+
setup_structured_logging()
|
|
67
|
+
|
|
68
|
+
# Initialize global metrics (early in startup)
|
|
69
|
+
try:
|
|
70
|
+
await initialize_global_metrics()
|
|
71
|
+
logger.info("Global metrics initialized")
|
|
72
|
+
except Exception as e:
|
|
73
|
+
logger.warning(f"Global metrics initialization failed (continuing without it): {e}")
|
|
74
|
+
|
|
75
|
+
# Initialize database connection
|
|
76
|
+
try:
|
|
77
|
+
db_manager = DatabaseManager()
|
|
78
|
+
await db_manager.connect()
|
|
79
|
+
logger.info("Database connection established")
|
|
80
|
+
except Exception as e:
|
|
81
|
+
logger.error(f"Failed to connect to database: {e}")
|
|
82
|
+
raise
|
|
83
|
+
|
|
84
|
+
# Initialize task manager
|
|
85
|
+
try:
|
|
86
|
+
task_manager = CeleryTaskManager()
|
|
87
|
+
logger.info("Task manager initialized")
|
|
88
|
+
except Exception as e:
|
|
89
|
+
logger.error(f"Failed to initialize task manager: {e}")
|
|
90
|
+
raise
|
|
91
|
+
|
|
92
|
+
# Discover and register tools
|
|
93
|
+
try:
|
|
94
|
+
discover_tools("aiecs.tools")
|
|
95
|
+
logger.info("Tools discovered and registered")
|
|
96
|
+
except Exception as e:
|
|
97
|
+
logger.error(f"Failed to discover tools: {e}")
|
|
98
|
+
raise
|
|
99
|
+
|
|
100
|
+
# Initialize ContextEngine (optional, graceful degradation)
|
|
101
|
+
try:
|
|
102
|
+
await initialize_context_engine()
|
|
103
|
+
logger.info("ContextEngine initialized")
|
|
104
|
+
except Exception as e:
|
|
105
|
+
logger.warning(f"ContextEngine initialization failed (continuing without it): {e}")
|
|
106
|
+
|
|
107
|
+
# Application startup complete
|
|
108
|
+
logger.info("AIECS startup complete")
|
|
109
|
+
|
|
110
|
+
yield
|
|
111
|
+
|
|
112
|
+
# Shutdown
|
|
113
|
+
logger.info("Shutting down AIECS...")
|
|
114
|
+
|
|
115
|
+
# Close ContextEngine
|
|
116
|
+
try:
|
|
117
|
+
await close_context_engine()
|
|
118
|
+
logger.info("ContextEngine closed")
|
|
119
|
+
except Exception as e:
|
|
120
|
+
logger.warning(f"Error closing ContextEngine: {e}")
|
|
121
|
+
|
|
122
|
+
# Close database connection
|
|
123
|
+
if db_manager:
|
|
124
|
+
await db_manager.disconnect()
|
|
125
|
+
logger.info("Database connection closed")
|
|
126
|
+
|
|
127
|
+
# Close all LLM clients
|
|
128
|
+
await LLMClientFactory.close_all()
|
|
129
|
+
logger.info("LLM clients closed")
|
|
130
|
+
|
|
131
|
+
# Close global metrics
|
|
132
|
+
try:
|
|
133
|
+
await close_global_metrics()
|
|
134
|
+
logger.info("Global metrics closed")
|
|
135
|
+
except Exception as e:
|
|
136
|
+
logger.warning(f"Error closing global metrics: {e}")
|
|
137
|
+
|
|
138
|
+
logger.info("AIECS shutdown complete")
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# Create FastAPI app
|
|
142
|
+
app = FastAPI(
|
|
143
|
+
title="AIECS - AI Execute Services",
|
|
144
|
+
description="Middleware service for AI-powered task execution and tool orchestration",
|
|
145
|
+
version="1.5.1",
|
|
146
|
+
lifespan=lifespan,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# Configure CORS
|
|
150
|
+
allowed_origins = (
|
|
151
|
+
settings.cors_allowed_origins.split(",") if settings.cors_allowed_origins else ["*"]
|
|
152
|
+
)
|
|
153
|
+
app.add_middleware(
|
|
154
|
+
CORSMiddleware,
|
|
155
|
+
allow_origins=allowed_origins,
|
|
156
|
+
allow_credentials=True,
|
|
157
|
+
allow_methods=["*"],
|
|
158
|
+
allow_headers=["*"],
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
# Mount Socket.IO app
|
|
162
|
+
socket_app = socketio.ASGIApp(sio, other_asgi_app=app)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
# Health check endpoint
|
|
166
|
+
@app.get("/health")
|
|
167
|
+
async def health_check():
|
|
168
|
+
"""Health check endpoint"""
|
|
169
|
+
return {"status": "healthy", "service": "aiecs", "version": "1.5.1"}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# Metrics health check endpoint
|
|
173
|
+
@app.get("/metrics/health")
|
|
174
|
+
async def metrics_health():
|
|
175
|
+
"""Check global metrics health"""
|
|
176
|
+
from aiecs.infrastructure.monitoring import (
|
|
177
|
+
is_metrics_initialized,
|
|
178
|
+
get_metrics_summary,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
"initialized": is_metrics_initialized(),
|
|
183
|
+
"summary": get_metrics_summary(),
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
# Get available tools
|
|
188
|
+
@app.get("/api/tools")
|
|
189
|
+
async def get_available_tools():
|
|
190
|
+
"""Get list of available tools"""
|
|
191
|
+
from aiecs.tools import list_tools
|
|
192
|
+
|
|
193
|
+
tools = list_tools()
|
|
194
|
+
return {"tools": tools, "count": len(tools)}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
# Execute task endpoint
|
|
198
|
+
@app.post("/api/execute")
|
|
199
|
+
async def execute_task(request: Request):
|
|
200
|
+
"""Execute a task with given parameters"""
|
|
201
|
+
try:
|
|
202
|
+
data = await request.json()
|
|
203
|
+
|
|
204
|
+
# Extract required fields
|
|
205
|
+
task_type = data.get("type", "task")
|
|
206
|
+
mode = data.get("mode", "execute")
|
|
207
|
+
service = data.get("service", "default")
|
|
208
|
+
user_id = data.get("userId", "anonymous")
|
|
209
|
+
context_data = data.get("context", {})
|
|
210
|
+
|
|
211
|
+
# Build task context
|
|
212
|
+
task_context = TaskContext(
|
|
213
|
+
mode=mode,
|
|
214
|
+
service=service,
|
|
215
|
+
user_id=user_id,
|
|
216
|
+
metadata=context_data.get("metadata", {}),
|
|
217
|
+
data=context_data.get("data", {}),
|
|
218
|
+
tools=context_data.get("tools", []),
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
# Submit task to queue
|
|
222
|
+
if not task_manager:
|
|
223
|
+
raise HTTPException(
|
|
224
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
225
|
+
detail="Task manager not initialized",
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
task_id = await task_manager.submit_task(context=task_context, task_type=task_type)
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
"taskId": task_id,
|
|
232
|
+
"status": "queued",
|
|
233
|
+
"message": "Task submitted successfully",
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
except Exception as e:
|
|
237
|
+
logger.error(f"Error executing task: {e}")
|
|
238
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
# Get task status
|
|
242
|
+
@app.get("/api/task/{task_id}")
|
|
243
|
+
async def get_task_status(task_id: str):
|
|
244
|
+
"""Get status of a specific task"""
|
|
245
|
+
try:
|
|
246
|
+
if not task_manager:
|
|
247
|
+
raise HTTPException(
|
|
248
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
249
|
+
detail="Task manager not initialized",
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
task_status = await task_manager.get_task_status(task_id)
|
|
253
|
+
|
|
254
|
+
if not task_status:
|
|
255
|
+
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Task not found")
|
|
256
|
+
|
|
257
|
+
return task_status
|
|
258
|
+
|
|
259
|
+
except HTTPException:
|
|
260
|
+
raise
|
|
261
|
+
except Exception as e:
|
|
262
|
+
logger.error(f"Error getting task status: {e}")
|
|
263
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
# Cancel task
|
|
267
|
+
@app.delete("/api/task/{task_id}")
|
|
268
|
+
async def cancel_task(task_id: str):
|
|
269
|
+
"""Cancel a running task"""
|
|
270
|
+
try:
|
|
271
|
+
if not task_manager:
|
|
272
|
+
raise HTTPException(
|
|
273
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
274
|
+
detail="Task manager not initialized",
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
success = await task_manager.cancel_task(task_id)
|
|
278
|
+
|
|
279
|
+
if not success:
|
|
280
|
+
raise HTTPException(
|
|
281
|
+
status_code=status.HTTP_400_BAD_REQUEST,
|
|
282
|
+
detail="Failed to cancel task",
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
return {
|
|
286
|
+
"taskId": task_id,
|
|
287
|
+
"status": "cancelled",
|
|
288
|
+
"message": "Task cancelled successfully",
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
except HTTPException:
|
|
292
|
+
raise
|
|
293
|
+
except Exception as e:
|
|
294
|
+
logger.error(f"Error cancelling task: {e}")
|
|
295
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
# Get service info
|
|
299
|
+
@app.get("/api/services")
|
|
300
|
+
async def get_services():
|
|
301
|
+
"""Get available AI services"""
|
|
302
|
+
from aiecs.config.registry import AI_SERVICE_REGISTRY
|
|
303
|
+
|
|
304
|
+
services = []
|
|
305
|
+
for (mode, service), cls in AI_SERVICE_REGISTRY.items():
|
|
306
|
+
services.append(
|
|
307
|
+
{
|
|
308
|
+
"mode": mode,
|
|
309
|
+
"service": service,
|
|
310
|
+
"class": cls.__name__,
|
|
311
|
+
"module": cls.__module__,
|
|
312
|
+
}
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
return {"services": services, "count": len(services)}
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
# Get LLM providers
|
|
319
|
+
@app.get("/api/providers")
|
|
320
|
+
async def get_providers():
|
|
321
|
+
"""Get available LLM providers"""
|
|
322
|
+
from aiecs.llm.client_factory import AIProvider
|
|
323
|
+
|
|
324
|
+
providers = [{"name": provider.value, "enabled": True} for provider in AIProvider]
|
|
325
|
+
|
|
326
|
+
return {"providers": providers, "count": len(providers)}
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
# Exception handlers
|
|
330
|
+
@app.exception_handler(HTTPException)
|
|
331
|
+
async def http_exception_handler(request: Request, exc: HTTPException):
|
|
332
|
+
"""Handle HTTP exceptions"""
|
|
333
|
+
return JSONResponse(
|
|
334
|
+
status_code=exc.status_code,
|
|
335
|
+
content={"error": exc.detail, "status": exc.status_code},
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
@app.exception_handler(Exception)
|
|
340
|
+
async def general_exception_handler(request: Request, exc: Exception):
|
|
341
|
+
"""Handle general exceptions"""
|
|
342
|
+
logger.error(f"Unhandled exception: {exc}", exc_info=True)
|
|
343
|
+
return JSONResponse(
|
|
344
|
+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
345
|
+
content={"error": "Internal server error", "status": 500},
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
# Main entry point
|
|
350
|
+
if __name__ == "__main__":
|
|
351
|
+
import uvicorn
|
|
352
|
+
|
|
353
|
+
# Get port from environment or use default
|
|
354
|
+
port = int(os.environ.get("PORT", 8000))
|
|
355
|
+
|
|
356
|
+
# Run the application with Socket.IO support
|
|
357
|
+
uvicorn.run(
|
|
358
|
+
socket_app, # Use the combined Socket.IO + FastAPI app
|
|
359
|
+
host="0.0.0.0",
|
|
360
|
+
port=port,
|
|
361
|
+
log_level="info",
|
|
362
|
+
reload=bool(os.environ.get("RELOAD", False)),
|
|
363
|
+
)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# AIECS 版本管理
|
|
2
|
+
|
|
3
|
+
AIECS 提供了一个统一的版本管理工具,可以同时更新项目中所有相关文件的版本号。
|
|
4
|
+
|
|
5
|
+
## 支持的文件
|
|
6
|
+
|
|
7
|
+
版本管理工具会自动更新以下文件中的版本号:
|
|
8
|
+
|
|
9
|
+
1. **`aiecs/__init__.py`** - 更新 `__version__` 变量
|
|
10
|
+
2. **`aiecs/main.py`** - 更新 FastAPI 应用版本和健康检查端点版本
|
|
11
|
+
3. **`pyproject.toml`** - 更新项目版本
|
|
12
|
+
|
|
13
|
+
## 使用方法
|
|
14
|
+
|
|
15
|
+
### 1. 显示当前版本
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
poetry run python -m aiecs.scripts.aid.version_manager --show
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 2. 设置特定版本
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
poetry run python -m aiecs.scripts.aid.version_manager --version 1.2.0
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 3. 自动递增版本
|
|
28
|
+
|
|
29
|
+
#### 补丁版本 (Patch)
|
|
30
|
+
```bash
|
|
31
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump patch
|
|
32
|
+
# 1.1.0 -> 1.1.1
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
#### 次版本 (Minor)
|
|
36
|
+
```bash
|
|
37
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump minor
|
|
38
|
+
# 1.1.0 -> 1.2.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
#### 主版本 (Major)
|
|
42
|
+
```bash
|
|
43
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump major
|
|
44
|
+
# 1.1.0 -> 2.0.0
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 版本号格式
|
|
48
|
+
|
|
49
|
+
版本号遵循 [语义化版本控制](https://semver.org/) 规范:
|
|
50
|
+
|
|
51
|
+
- **主版本号 (Major)**: 不兼容的API修改
|
|
52
|
+
- **次版本号 (Minor)**: 向下兼容的功能性新增
|
|
53
|
+
- **补丁版本号 (Patch)**: 向下兼容的问题修正
|
|
54
|
+
|
|
55
|
+
格式:`X.Y.Z` (例如:1.2.3)
|
|
56
|
+
|
|
57
|
+
## 命令行选项
|
|
58
|
+
|
|
59
|
+
- `--version, -v`: 设置特定版本号
|
|
60
|
+
- `--bump, -b`: 自动递增版本 (major/minor/patch)
|
|
61
|
+
- `--show, -s`: 显示当前版本
|
|
62
|
+
- `--help, -h`: 显示帮助信息
|
|
63
|
+
|
|
64
|
+
## 示例
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# 查看当前版本
|
|
68
|
+
poetry run python -m aiecs.scripts.aid.version_manager --show
|
|
69
|
+
|
|
70
|
+
# 发布补丁版本
|
|
71
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump patch
|
|
72
|
+
|
|
73
|
+
# 发布新功能版本
|
|
74
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump minor
|
|
75
|
+
|
|
76
|
+
# 发布重大更新版本
|
|
77
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump major
|
|
78
|
+
|
|
79
|
+
# 手动设置版本
|
|
80
|
+
poetry run python -m aiecs.scripts.aid.version_manager --version 2.1.0
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 注意事项
|
|
84
|
+
|
|
85
|
+
1. 版本管理工具会自动验证版本号格式
|
|
86
|
+
2. 所有相关文件会同时更新,确保版本号一致性
|
|
87
|
+
3. 更新前建议先提交当前更改到版本控制系统
|
|
88
|
+
4. 工具会显示详细的更新日志,确认所有文件都已正确更新
|
|
89
|
+
|
|
90
|
+
## 故障排除
|
|
91
|
+
|
|
92
|
+
如果遇到问题,请检查:
|
|
93
|
+
|
|
94
|
+
1. 确保在项目根目录下运行命令
|
|
95
|
+
2. 确保所有目标文件存在且可写
|
|
96
|
+
3. 检查版本号格式是否正确 (X.Y.Z)
|
|
97
|
+
4. 确保没有其他进程正在编辑这些文件
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AIECS Development Tools (AID)
|
|
3
|
+
|
|
4
|
+
This module contains development and maintenance tools for the AIECS project.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# Lazy import to avoid circular import issues
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_version_manager_main():
|
|
11
|
+
"""Get the version manager main function"""
|
|
12
|
+
from .version_manager import main
|
|
13
|
+
|
|
14
|
+
return main
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"get_version_manager_main",
|
|
19
|
+
]
|