aiecs 1.2.0__py3-none-any.whl → 1.2.2__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 +1 -1
- aiecs/aiecs_client.py +1 -1
- aiecs/config/config.py +38 -1
- aiecs/infrastructure/monitoring/__init__.py +22 -0
- aiecs/infrastructure/monitoring/global_metrics_manager.py +207 -0
- aiecs/infrastructure/persistence/file_storage.py +41 -28
- aiecs/llm/__init__.py +44 -7
- aiecs/llm/callbacks/__init__.py +12 -0
- aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +1 -1
- aiecs/llm/client_factory.py +23 -6
- aiecs/llm/clients/__init__.py +35 -0
- aiecs/llm/{base_client.py → clients/base_client.py} +73 -1
- aiecs/llm/{googleai_client.py → clients/googleai_client.py} +19 -15
- aiecs/llm/{openai_client.py → clients/openai_client.py} +9 -14
- aiecs/llm/{vertex_client.py → clients/vertex_client.py} +15 -15
- aiecs/llm/{xai_client.py → clients/xai_client.py} +36 -50
- aiecs/llm/config/__init__.py +54 -0
- aiecs/llm/config/config_loader.py +275 -0
- aiecs/llm/config/config_validator.py +237 -0
- aiecs/llm/config/model_config.py +132 -0
- aiecs/llm/utils/__init__.py +11 -0
- aiecs/llm/utils/validate_config.py +91 -0
- aiecs/main.py +32 -2
- aiecs/tools/tool_executor/__init__.py +2 -2
- aiecs/tools/tool_executor/tool_executor.py +3 -3
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/METADATA +1 -1
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/RECORD +31 -22
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/WHEEL +0 -0
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/entry_points.txt +0 -0
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/licenses/LICENSE +0 -0
- {aiecs-1.2.0.dist-info → aiecs-1.2.2.dist-info}/top_level.txt +0 -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
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
# Setup logging
|
|
14
|
+
logging.basicConfig(
|
|
15
|
+
level=logging.INFO,
|
|
16
|
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
17
|
+
)
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def main():
|
|
22
|
+
"""Main validation function"""
|
|
23
|
+
try:
|
|
24
|
+
from aiecs.llm.config import get_llm_config_loader, validate_llm_config
|
|
25
|
+
|
|
26
|
+
logger.info("=" * 70)
|
|
27
|
+
logger.info("LLM Models Configuration Validator")
|
|
28
|
+
logger.info("=" * 70)
|
|
29
|
+
|
|
30
|
+
# Load configuration
|
|
31
|
+
loader = get_llm_config_loader()
|
|
32
|
+
config = loader.get_config()
|
|
33
|
+
|
|
34
|
+
logger.info(f"\nConfiguration loaded from: {loader.get_config_path()}")
|
|
35
|
+
|
|
36
|
+
# Validate configuration
|
|
37
|
+
logger.info("\nValidating configuration...")
|
|
38
|
+
is_valid, warnings = validate_llm_config(config)
|
|
39
|
+
|
|
40
|
+
if is_valid:
|
|
41
|
+
logger.info("✓ Configuration is valid!")
|
|
42
|
+
|
|
43
|
+
# Print summary
|
|
44
|
+
logger.info("\n" + "=" * 70)
|
|
45
|
+
logger.info("Configuration Summary")
|
|
46
|
+
logger.info("=" * 70)
|
|
47
|
+
|
|
48
|
+
logger.info(f"\nTotal Providers: {len(config.providers)}")
|
|
49
|
+
|
|
50
|
+
for provider_name, provider_config in config.providers.items():
|
|
51
|
+
logger.info(f"\n{provider_name}:")
|
|
52
|
+
logger.info(f" Default Model: {provider_config.default_model}")
|
|
53
|
+
logger.info(f" Total Models: {len(provider_config.models)}")
|
|
54
|
+
|
|
55
|
+
if provider_config.model_mappings:
|
|
56
|
+
logger.info(f" Model Aliases: {len(provider_config.model_mappings)}")
|
|
57
|
+
|
|
58
|
+
logger.info(" Available Models:")
|
|
59
|
+
for model in provider_config.models:
|
|
60
|
+
cost_str = f"${model.costs.input:.6f} in / ${model.costs.output:.6f} out (per 1K tokens)"
|
|
61
|
+
logger.info(f" - {model.name}: {cost_str}")
|
|
62
|
+
if model.capabilities.vision:
|
|
63
|
+
logger.info(f" Vision: Yes")
|
|
64
|
+
if model.capabilities.function_calling:
|
|
65
|
+
logger.info(f" Function Calling: Yes")
|
|
66
|
+
|
|
67
|
+
logger.info("\n" + "=" * 70)
|
|
68
|
+
logger.info("Validation Complete!")
|
|
69
|
+
logger.info("=" * 70)
|
|
70
|
+
|
|
71
|
+
if warnings:
|
|
72
|
+
logger.info(f"\nNote: {len(warnings)} warnings were generated during validation.")
|
|
73
|
+
logger.info("See logs above for details.")
|
|
74
|
+
|
|
75
|
+
return 0
|
|
76
|
+
|
|
77
|
+
except FileNotFoundError as e:
|
|
78
|
+
logger.error(f"\n✗ Configuration file not found: {e}")
|
|
79
|
+
logger.error("\nPlease ensure the LLM models configuration file exists at:")
|
|
80
|
+
logger.error(" - aiecs/config/llm_models.yaml")
|
|
81
|
+
logger.error(" - Or set LLM_MODELS_CONFIG environment variable")
|
|
82
|
+
return 1
|
|
83
|
+
|
|
84
|
+
except Exception as e:
|
|
85
|
+
logger.error(f"\n✗ Validation failed: {e}", exc_info=True)
|
|
86
|
+
return 1
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == "__main__":
|
|
90
|
+
sys.exit(main())
|
|
91
|
+
|
aiecs/main.py
CHANGED
|
@@ -29,6 +29,10 @@ from aiecs.infrastructure.persistence import (
|
|
|
29
29
|
)
|
|
30
30
|
from aiecs.infrastructure.messaging.celery_task_manager import CeleryTaskManager
|
|
31
31
|
from aiecs.infrastructure.monitoring.structured_logger import setup_structured_logging
|
|
32
|
+
from aiecs.infrastructure.monitoring import (
|
|
33
|
+
initialize_global_metrics,
|
|
34
|
+
close_global_metrics
|
|
35
|
+
)
|
|
32
36
|
|
|
33
37
|
# Import LLM client factory
|
|
34
38
|
from aiecs.llm.client_factory import LLMClientFactory
|
|
@@ -61,6 +65,13 @@ async def lifespan(app: FastAPI):
|
|
|
61
65
|
# Setup structured logging
|
|
62
66
|
setup_structured_logging()
|
|
63
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
|
+
|
|
64
75
|
# Initialize database connection
|
|
65
76
|
try:
|
|
66
77
|
db_manager = DatabaseManager()
|
|
@@ -117,6 +128,13 @@ async def lifespan(app: FastAPI):
|
|
|
117
128
|
await LLMClientFactory.close_all()
|
|
118
129
|
logger.info("LLM clients closed")
|
|
119
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
|
+
|
|
120
138
|
logger.info("AIECS shutdown complete")
|
|
121
139
|
|
|
122
140
|
|
|
@@ -124,7 +142,7 @@ async def lifespan(app: FastAPI):
|
|
|
124
142
|
app = FastAPI(
|
|
125
143
|
title="AIECS - AI Execute Services",
|
|
126
144
|
description="Middleware service for AI-powered task execution and tool orchestration",
|
|
127
|
-
version="1.2.
|
|
145
|
+
version="1.2.2",
|
|
128
146
|
lifespan=lifespan
|
|
129
147
|
)
|
|
130
148
|
|
|
@@ -149,7 +167,19 @@ async def health_check():
|
|
|
149
167
|
return {
|
|
150
168
|
"status": "healthy",
|
|
151
169
|
"service": "aiecs",
|
|
152
|
-
"version": "1.2.
|
|
170
|
+
"version": "1.2.2"
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# Metrics health check endpoint
|
|
175
|
+
@app.get("/metrics/health")
|
|
176
|
+
async def metrics_health():
|
|
177
|
+
"""Check global metrics health"""
|
|
178
|
+
from aiecs.infrastructure.monitoring import is_metrics_initialized, get_metrics_summary
|
|
179
|
+
|
|
180
|
+
return {
|
|
181
|
+
"initialized": is_metrics_initialized(),
|
|
182
|
+
"summary": get_metrics_summary()
|
|
153
183
|
}
|
|
154
184
|
|
|
155
185
|
|
|
@@ -8,7 +8,7 @@ from .tool_executor import (
|
|
|
8
8
|
SecurityError,
|
|
9
9
|
TimeoutError,
|
|
10
10
|
ExecutorConfig,
|
|
11
|
-
|
|
11
|
+
ToolExecutorStats,
|
|
12
12
|
get_executor,
|
|
13
13
|
validate_input,
|
|
14
14
|
cache_result,
|
|
@@ -25,7 +25,7 @@ __all__ = [
|
|
|
25
25
|
'SecurityError',
|
|
26
26
|
'TimeoutError',
|
|
27
27
|
'ExecutorConfig',
|
|
28
|
-
'
|
|
28
|
+
'ToolExecutorStats',
|
|
29
29
|
'get_executor',
|
|
30
30
|
'validate_input',
|
|
31
31
|
'cache_result',
|
|
@@ -76,9 +76,9 @@ class ExecutorConfig(BaseModel):
|
|
|
76
76
|
model_config = ConfigDict(env_prefix="TOOL_EXECUTOR_")
|
|
77
77
|
|
|
78
78
|
# Metrics counter
|
|
79
|
-
class
|
|
79
|
+
class ToolExecutorStats:
|
|
80
80
|
"""
|
|
81
|
-
Tracks executor performance
|
|
81
|
+
Tracks tool executor performance statistics.
|
|
82
82
|
"""
|
|
83
83
|
def __init__(self):
|
|
84
84
|
self.requests: int = 0
|
|
@@ -257,7 +257,7 @@ class ToolExecutor:
|
|
|
257
257
|
)
|
|
258
258
|
self._thread_pool = ThreadPoolExecutor(max_workers=max(os.cpu_count() or 4, self.config.max_workers))
|
|
259
259
|
self._locks: Dict[str, threading.Lock] = {}
|
|
260
|
-
self._metrics =
|
|
260
|
+
self._metrics = ToolExecutorStats()
|
|
261
261
|
self.execution_utils = ExecutionUtils(
|
|
262
262
|
cache_size=self.config.cache_size,
|
|
263
263
|
cache_ttl=self.config.cache_ttl,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
aiecs/__init__.py,sha256=
|
|
1
|
+
aiecs/__init__.py,sha256=j7nUkV4w38idj8EIJXaTfkFWstU-oYs-WfNnRjT6-Xo,1859
|
|
2
2
|
aiecs/__main__.py,sha256=AfQpzy3SgwWuP4DuymYcm4MISMuzqwhxxGSYo53PBvY,1035
|
|
3
|
-
aiecs/aiecs_client.py,sha256=
|
|
4
|
-
aiecs/main.py,sha256=
|
|
3
|
+
aiecs/aiecs_client.py,sha256=gIqecRBBH_bYIWhqiHCemdVgmGb9Jqdxf1b6RoqXWlQ,17276
|
|
4
|
+
aiecs/main.py,sha256=jgn6K3H28tKK5z1CPGh-GcswcISh0bhtRaL1yAhtmlg,10837
|
|
5
5
|
aiecs/application/__init__.py,sha256=NkmrUH1DqxJ3vaVC8QwscNdlWqHfC7ZagL4k3nZ_qz4,192
|
|
6
6
|
aiecs/application/executors/__init__.py,sha256=WIl7L9HBsEhNfbNtJdvBvFUJXzESvNZVaiAA6tdtJcs,191
|
|
7
7
|
aiecs/application/executors/operation_executor.py,sha256=-7mFo1hUnWdehVPg0fnSiRhW3LACpIiyLSH-iu7bX4U,13818
|
|
8
8
|
aiecs/config/__init__.py,sha256=HykU6FgZrUx0w8V1_kAjP9NpXZTddZ9M3xo0fmBwMU8,336
|
|
9
|
-
aiecs/config/config.py,sha256=
|
|
9
|
+
aiecs/config/config.py,sha256=qjuvD7ew0RKtTftTL4PORwgmridBwS4tAep5llSNUSU,6528
|
|
10
10
|
aiecs/config/registry.py,sha256=5CPJcjeMu3FLc_keuCtJT60DtUxF6w-I68uIoxpcdq8,637
|
|
11
11
|
aiecs/core/__init__.py,sha256=H0ZIk96q0KHKivcobnUCVJdJZmewucVJ9MKhRgUxmk0,1037
|
|
12
12
|
aiecs/core/interface/__init__.py,sha256=soI7zdoN3eQynVb9uiwmgXkM5E75JYffTILktHb48x8,688
|
|
@@ -40,23 +40,32 @@ aiecs/infrastructure/__init__.py,sha256=dE-T4IQ0sQTekkMJGqX3HkaaWKJ4gSbq7IN1o8PM
|
|
|
40
40
|
aiecs/infrastructure/messaging/__init__.py,sha256=KOEywSnktNWEN4O8_GE4KSopjMNEyfYhfUaTOkMxLUE,299
|
|
41
41
|
aiecs/infrastructure/messaging/celery_task_manager.py,sha256=yEKJdO_N9hYb3wlOnoVkBzWahvRj637tOkn4geIjPP0,12984
|
|
42
42
|
aiecs/infrastructure/messaging/websocket_manager.py,sha256=HhhLQw2hRV5Scc5HNMMZbAQGQp9QZBYPJQHulKwaeiI,11280
|
|
43
|
-
aiecs/infrastructure/monitoring/__init__.py,sha256=
|
|
43
|
+
aiecs/infrastructure/monitoring/__init__.py,sha256=AwMER9ozL1Vvp-Ol8GKIBqMEO-eDQ38Z6Bh6Vnr_aHk,825
|
|
44
44
|
aiecs/infrastructure/monitoring/executor_metrics.py,sha256=z8KJpq6tfCOEArfR-YJ4UClTsef2mNMFuSDHrP51Aww,6040
|
|
45
|
+
aiecs/infrastructure/monitoring/global_metrics_manager.py,sha256=coIBS6v2MmtlQdzAFZTy9XRQvTYzspiJzYTIciU__pw,6549
|
|
45
46
|
aiecs/infrastructure/monitoring/structured_logger.py,sha256=iI895YHmPoaLdXjxHxd952PeTfGw6sh-yUDCnF8R7NY,1657
|
|
46
47
|
aiecs/infrastructure/monitoring/tracing_manager.py,sha256=g4u6paNCZCYdGDEMZiv4bYv_GTG0s8oug-BJgFmkDp0,13449
|
|
47
48
|
aiecs/infrastructure/persistence/__init__.py,sha256=yoog7fEHmhgY50vGdgDNqiZCPUUL2-xnJrdhT5PrPWU,570
|
|
48
49
|
aiecs/infrastructure/persistence/context_engine_client.py,sha256=KIzreimtg6WbuBYI4U0JTiRmNddpdpKHnGvuHVh86Hs,6051
|
|
49
50
|
aiecs/infrastructure/persistence/database_manager.py,sha256=MRkMTALeeybzAfnfuJrOXbEchBCrMAgsz8YYyEUVMjI,12592
|
|
50
|
-
aiecs/infrastructure/persistence/file_storage.py,sha256=
|
|
51
|
+
aiecs/infrastructure/persistence/file_storage.py,sha256=Z8EozljYPBUuBTzDn2cM2uBEPp2uUW_eHLzwNxbKcOk,23889
|
|
51
52
|
aiecs/infrastructure/persistence/redis_client.py,sha256=CqPtYFP8-KHl3cJG9VHun9YFFSp3kCc3ZaZbW7GlqUU,5791
|
|
52
|
-
aiecs/llm/__init__.py,sha256=
|
|
53
|
-
aiecs/llm/
|
|
54
|
-
aiecs/llm/
|
|
55
|
-
aiecs/llm/custom_callbacks.py,sha256=
|
|
56
|
-
aiecs/llm/
|
|
57
|
-
aiecs/llm/
|
|
58
|
-
aiecs/llm/
|
|
59
|
-
aiecs/llm/
|
|
53
|
+
aiecs/llm/__init__.py,sha256=QlpjRn6WK5rCC0Aswx4AeFmSAIxJQ0XyxjimrIee7jE,1860
|
|
54
|
+
aiecs/llm/client_factory.py,sha256=534lVM4JplAFT-4tMHl4ebN9T9Cfz8WTyJjBGA9ly2s,14383
|
|
55
|
+
aiecs/llm/callbacks/__init__.py,sha256=ewPn_AKobfdCkjxFJ1xlIM3bTWdmM01v4XT9_KUZTbg,192
|
|
56
|
+
aiecs/llm/callbacks/custom_callbacks.py,sha256=V94TSNsorgExgzQkNwvId9lxa11oF7efYOT9ULwsdF0,9941
|
|
57
|
+
aiecs/llm/clients/__init__.py,sha256=uQM004TQappwJMqTxVZNscpVPQtirkvYUPea3QYB7d0,697
|
|
58
|
+
aiecs/llm/clients/base_client.py,sha256=j4NY-oEdG5ALBCSddblPpjttISn5teqLVVUuZyYn7g4,5880
|
|
59
|
+
aiecs/llm/clients/googleai_client.py,sha256=sTgdw4eicxWruNGOMSsuEHbfF9RuDQo8SClqEtu1JOQ,6591
|
|
60
|
+
aiecs/llm/clients/openai_client.py,sha256=x7Y_yTVu0kp-gu5Z-M0Bx-O20D0YDgZoJQxzkjNpr6c,4202
|
|
61
|
+
aiecs/llm/clients/vertex_client.py,sha256=LqCCJSCdsaZ9VuBp8SFDdkqk3MxxHn-0HrtH4_xZG7U,10961
|
|
62
|
+
aiecs/llm/clients/xai_client.py,sha256=XEELb9_qFeeQaansDWvAJRJVpt8CaBRLcYskuv9uDq0,6386
|
|
63
|
+
aiecs/llm/config/__init__.py,sha256=KZbwHoBlbcN7HgNueA5p-0GpyVMJRNG1V5T-tkri8G4,1115
|
|
64
|
+
aiecs/llm/config/config_loader.py,sha256=PTMsZax3CoTrMo6BZlUoI7takII3_DHm3w5xTKgBJpA,8921
|
|
65
|
+
aiecs/llm/config/config_validator.py,sha256=y-wGySLtXfv9ZCOAYY1MhlTkKKUplrSOyK2GlP619Ok,7703
|
|
66
|
+
aiecs/llm/config/model_config.py,sha256=cAEaJ-vtE9vD--1PDkPRUfHQI_roMJmG1RBlaJjapGU,5680
|
|
67
|
+
aiecs/llm/utils/__init__.py,sha256=8Fxcr203TcgNWQ5oalzZJ0P2kFSKbVS231kYYXvGPGs,240
|
|
68
|
+
aiecs/llm/utils/validate_config.py,sha256=oNdU8Zw_rwdJYZN9TO6hq6PNOngChjeIOaA4gV-uDlQ,3114
|
|
60
69
|
aiecs/scripts/__init__.py,sha256=cVxQ5iqym520eDQSpV7B6hWolndCLMOVdvhC_D280PE,66
|
|
61
70
|
aiecs/scripts/aid/VERSION_MANAGEMENT.md,sha256=ElbRZFB9KdnDt9Lc4SQWLNY_3NbnLsl2ZHvLmczh2qw,2497
|
|
62
71
|
aiecs/scripts/aid/__init__.py,sha256=nWdqTPA9pib6NGqckhYHYTwuO70TPkW02eV-e3u5i4w,345
|
|
@@ -116,8 +125,8 @@ aiecs/tools/task_tools/research_tool.py,sha256=teF5PxwzmTdoJ4f1EHWeO6PmwI8p7n5Yr
|
|
|
116
125
|
aiecs/tools/task_tools/scraper_tool.py,sha256=OquSAWrCHauWYJGyFoSD5hJwmWbSeBCYFLbZbEVwC4M,24628
|
|
117
126
|
aiecs/tools/task_tools/search_tool.py,sha256=UJNSZwAw8BXECrH_PmyPYQ_ezv65RcuNxBZrgjp4pIA,37142
|
|
118
127
|
aiecs/tools/task_tools/stats_tool.py,sha256=Z5VtdlToioFpgslaBr9aJO7cZn4pBZ5J9TiX2DmxI9s,24302
|
|
119
|
-
aiecs/tools/tool_executor/__init__.py,sha256=
|
|
120
|
-
aiecs/tools/tool_executor/tool_executor.py,sha256=
|
|
128
|
+
aiecs/tools/tool_executor/__init__.py,sha256=FzQ1paMoGF7gZySTSfg96FwAgV914iMx_rfaFU_UFb8,715
|
|
129
|
+
aiecs/tools/tool_executor/tool_executor.py,sha256=x8RDSdfUaGGSp7ilTsZLFQpRditzfXgqkVbSmzVrXZ8,19508
|
|
121
130
|
aiecs/utils/LLM_output_structor.py,sha256=zKkOhrg6smToD0NTCqj3OepBQDTZXgPK4VsKJEFgxyg,15793
|
|
122
131
|
aiecs/utils/__init__.py,sha256=PkukDzRaeeAJUmfm9vA9ez1l3tjvhDRnWZCqzWI6nNw,562
|
|
123
132
|
aiecs/utils/base_callback.py,sha256=UpNrOZZ1RCmiVPnuhjFNde_m29yWg1ID16vzfzBMk7U,1661
|
|
@@ -127,9 +136,9 @@ aiecs/utils/prompt_loader.py,sha256=cBS2bZXpYQOWSiOGkhwIzyy3_bETqwIblRi_9qQT9iQ,
|
|
|
127
136
|
aiecs/utils/token_usage_repository.py,sha256=1xjenLYwC0YT6lKZFEGO4scRCXLuWdec2MWjzih5SZY,10210
|
|
128
137
|
aiecs/ws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
138
|
aiecs/ws/socket_server.py,sha256=j_9idVY_rWlTsF51FgmuhWCWFVt7_gAHL8vNg3IxV5g,1476
|
|
130
|
-
aiecs-1.2.
|
|
131
|
-
aiecs-1.2.
|
|
132
|
-
aiecs-1.2.
|
|
133
|
-
aiecs-1.2.
|
|
134
|
-
aiecs-1.2.
|
|
135
|
-
aiecs-1.2.
|
|
139
|
+
aiecs-1.2.2.dist-info/licenses/LICENSE,sha256=_1YRaIS0eZu1pv6xfz245UkU0i1Va2B841hv3OWRwqg,12494
|
|
140
|
+
aiecs-1.2.2.dist-info/METADATA,sha256=ibzbDBa2h5RjgtWcUybkj25ex60eXekm92K0tVWCPOs,16635
|
|
141
|
+
aiecs-1.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
142
|
+
aiecs-1.2.2.dist-info/entry_points.txt,sha256=TfLBuwLOfgQqKvnoF1sgTS19-Hgl0aWvCZjIdblIiig,667
|
|
143
|
+
aiecs-1.2.2.dist-info/top_level.txt,sha256=22IlUlOqh9Ni3jXlQNMNUqzbW8dcxXPeR_EQ-BJVcV8,6
|
|
144
|
+
aiecs-1.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|