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
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
AIECS Version Manager
|
|
4
|
+
|
|
5
|
+
A script to manage version numbers across multiple files in the AIECS project.
|
|
6
|
+
Updates version numbers in:
|
|
7
|
+
- aiecs/__init__.py (__version__)
|
|
8
|
+
- aiecs/main.py (FastAPI app version and health check version)
|
|
9
|
+
- pyproject.toml (project version)
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
aiecs-version --version 1.2.0
|
|
13
|
+
aiecs-version --bump patch
|
|
14
|
+
aiecs-version --bump minor
|
|
15
|
+
aiecs-version --bump major
|
|
16
|
+
aiecs-version --show
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import argparse
|
|
20
|
+
import re
|
|
21
|
+
import sys
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
from typing import Optional, Tuple
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class VersionManager:
|
|
27
|
+
"""Manages version numbers across AIECS project files"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, project_root: Optional[Path] = None):
|
|
30
|
+
"""Initialize the version manager with project root path"""
|
|
31
|
+
if project_root is None:
|
|
32
|
+
# Find project root by looking for pyproject.toml
|
|
33
|
+
current = Path(__file__).parent
|
|
34
|
+
while current != current.parent:
|
|
35
|
+
if (current / "pyproject.toml").exists():
|
|
36
|
+
project_root = current
|
|
37
|
+
break
|
|
38
|
+
current = current.parent
|
|
39
|
+
|
|
40
|
+
if project_root is None:
|
|
41
|
+
raise RuntimeError("Could not find project root (pyproject.toml)")
|
|
42
|
+
|
|
43
|
+
self.project_root = project_root
|
|
44
|
+
self.files = {
|
|
45
|
+
"init": project_root / "aiecs" / "__init__.py",
|
|
46
|
+
"main": project_root / "aiecs" / "main.py",
|
|
47
|
+
"pyproject": project_root / "pyproject.toml",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
def get_current_version(self) -> str:
|
|
51
|
+
"""Get the current version from __init__.py"""
|
|
52
|
+
init_file = self.files["init"]
|
|
53
|
+
if not init_file.exists():
|
|
54
|
+
raise FileNotFoundError(f"Could not find {init_file}")
|
|
55
|
+
|
|
56
|
+
content = init_file.read_text(encoding="utf-8")
|
|
57
|
+
match = re.search(r'__version__\s*=\s*["\']([^"\']+)["\']', content)
|
|
58
|
+
if not match:
|
|
59
|
+
raise ValueError("Could not find __version__ in __init__.py")
|
|
60
|
+
|
|
61
|
+
return match.group(1)
|
|
62
|
+
|
|
63
|
+
def parse_version(self, version: str) -> Tuple[int, int, int]:
|
|
64
|
+
"""Parse version string into major, minor, patch components"""
|
|
65
|
+
match = re.match(r"^(\d+)\.(\d+)\.(\d+)$", version)
|
|
66
|
+
if not match:
|
|
67
|
+
raise ValueError(f"Invalid version format: {version}. Expected format: X.Y.Z")
|
|
68
|
+
|
|
69
|
+
return int(match.group(1)), int(match.group(2)), int(match.group(3))
|
|
70
|
+
|
|
71
|
+
def bump_version(self, current_version: str, bump_type: str) -> str:
|
|
72
|
+
"""Bump version based on type (major, minor, patch)"""
|
|
73
|
+
major, minor, patch = self.parse_version(current_version)
|
|
74
|
+
|
|
75
|
+
if bump_type == "major":
|
|
76
|
+
major += 1
|
|
77
|
+
minor = 0
|
|
78
|
+
patch = 0
|
|
79
|
+
elif bump_type == "minor":
|
|
80
|
+
minor += 1
|
|
81
|
+
patch = 0
|
|
82
|
+
elif bump_type == "patch":
|
|
83
|
+
patch += 1
|
|
84
|
+
else:
|
|
85
|
+
raise ValueError(f"Invalid bump type: {bump_type}. Use 'major', 'minor', or 'patch'")
|
|
86
|
+
|
|
87
|
+
return f"{major}.{minor}.{patch}"
|
|
88
|
+
|
|
89
|
+
def update_init_file(self, new_version: str) -> None:
|
|
90
|
+
"""Update version in aiecs/__init__.py"""
|
|
91
|
+
init_file = self.files["init"]
|
|
92
|
+
content = init_file.read_text(encoding="utf-8")
|
|
93
|
+
|
|
94
|
+
# Update __version__ line
|
|
95
|
+
content = re.sub(
|
|
96
|
+
r'(__version__\s*=\s*["\'])([^"\']+)(["\'])',
|
|
97
|
+
rf"\g<1>{new_version}\g<3>",
|
|
98
|
+
content,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
init_file.write_text(content, encoding="utf-8")
|
|
102
|
+
print(f'✓ Updated {init_file.relative_to(self.project_root)}: __version__ = "{new_version}"')
|
|
103
|
+
|
|
104
|
+
def update_main_file(self, new_version: str) -> None:
|
|
105
|
+
"""Update version in aiecs/main.py"""
|
|
106
|
+
main_file = self.files["main"]
|
|
107
|
+
content = main_file.read_text(encoding="utf-8")
|
|
108
|
+
|
|
109
|
+
# Update FastAPI app version
|
|
110
|
+
content = re.sub(r'(version=")([^"]+)(")', rf"\g<1>{new_version}\g<3>", content)
|
|
111
|
+
|
|
112
|
+
# Update health check version
|
|
113
|
+
content = re.sub(r'("version":\s*")([^"]+)(")', rf"\g<1>{new_version}\g<3>", content)
|
|
114
|
+
|
|
115
|
+
main_file.write_text(content, encoding="utf-8")
|
|
116
|
+
print(f"✓ Updated {main_file.relative_to(self.project_root)}: FastAPI version and health check version")
|
|
117
|
+
|
|
118
|
+
def update_pyproject_file(self, new_version: str) -> None:
|
|
119
|
+
"""Update version in pyproject.toml"""
|
|
120
|
+
pyproject_file = self.files["pyproject"]
|
|
121
|
+
content = pyproject_file.read_text(encoding="utf-8")
|
|
122
|
+
|
|
123
|
+
# Update project version (only in [project] section, not in [project.scripts])
|
|
124
|
+
# Use a more specific pattern that only matches within [project] section
|
|
125
|
+
# Pattern: match [project] section, then find version line before next [section]
|
|
126
|
+
lines = content.split('\n')
|
|
127
|
+
in_project_section = False
|
|
128
|
+
updated = False
|
|
129
|
+
|
|
130
|
+
for i, line in enumerate(lines):
|
|
131
|
+
# Check if we're entering [project] section
|
|
132
|
+
if line.strip() == '[project]':
|
|
133
|
+
in_project_section = True
|
|
134
|
+
continue
|
|
135
|
+
|
|
136
|
+
# Check if we're leaving [project] section (entering another section)
|
|
137
|
+
if in_project_section and line.strip().startswith('[') and line.strip() != '[project]':
|
|
138
|
+
in_project_section = False
|
|
139
|
+
break
|
|
140
|
+
|
|
141
|
+
# Update version line if we're in [project] section
|
|
142
|
+
if in_project_section and re.match(r'^\s*version\s*=\s*"', line):
|
|
143
|
+
lines[i] = re.sub(
|
|
144
|
+
r'^(\s*version\s*=\s*")([^"]+)(")',
|
|
145
|
+
rf'\g<1>{new_version}\g<3>',
|
|
146
|
+
line,
|
|
147
|
+
)
|
|
148
|
+
updated = True
|
|
149
|
+
break
|
|
150
|
+
|
|
151
|
+
if not updated:
|
|
152
|
+
raise ValueError("Could not find version in [project] section of pyproject.toml")
|
|
153
|
+
|
|
154
|
+
content = '\n'.join(lines)
|
|
155
|
+
pyproject_file.write_text(content, encoding="utf-8")
|
|
156
|
+
print(f"✓ Updated {pyproject_file.relative_to(self.project_root)}: project version")
|
|
157
|
+
|
|
158
|
+
def update_version(self, new_version: str) -> None:
|
|
159
|
+
"""Update version in all files"""
|
|
160
|
+
# Validate version format
|
|
161
|
+
self.parse_version(new_version)
|
|
162
|
+
|
|
163
|
+
print(f"Updating version to {new_version}...")
|
|
164
|
+
print()
|
|
165
|
+
|
|
166
|
+
# Update all files
|
|
167
|
+
self.update_init_file(new_version)
|
|
168
|
+
self.update_main_file(new_version)
|
|
169
|
+
self.update_pyproject_file(new_version)
|
|
170
|
+
|
|
171
|
+
print()
|
|
172
|
+
print(f"✓ Successfully updated version to {new_version} in all files!")
|
|
173
|
+
|
|
174
|
+
def show_version(self) -> None:
|
|
175
|
+
"""Show current version"""
|
|
176
|
+
try:
|
|
177
|
+
version = self.get_current_version()
|
|
178
|
+
print(f"Current version: {version}")
|
|
179
|
+
except Exception as e:
|
|
180
|
+
print(f"Error getting current version: {e}", file=sys.stderr)
|
|
181
|
+
sys.exit(1)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def main():
|
|
185
|
+
"""Main entry point for the version manager"""
|
|
186
|
+
# Always use 'aiecs-version' as program name for consistent help text
|
|
187
|
+
# regardless of how the script is invoked (module or entry point)
|
|
188
|
+
parser = argparse.ArgumentParser(
|
|
189
|
+
prog='aiecs-version',
|
|
190
|
+
description="AIECS Version Manager - Update version numbers across project files",
|
|
191
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
192
|
+
epilog="""
|
|
193
|
+
Examples:
|
|
194
|
+
aiecs-version --version 1.2.0 # Set specific version
|
|
195
|
+
aiecs-version --bump patch # Bump patch version (1.1.0 -> 1.1.1)
|
|
196
|
+
aiecs-version --bump minor # Bump minor version (1.1.0 -> 1.2.0)
|
|
197
|
+
aiecs-version --bump major # Bump major version (1.1.0 -> 2.0.0)
|
|
198
|
+
aiecs-version --show # Show current version
|
|
199
|
+
""",
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
# Create mutually exclusive group for version options
|
|
203
|
+
version_group = parser.add_mutually_exclusive_group(required=True)
|
|
204
|
+
version_group.add_argument("--version", "-v", type=str, help="Set specific version (e.g., 1.2.0)")
|
|
205
|
+
version_group.add_argument(
|
|
206
|
+
"--bump",
|
|
207
|
+
"-b",
|
|
208
|
+
choices=["major", "minor", "patch"],
|
|
209
|
+
help="Bump version: major (X.0.0), minor (X.Y.0), or patch (X.Y.Z)",
|
|
210
|
+
)
|
|
211
|
+
version_group.add_argument("--show", "-s", action="store_true", help="Show current version")
|
|
212
|
+
|
|
213
|
+
args = parser.parse_args()
|
|
214
|
+
|
|
215
|
+
try:
|
|
216
|
+
manager = VersionManager()
|
|
217
|
+
|
|
218
|
+
if args.show:
|
|
219
|
+
manager.show_version()
|
|
220
|
+
elif args.version:
|
|
221
|
+
manager.update_version(args.version)
|
|
222
|
+
elif args.bump:
|
|
223
|
+
current_version = manager.get_current_version()
|
|
224
|
+
new_version = manager.bump_version(current_version, args.bump)
|
|
225
|
+
print(f"Bumping {args.bump} version: {current_version} -> {new_version}")
|
|
226
|
+
print()
|
|
227
|
+
manager.update_version(new_version)
|
|
228
|
+
|
|
229
|
+
except Exception as e:
|
|
230
|
+
print(f"Error: {e}", file=sys.stderr)
|
|
231
|
+
sys.exit(1)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
if __name__ == "__main__":
|
|
235
|
+
main()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
依赖检查和修复工具
|
|
3
|
+
|
|
4
|
+
提供 AIECS 系统依赖的检查、修复和 NLP 数据下载功能。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .dependency_checker import main as dependency_checker_main
|
|
8
|
+
from .dependency_fixer import main as dependency_fixer_main
|
|
9
|
+
from .download_nlp_data import main as download_nlp_data_main
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"dependency_checker_main",
|
|
13
|
+
"dependency_fixer_main",
|
|
14
|
+
"download_nlp_data_main",
|
|
15
|
+
]
|