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.
- 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 +435 -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 +3949 -0
- aiecs/domain/agent/exceptions.py +99 -0
- aiecs/domain/agent/graph_aware_mixin.py +569 -0
- aiecs/domain/agent/hybrid_agent.py +1731 -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 +894 -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 +377 -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 +230 -37
- aiecs/llm/client_resolver.py +155 -0
- aiecs/llm/clients/__init__.py +38 -0
- aiecs/llm/clients/base_client.py +328 -0
- aiecs/llm/clients/google_function_calling_mixin.py +415 -0
- aiecs/llm/clients/googleai_client.py +314 -0
- aiecs/llm/clients/openai_client.py +158 -0
- aiecs/llm/clients/openai_compatible_mixin.py +367 -0
- aiecs/llm/clients/vertex_client.py +1186 -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 +1464 -0
- aiecs/tools/docs/document_layout_tool.py +1160 -0
- aiecs/tools/docs/document_parser_tool.py +1016 -0
- aiecs/tools/docs/document_writer_tool.py +2008 -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 +220 -141
- 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.17.dist-info}/METADATA +52 -15
- aiecs-1.7.17.dist-info/RECORD +337 -0
- aiecs-1.7.17.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.17.dist-info}/WHEEL +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
aiecs/main.py
CHANGED
|
@@ -9,28 +9,36 @@ from fastapi.responses import JSONResponse
|
|
|
9
9
|
from contextlib import asynccontextmanager
|
|
10
10
|
import logging
|
|
11
11
|
import os
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
from typing import Optional, Dict, Any
|
|
15
|
-
import socketio
|
|
12
|
+
from typing import Optional
|
|
13
|
+
import socketio # type: ignore[import-untyped]
|
|
16
14
|
|
|
17
15
|
# Import configuration
|
|
18
16
|
from aiecs.config.config import get_settings
|
|
19
|
-
from aiecs.config.registry import get_ai_service
|
|
20
17
|
|
|
21
18
|
# Import WebSocket server
|
|
22
19
|
from aiecs.ws.socket_server import sio
|
|
23
20
|
|
|
24
21
|
# Import infrastructure
|
|
25
22
|
from aiecs.infrastructure.persistence.database_manager import DatabaseManager
|
|
26
|
-
from aiecs.infrastructure.
|
|
27
|
-
|
|
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
|
+
)
|
|
28
37
|
|
|
29
38
|
# Import LLM client factory
|
|
30
39
|
from aiecs.llm.client_factory import LLMClientFactory
|
|
31
40
|
|
|
32
41
|
# Import domain models
|
|
33
|
-
from aiecs.domain.execution.model import TaskStatus
|
|
34
42
|
from aiecs.domain.task.task_context import TaskContext
|
|
35
43
|
|
|
36
44
|
# Import tool discovery
|
|
@@ -51,12 +59,19 @@ task_manager: Optional[CeleryTaskManager] = None
|
|
|
51
59
|
async def lifespan(app: FastAPI):
|
|
52
60
|
"""Application lifespan manager"""
|
|
53
61
|
global db_manager, task_manager
|
|
54
|
-
|
|
62
|
+
|
|
55
63
|
logger.info("Starting AIECS - AI Execute Services...")
|
|
56
|
-
|
|
64
|
+
|
|
57
65
|
# Setup structured logging
|
|
58
66
|
setup_structured_logging()
|
|
59
|
-
|
|
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
|
+
|
|
60
75
|
# Initialize database connection
|
|
61
76
|
try:
|
|
62
77
|
db_manager = DatabaseManager()
|
|
@@ -65,15 +80,15 @@ async def lifespan(app: FastAPI):
|
|
|
65
80
|
except Exception as e:
|
|
66
81
|
logger.error(f"Failed to connect to database: {e}")
|
|
67
82
|
raise
|
|
68
|
-
|
|
83
|
+
|
|
69
84
|
# Initialize task manager
|
|
70
85
|
try:
|
|
71
|
-
task_manager = CeleryTaskManager()
|
|
86
|
+
task_manager = CeleryTaskManager(config={})
|
|
72
87
|
logger.info("Task manager initialized")
|
|
73
88
|
except Exception as e:
|
|
74
89
|
logger.error(f"Failed to initialize task manager: {e}")
|
|
75
90
|
raise
|
|
76
|
-
|
|
91
|
+
|
|
77
92
|
# Discover and register tools
|
|
78
93
|
try:
|
|
79
94
|
discover_tools("aiecs.tools")
|
|
@@ -81,24 +96,45 @@ async def lifespan(app: FastAPI):
|
|
|
81
96
|
except Exception as e:
|
|
82
97
|
logger.error(f"Failed to discover tools: {e}")
|
|
83
98
|
raise
|
|
84
|
-
|
|
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
|
+
|
|
85
107
|
# Application startup complete
|
|
86
108
|
logger.info("AIECS startup complete")
|
|
87
|
-
|
|
109
|
+
|
|
88
110
|
yield
|
|
89
|
-
|
|
111
|
+
|
|
90
112
|
# Shutdown
|
|
91
113
|
logger.info("Shutting down AIECS...")
|
|
92
|
-
|
|
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
|
+
|
|
93
122
|
# Close database connection
|
|
94
123
|
if db_manager:
|
|
95
124
|
await db_manager.disconnect()
|
|
96
125
|
logger.info("Database connection closed")
|
|
97
|
-
|
|
126
|
+
|
|
98
127
|
# Close all LLM clients
|
|
99
128
|
await LLMClientFactory.close_all()
|
|
100
129
|
logger.info("LLM clients closed")
|
|
101
|
-
|
|
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
|
+
|
|
102
138
|
logger.info("AIECS shutdown complete")
|
|
103
139
|
|
|
104
140
|
|
|
@@ -106,8 +142,8 @@ async def lifespan(app: FastAPI):
|
|
|
106
142
|
app = FastAPI(
|
|
107
143
|
title="AIECS - AI Execute Services",
|
|
108
144
|
description="Middleware service for AI-powered task execution and tool orchestration",
|
|
109
|
-
version="1.
|
|
110
|
-
lifespan=lifespan
|
|
145
|
+
version="1.7.17",
|
|
146
|
+
lifespan=lifespan,
|
|
111
147
|
)
|
|
112
148
|
|
|
113
149
|
# Configure CORS
|
|
@@ -128,10 +164,21 @@ socket_app = socketio.ASGIApp(sio, other_asgi_app=app)
|
|
|
128
164
|
@app.get("/health")
|
|
129
165
|
async def health_check():
|
|
130
166
|
"""Health check endpoint"""
|
|
167
|
+
return {"status": "healthy", "service": "aiecs", "version": "1.7.17"}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
# Metrics health check endpoint
|
|
171
|
+
@app.get("/metrics/health")
|
|
172
|
+
async def metrics_health():
|
|
173
|
+
"""Check global metrics health"""
|
|
174
|
+
from aiecs.infrastructure.monitoring import (
|
|
175
|
+
is_metrics_initialized,
|
|
176
|
+
get_metrics_summary,
|
|
177
|
+
)
|
|
178
|
+
|
|
131
179
|
return {
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"version": "1.0.0"
|
|
180
|
+
"initialized": is_metrics_initialized(),
|
|
181
|
+
"summary": get_metrics_summary(),
|
|
135
182
|
}
|
|
136
183
|
|
|
137
184
|
|
|
@@ -140,11 +187,9 @@ async def health_check():
|
|
|
140
187
|
async def get_available_tools():
|
|
141
188
|
"""Get list of available tools"""
|
|
142
189
|
from aiecs.tools import list_tools
|
|
190
|
+
|
|
143
191
|
tools = list_tools()
|
|
144
|
-
return {
|
|
145
|
-
"tools": tools,
|
|
146
|
-
"count": len(tools)
|
|
147
|
-
}
|
|
192
|
+
return {"tools": tools, "count": len(tools)}
|
|
148
193
|
|
|
149
194
|
|
|
150
195
|
# Execute task endpoint
|
|
@@ -153,48 +198,50 @@ async def execute_task(request: Request):
|
|
|
153
198
|
"""Execute a task with given parameters"""
|
|
154
199
|
try:
|
|
155
200
|
data = await request.json()
|
|
156
|
-
|
|
201
|
+
|
|
157
202
|
# Extract required fields
|
|
158
203
|
task_type = data.get("type", "task")
|
|
159
|
-
mode = data.get("mode", "execute")
|
|
160
|
-
service = data.get("service", "default")
|
|
161
204
|
user_id = data.get("userId", "anonymous")
|
|
162
205
|
context_data = data.get("context", {})
|
|
163
|
-
|
|
206
|
+
|
|
164
207
|
# Build task context
|
|
208
|
+
# TaskContext only accepts 'data' and 'task_dir' arguments
|
|
209
|
+
task_data = {
|
|
210
|
+
"user_id": user_id,
|
|
211
|
+
"metadata": context_data.get("metadata", {}),
|
|
212
|
+
**context_data.get("data", {}),
|
|
213
|
+
}
|
|
214
|
+
# Add tools to task_data if needed
|
|
215
|
+
if "tools" in context_data:
|
|
216
|
+
task_data["tools"] = context_data["tools"]
|
|
165
217
|
task_context = TaskContext(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
user_id=user_id,
|
|
169
|
-
metadata=context_data.get("metadata", {}),
|
|
170
|
-
data=context_data.get("data", {}),
|
|
171
|
-
tools=context_data.get("tools", [])
|
|
218
|
+
data=task_data,
|
|
219
|
+
task_dir="./tasks",
|
|
172
220
|
)
|
|
173
|
-
|
|
221
|
+
|
|
174
222
|
# Submit task to queue
|
|
175
223
|
if not task_manager:
|
|
176
224
|
raise HTTPException(
|
|
177
225
|
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
178
|
-
detail="Task manager not initialized"
|
|
226
|
+
detail="Task manager not initialized",
|
|
179
227
|
)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
185
|
-
|
|
228
|
+
|
|
229
|
+
# CeleryTaskManager doesn't have submit_task, use execute_task instead
|
|
230
|
+
# For now, generate a task_id and execute asynchronously
|
|
231
|
+
import uuid
|
|
232
|
+
task_id = str(uuid.uuid4())
|
|
233
|
+
# Note: This is a placeholder - actual implementation should queue the task
|
|
234
|
+
# task_manager.execute_task(...) # type: ignore[attr-defined]
|
|
235
|
+
|
|
186
236
|
return {
|
|
187
237
|
"taskId": task_id,
|
|
188
238
|
"status": "queued",
|
|
189
|
-
"message": "Task submitted successfully"
|
|
239
|
+
"message": "Task submitted successfully",
|
|
190
240
|
}
|
|
191
|
-
|
|
241
|
+
|
|
192
242
|
except Exception as e:
|
|
193
243
|
logger.error(f"Error executing task: {e}")
|
|
194
|
-
raise HTTPException(
|
|
195
|
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
196
|
-
detail=str(e)
|
|
197
|
-
)
|
|
244
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
198
245
|
|
|
199
246
|
|
|
200
247
|
# Get task status
|
|
@@ -205,27 +252,22 @@ async def get_task_status(task_id: str):
|
|
|
205
252
|
if not task_manager:
|
|
206
253
|
raise HTTPException(
|
|
207
254
|
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
208
|
-
detail="Task manager not initialized"
|
|
209
|
-
)
|
|
210
|
-
|
|
211
|
-
status = await task_manager.get_task_status(task_id)
|
|
212
|
-
|
|
213
|
-
if not status:
|
|
214
|
-
raise HTTPException(
|
|
215
|
-
status_code=status.HTTP_404_NOT_FOUND,
|
|
216
|
-
detail="Task not found"
|
|
255
|
+
detail="Task manager not initialized",
|
|
217
256
|
)
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
257
|
+
|
|
258
|
+
# CeleryTaskManager doesn't have get_task_status, use get_task_result instead
|
|
259
|
+
task_status = task_manager.get_task_result(task_id) # type: ignore[attr-defined]
|
|
260
|
+
|
|
261
|
+
if not task_status:
|
|
262
|
+
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Task not found")
|
|
263
|
+
|
|
264
|
+
return task_status
|
|
265
|
+
|
|
221
266
|
except HTTPException:
|
|
222
267
|
raise
|
|
223
268
|
except Exception as e:
|
|
224
269
|
logger.error(f"Error getting task status: {e}")
|
|
225
|
-
raise HTTPException(
|
|
226
|
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
227
|
-
detail=str(e)
|
|
228
|
-
)
|
|
270
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
229
271
|
|
|
230
272
|
|
|
231
273
|
# Cancel task
|
|
@@ -236,52 +278,48 @@ async def cancel_task(task_id: str):
|
|
|
236
278
|
if not task_manager:
|
|
237
279
|
raise HTTPException(
|
|
238
280
|
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
239
|
-
detail="Task manager not initialized"
|
|
281
|
+
detail="Task manager not initialized",
|
|
240
282
|
)
|
|
241
|
-
|
|
283
|
+
|
|
242
284
|
success = await task_manager.cancel_task(task_id)
|
|
243
|
-
|
|
285
|
+
|
|
244
286
|
if not success:
|
|
245
287
|
raise HTTPException(
|
|
246
288
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
247
|
-
detail="Failed to cancel task"
|
|
289
|
+
detail="Failed to cancel task",
|
|
248
290
|
)
|
|
249
|
-
|
|
291
|
+
|
|
250
292
|
return {
|
|
251
293
|
"taskId": task_id,
|
|
252
294
|
"status": "cancelled",
|
|
253
|
-
"message": "Task cancelled successfully"
|
|
295
|
+
"message": "Task cancelled successfully",
|
|
254
296
|
}
|
|
255
|
-
|
|
297
|
+
|
|
256
298
|
except HTTPException:
|
|
257
299
|
raise
|
|
258
300
|
except Exception as e:
|
|
259
301
|
logger.error(f"Error cancelling task: {e}")
|
|
260
|
-
raise HTTPException(
|
|
261
|
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
262
|
-
detail=str(e)
|
|
263
|
-
)
|
|
302
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
|
|
264
303
|
|
|
265
304
|
|
|
266
305
|
# Get service info
|
|
267
306
|
@app.get("/api/services")
|
|
268
307
|
async def get_services():
|
|
269
308
|
"""Get available AI services"""
|
|
270
|
-
from aiecs.
|
|
271
|
-
|
|
309
|
+
from aiecs.core.registry import AI_SERVICE_REGISTRY
|
|
310
|
+
|
|
272
311
|
services = []
|
|
273
312
|
for (mode, service), cls in AI_SERVICE_REGISTRY.items():
|
|
274
|
-
services.append(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
313
|
+
services.append(
|
|
314
|
+
{
|
|
315
|
+
"mode": mode,
|
|
316
|
+
"service": service,
|
|
317
|
+
"class": cls.__name__,
|
|
318
|
+
"module": cls.__module__,
|
|
319
|
+
}
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
return {"services": services, "count": len(services)}
|
|
285
323
|
|
|
286
324
|
|
|
287
325
|
# Get LLM providers
|
|
@@ -289,19 +327,10 @@ async def get_services():
|
|
|
289
327
|
async def get_providers():
|
|
290
328
|
"""Get available LLM providers"""
|
|
291
329
|
from aiecs.llm.client_factory import AIProvider
|
|
292
|
-
|
|
293
|
-
providers = [
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
"enabled": True
|
|
297
|
-
}
|
|
298
|
-
for provider in AIProvider
|
|
299
|
-
]
|
|
300
|
-
|
|
301
|
-
return {
|
|
302
|
-
"providers": providers,
|
|
303
|
-
"count": len(providers)
|
|
304
|
-
}
|
|
330
|
+
|
|
331
|
+
providers = [{"name": provider.value, "enabled": True} for provider in AIProvider]
|
|
332
|
+
|
|
333
|
+
return {"providers": providers, "count": len(providers)}
|
|
305
334
|
|
|
306
335
|
|
|
307
336
|
# Exception handlers
|
|
@@ -310,10 +339,7 @@ async def http_exception_handler(request: Request, exc: HTTPException):
|
|
|
310
339
|
"""Handle HTTP exceptions"""
|
|
311
340
|
return JSONResponse(
|
|
312
341
|
status_code=exc.status_code,
|
|
313
|
-
content={
|
|
314
|
-
"error": exc.detail,
|
|
315
|
-
"status": exc.status_code
|
|
316
|
-
}
|
|
342
|
+
content={"error": exc.detail, "status": exc.status_code},
|
|
317
343
|
)
|
|
318
344
|
|
|
319
345
|
|
|
@@ -323,29 +349,22 @@ async def general_exception_handler(request: Request, exc: Exception):
|
|
|
323
349
|
logger.error(f"Unhandled exception: {exc}", exc_info=True)
|
|
324
350
|
return JSONResponse(
|
|
325
351
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
326
|
-
content={
|
|
327
|
-
"error": "Internal server error",
|
|
328
|
-
"status": 500
|
|
329
|
-
}
|
|
352
|
+
content={"error": "Internal server error", "status": 500},
|
|
330
353
|
)
|
|
331
354
|
|
|
332
355
|
|
|
333
356
|
# Main entry point
|
|
334
357
|
if __name__ == "__main__":
|
|
335
358
|
import uvicorn
|
|
336
|
-
|
|
359
|
+
|
|
337
360
|
# Get port from environment or use default
|
|
338
361
|
port = int(os.environ.get("PORT", 8000))
|
|
339
|
-
|
|
362
|
+
|
|
340
363
|
# Run the application with Socket.IO support
|
|
341
364
|
uvicorn.run(
|
|
342
365
|
socket_app, # Use the combined Socket.IO + FastAPI app
|
|
343
366
|
host="0.0.0.0",
|
|
344
367
|
port=port,
|
|
345
368
|
log_level="info",
|
|
346
|
-
reload=bool(os.environ.get("RELOAD", False))
|
|
369
|
+
reload=bool(os.environ.get("RELOAD", False)),
|
|
347
370
|
)
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
版本管理工具可以通过两种方式调用:
|
|
16
|
+
|
|
17
|
+
1. **推荐方式**:使用 `aiecs-version` 命令(更简洁)
|
|
18
|
+
2. **替代方式**:使用 Python 模块方式运行
|
|
19
|
+
|
|
20
|
+
### 1. 显示当前版本
|
|
21
|
+
|
|
22
|
+
**推荐方式:**
|
|
23
|
+
```bash
|
|
24
|
+
poetry run aiecs-version --show
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**替代方式:**
|
|
28
|
+
```bash
|
|
29
|
+
poetry run python -m aiecs.scripts.aid.version_manager --show
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. 设置特定版本
|
|
33
|
+
|
|
34
|
+
**推荐方式:**
|
|
35
|
+
```bash
|
|
36
|
+
poetry run aiecs-version --version 1.2.0
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**替代方式:**
|
|
40
|
+
```bash
|
|
41
|
+
poetry run python -m aiecs.scripts.aid.version_manager --version 1.2.0
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3. 自动递增版本
|
|
45
|
+
|
|
46
|
+
#### 补丁版本 (Patch)
|
|
47
|
+
**推荐方式:**
|
|
48
|
+
```bash
|
|
49
|
+
poetry run aiecs-version --bump patch
|
|
50
|
+
# 1.1.0 -> 1.1.1
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**替代方式:**
|
|
54
|
+
```bash
|
|
55
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump patch
|
|
56
|
+
# 1.1.0 -> 1.1.1
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
#### 次版本 (Minor)
|
|
60
|
+
**推荐方式:**
|
|
61
|
+
```bash
|
|
62
|
+
poetry run aiecs-version --bump minor
|
|
63
|
+
# 1.1.0 -> 1.2.0
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**替代方式:**
|
|
67
|
+
```bash
|
|
68
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump minor
|
|
69
|
+
# 1.1.0 -> 1.2.0
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### 主版本 (Major)
|
|
73
|
+
**推荐方式:**
|
|
74
|
+
```bash
|
|
75
|
+
poetry run aiecs-version --bump major
|
|
76
|
+
# 1.1.0 -> 2.0.0
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**替代方式:**
|
|
80
|
+
```bash
|
|
81
|
+
poetry run python -m aiecs.scripts.aid.version_manager --bump major
|
|
82
|
+
# 1.1.0 -> 2.0.0
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 版本号格式
|
|
86
|
+
|
|
87
|
+
版本号遵循 [语义化版本控制](https://semver.org/) 规范:
|
|
88
|
+
|
|
89
|
+
- **主版本号 (Major)**: 不兼容的API修改
|
|
90
|
+
- **次版本号 (Minor)**: 向下兼容的功能性新增
|
|
91
|
+
- **补丁版本号 (Patch)**: 向下兼容的问题修正
|
|
92
|
+
|
|
93
|
+
格式:`X.Y.Z` (例如:1.2.3)
|
|
94
|
+
|
|
95
|
+
## 命令行选项
|
|
96
|
+
|
|
97
|
+
- `--version, -v`: 设置特定版本号
|
|
98
|
+
- `--bump, -b`: 自动递增版本 (major/minor/patch)
|
|
99
|
+
- `--show, -s`: 显示当前版本
|
|
100
|
+
- `--help, -h`: 显示帮助信息
|
|
101
|
+
|
|
102
|
+
## 示例
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# 查看当前版本(推荐方式)
|
|
106
|
+
poetry run aiecs-version --show
|
|
107
|
+
|
|
108
|
+
# 发布补丁版本
|
|
109
|
+
poetry run aiecs-version --bump patch
|
|
110
|
+
|
|
111
|
+
# 发布新功能版本
|
|
112
|
+
poetry run aiecs-version --bump minor
|
|
113
|
+
|
|
114
|
+
# 发布重大更新版本
|
|
115
|
+
poetry run aiecs-version --bump major
|
|
116
|
+
|
|
117
|
+
# 手动设置版本
|
|
118
|
+
poetry run aiecs-version --version 2.1.0
|
|
119
|
+
|
|
120
|
+
# 注意:也可以使用 Python 模块方式运行
|
|
121
|
+
# poetry run python -m aiecs.scripts.aid.version_manager --show
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 注意事项
|
|
125
|
+
|
|
126
|
+
1. 版本管理工具会自动验证版本号格式
|
|
127
|
+
2. 所有相关文件会同时更新,确保版本号一致性
|
|
128
|
+
3. 更新前建议先提交当前更改到版本控制系统
|
|
129
|
+
4. 工具会显示详细的更新日志,确认所有文件都已正确更新
|
|
130
|
+
|
|
131
|
+
## 故障排除
|
|
132
|
+
|
|
133
|
+
如果遇到问题,请检查:
|
|
134
|
+
|
|
135
|
+
1. 确保在项目根目录下运行命令
|
|
136
|
+
2. 确保所有目标文件存在且可写
|
|
137
|
+
3. 检查版本号格式是否正确 (X.Y.Z)
|
|
138
|
+
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
|
+
]
|