@aws/ml-container-creator 0.9.1 → 0.10.3

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.
Files changed (90) hide show
  1. package/LICENSE-THIRD-PARTY +9304 -0
  2. package/bin/cli.js +2 -0
  3. package/config/bootstrap-e2e-stack.json +341 -0
  4. package/config/bootstrap-stack.json +40 -3
  5. package/config/parameter-schema-v2.json +2049 -0
  6. package/config/tune-catalog.json +1781 -0
  7. package/infra/ci-harness/buildspec.yml +1 -0
  8. package/infra/ci-harness/lambda/path-prover/brain.ts +306 -0
  9. package/infra/ci-harness/lambda/path-prover/write-results.ts +152 -0
  10. package/infra/ci-harness/lib/ci-harness-stack.ts +837 -7
  11. package/infra/ci-harness/state-machines/path-prover.asl.json +496 -0
  12. package/package.json +53 -68
  13. package/servers/base-image-picker/index.js +121 -121
  14. package/servers/e2e-status/index.js +297 -0
  15. package/servers/e2e-status/manifest.json +14 -0
  16. package/servers/e2e-status/package.json +15 -0
  17. package/servers/endpoint-picker/LICENSE +202 -0
  18. package/servers/endpoint-picker/index.js +536 -0
  19. package/servers/endpoint-picker/manifest.json +14 -0
  20. package/servers/endpoint-picker/package.json +18 -0
  21. package/servers/hyperpod-cluster-picker/index.js +125 -125
  22. package/servers/instance-sizer/index.js +138 -138
  23. package/servers/instance-sizer/lib/instance-ranker.js +76 -76
  24. package/servers/instance-sizer/lib/model-resolver.js +61 -61
  25. package/servers/instance-sizer/lib/quota-resolver.js +113 -113
  26. package/servers/instance-sizer/lib/vram-estimator.js +31 -31
  27. package/servers/lib/bedrock-client.js +38 -38
  28. package/servers/lib/catalogs/jumpstart-public.json +101 -16
  29. package/servers/lib/catalogs/model-servers.json +201 -3
  30. package/servers/lib/catalogs/models.json +182 -26
  31. package/servers/lib/custom-validators.js +13 -13
  32. package/servers/lib/dynamic-resolver.js +4 -4
  33. package/servers/marketplace-picker/index.js +342 -0
  34. package/servers/marketplace-picker/manifest.json +14 -0
  35. package/servers/marketplace-picker/package.json +18 -0
  36. package/servers/model-picker/index.js +382 -382
  37. package/servers/region-picker/index.js +56 -56
  38. package/servers/workload-picker/LICENSE +202 -0
  39. package/servers/workload-picker/catalogs/workload-profiles.json +67 -0
  40. package/servers/workload-picker/index.js +171 -0
  41. package/servers/workload-picker/manifest.json +16 -0
  42. package/servers/workload-picker/package.json +16 -0
  43. package/src/app.js +4 -390
  44. package/src/lib/bootstrap-command-handler.js +710 -1148
  45. package/src/lib/bootstrap-config.js +36 -0
  46. package/src/lib/bootstrap-profile-manager.js +641 -0
  47. package/src/lib/bootstrap-provisioners.js +421 -0
  48. package/src/lib/ci-register-helpers.js +74 -0
  49. package/src/lib/config-loader.js +408 -0
  50. package/src/lib/config-manager.js +66 -1685
  51. package/src/lib/config-mcp-client.js +118 -0
  52. package/src/lib/config-validator.js +634 -0
  53. package/src/lib/cuda-resolver.js +149 -0
  54. package/src/lib/e2e-catalog-validator.js +251 -3
  55. package/src/lib/e2e-ci-recorder.js +103 -0
  56. package/src/lib/generated/cli-options.js +315 -311
  57. package/src/lib/generated/parameter-matrix.js +671 -0
  58. package/src/lib/generated/validation-rules.js +71 -71
  59. package/src/lib/marketplace-flow.js +276 -0
  60. package/src/lib/mcp-query-runner.js +768 -0
  61. package/src/lib/parameter-schema-validator.js +62 -18
  62. package/src/lib/path-prover-brain.js +607 -0
  63. package/src/lib/prompt-runner.js +41 -1504
  64. package/src/lib/prompts/feature-prompts.js +172 -0
  65. package/src/lib/prompts/index.js +48 -0
  66. package/src/lib/prompts/infrastructure-prompts.js +690 -0
  67. package/src/lib/prompts/model-prompts.js +552 -0
  68. package/src/lib/prompts/project-prompts.js +82 -0
  69. package/src/lib/prompts.js +2 -1446
  70. package/src/lib/registry-command-handler.js +135 -3
  71. package/src/lib/secrets-prompt-runner.js +251 -0
  72. package/src/lib/template-variable-resolver.js +422 -0
  73. package/src/lib/tune-catalog-validator.js +37 -4
  74. package/templates/Dockerfile +9 -0
  75. package/templates/code/adapter_sidecar.py +444 -0
  76. package/templates/code/serve +6 -0
  77. package/templates/code/serve.d/vllm.ejs +1 -1
  78. package/templates/do/.benchmark_writer.py +1476 -0
  79. package/templates/do/.tune_helper.py +982 -57
  80. package/templates/do/__pycache__/.benchmark_writer.cpython-312.pyc +0 -0
  81. package/templates/do/adapter +149 -0
  82. package/templates/do/benchmark +639 -85
  83. package/templates/do/config +108 -5
  84. package/templates/do/deploy.d/managed-inference.ejs +192 -11
  85. package/templates/do/optimize +106 -37
  86. package/templates/do/register +89 -0
  87. package/templates/do/test +13 -0
  88. package/templates/do/tune +378 -59
  89. package/templates/do/validate +44 -4
  90. package/config/parameter-schema.json +0 -88
@@ -0,0 +1,496 @@
1
+ {
2
+ "Comment": "Path Prover Orchestrator — proves untested configuration paths end-to-end. Loops: Brain → stages → PickNext → Brain|End. Budget-controlled.",
3
+ "StartAt": "Brain",
4
+ "States": {
5
+ "Brain": {
6
+ "Type": "Task",
7
+ "Resource": "${BrainFunctionArn}",
8
+ "Parameters": {
9
+ "action": "getNextConfig",
10
+ "iteration.$": "$.iteration",
11
+ "budgetSpent.$": "$.budgetSpent",
12
+ "maxProvesPerRun.$": "$.maxProvesPerRun",
13
+ "maxCostPerRun.$": "$.maxCostPerRun",
14
+ "previousResults.$": "$.previousResults",
15
+ "priorityConfigPath.$": "$.priorityConfigPath"
16
+ },
17
+ "ResultPath": "$.brainResult",
18
+ "Retry": [
19
+ {
20
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
21
+ "IntervalSeconds": 5,
22
+ "MaxAttempts": 2,
23
+ "BackoffRate": 2.0
24
+ }
25
+ ],
26
+ "Catch": [
27
+ {
28
+ "ErrorEquals": ["States.ALL"],
29
+ "ResultPath": "$.error",
30
+ "Next": "ClassifyFailure"
31
+ }
32
+ ],
33
+ "Next": "CheckBrainDone"
34
+ },
35
+
36
+ "CheckBrainDone": {
37
+ "Type": "Choice",
38
+ "Choices": [
39
+ {
40
+ "Variable": "$.brainResult.done",
41
+ "BooleanEquals": true,
42
+ "Next": "End"
43
+ }
44
+ ],
45
+ "Default": "PrepareStageInput"
46
+ },
47
+
48
+ "PrepareStageInput": {
49
+ "Type": "Pass",
50
+ "Parameters": {
51
+ "iteration.$": "$.iteration",
52
+ "budgetSpent.$": "$.budgetSpent",
53
+ "maxProvesPerRun.$": "$.maxProvesPerRun",
54
+ "maxCostPerRun.$": "$.maxCostPerRun",
55
+ "previousResults.$": "$.previousResults",
56
+ "brainResult.$": "$.brainResult",
57
+ "currentConfig.$": "$.brainResult.next",
58
+ "tuneRequested.$": "$.brainResult.tuneRequested",
59
+ "priorityConfigPath.$": "$.priorityConfigPath"
60
+ },
61
+ "Next": "GenerateBuildPush"
62
+ },
63
+
64
+ "GenerateBuildPush": {
65
+ "Type": "Task",
66
+ "Resource": "arn:aws:states:::codebuild:startBuild",
67
+ "Parameters": {
68
+ "ProjectName": "${CodeBuildProjectName}",
69
+ "EnvironmentVariablesOverride": [
70
+ {
71
+ "Name": "CONFIG_JSON",
72
+ "Value.$": "States.JsonToString($.currentConfig)",
73
+ "Type": "PLAINTEXT"
74
+ },
75
+ {
76
+ "Name": "CI_STAGE",
77
+ "Value": "path-prove-generate-build-push",
78
+ "Type": "PLAINTEXT"
79
+ },
80
+ {
81
+ "Name": "PATH_PROVER_MODE",
82
+ "Value": "true",
83
+ "Type": "PLAINTEXT"
84
+ }
85
+ ]
86
+ },
87
+ "ResultPath": "$.generateBuildPushResult",
88
+ "Retry": [
89
+ {
90
+ "ErrorEquals": ["States.TaskFailed"],
91
+ "IntervalSeconds": 30,
92
+ "MaxAttempts": 1,
93
+ "BackoffRate": 2.0
94
+ }
95
+ ],
96
+ "Catch": [
97
+ {
98
+ "ErrorEquals": ["States.ALL"],
99
+ "ResultPath": "$.error",
100
+ "Next": "ClassifyFailure"
101
+ }
102
+ ],
103
+ "Next": "DeployTest"
104
+ },
105
+
106
+ "DeployTest": {
107
+ "Type": "Task",
108
+ "Resource": "arn:aws:states:::codebuild:startBuild",
109
+ "Parameters": {
110
+ "ProjectName": "${CodeBuildProjectName}",
111
+ "EnvironmentVariablesOverride": [
112
+ {
113
+ "Name": "CONFIG_JSON",
114
+ "Value.$": "States.JsonToString($.currentConfig)",
115
+ "Type": "PLAINTEXT"
116
+ },
117
+ {
118
+ "Name": "CI_STAGE",
119
+ "Value": "path-prove-deploy-test",
120
+ "Type": "PLAINTEXT"
121
+ },
122
+ {
123
+ "Name": "PATH_PROVER_MODE",
124
+ "Value": "true",
125
+ "Type": "PLAINTEXT"
126
+ }
127
+ ]
128
+ },
129
+ "ResultPath": "$.deployTestResult",
130
+ "Retry": [
131
+ {
132
+ "ErrorEquals": ["States.TaskFailed"],
133
+ "IntervalSeconds": 30,
134
+ "MaxAttempts": 1,
135
+ "BackoffRate": 2.0
136
+ }
137
+ ],
138
+ "Catch": [
139
+ {
140
+ "ErrorEquals": ["States.ALL"],
141
+ "ResultPath": "$.error",
142
+ "Next": "ClassifyFailure"
143
+ }
144
+ ],
145
+ "Next": "CheckTune"
146
+ },
147
+
148
+ "CheckTune": {
149
+ "Type": "Choice",
150
+ "Choices": [
151
+ {
152
+ "Variable": "$.tuneRequested",
153
+ "BooleanEquals": true,
154
+ "Next": "TuneAdapterTest"
155
+ }
156
+ ],
157
+ "Default": "Benchmark"
158
+ },
159
+
160
+ "TuneAdapterTest": {
161
+ "Type": "Task",
162
+ "Resource": "arn:aws:states:::codebuild:startBuild",
163
+ "Parameters": {
164
+ "ProjectName": "${CodeBuildProjectName}",
165
+ "EnvironmentVariablesOverride": [
166
+ {
167
+ "Name": "CONFIG_JSON",
168
+ "Value.$": "States.JsonToString($.currentConfig)",
169
+ "Type": "PLAINTEXT"
170
+ },
171
+ {
172
+ "Name": "CI_STAGE",
173
+ "Value": "path-prove-tune-adapter-test",
174
+ "Type": "PLAINTEXT"
175
+ },
176
+ {
177
+ "Name": "PATH_PROVER_MODE",
178
+ "Value": "true",
179
+ "Type": "PLAINTEXT"
180
+ }
181
+ ]
182
+ },
183
+ "ResultPath": "$.tuneAdapterTestResult",
184
+ "Retry": [
185
+ {
186
+ "ErrorEquals": ["States.TaskFailed"],
187
+ "IntervalSeconds": 30,
188
+ "MaxAttempts": 1,
189
+ "BackoffRate": 2.0
190
+ }
191
+ ],
192
+ "Catch": [
193
+ {
194
+ "ErrorEquals": ["States.ALL"],
195
+ "ResultPath": "$.error",
196
+ "Next": "ClassifyFailure"
197
+ }
198
+ ],
199
+ "Next": "Benchmark"
200
+ },
201
+
202
+ "Benchmark": {
203
+ "Type": "Task",
204
+ "Resource": "arn:aws:states:::codebuild:startBuild",
205
+ "Parameters": {
206
+ "ProjectName": "${CodeBuildProjectName}",
207
+ "EnvironmentVariablesOverride": [
208
+ {
209
+ "Name": "CONFIG_JSON",
210
+ "Value.$": "States.JsonToString($.currentConfig)",
211
+ "Type": "PLAINTEXT"
212
+ },
213
+ {
214
+ "Name": "CI_STAGE",
215
+ "Value": "path-prove-benchmark",
216
+ "Type": "PLAINTEXT"
217
+ },
218
+ {
219
+ "Name": "PATH_PROVER_MODE",
220
+ "Value": "true",
221
+ "Type": "PLAINTEXT"
222
+ }
223
+ ]
224
+ },
225
+ "ResultPath": "$.benchmarkResult",
226
+ "Retry": [
227
+ {
228
+ "ErrorEquals": ["States.TaskFailed"],
229
+ "IntervalSeconds": 30,
230
+ "MaxAttempts": 1,
231
+ "BackoffRate": 2.0
232
+ }
233
+ ],
234
+ "Catch": [
235
+ {
236
+ "ErrorEquals": ["States.ALL"],
237
+ "ResultPath": "$.error",
238
+ "Next": "ClassifyFailure"
239
+ }
240
+ ],
241
+ "Next": "WriteResults"
242
+ },
243
+
244
+ "WriteResults": {
245
+ "Type": "Task",
246
+ "Resource": "${WriteResultsFunctionArn}",
247
+ "Parameters": {
248
+ "action": "writeResults",
249
+ "config.$": "$.currentConfig",
250
+ "benchmarkResult.$": "$.benchmarkResult",
251
+ "runType": "path_prove"
252
+ },
253
+ "ResultPath": "$.writeResult",
254
+ "Retry": [
255
+ {
256
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
257
+ "IntervalSeconds": 5,
258
+ "MaxAttempts": 2,
259
+ "BackoffRate": 2.0
260
+ }
261
+ ],
262
+ "Catch": [
263
+ {
264
+ "ErrorEquals": ["States.ALL"],
265
+ "ResultPath": "$.error",
266
+ "Next": "ClassifyFailure"
267
+ }
268
+ ],
269
+ "Next": "Clean"
270
+ },
271
+
272
+ "Clean": {
273
+ "Type": "Task",
274
+ "Resource": "arn:aws:states:::codebuild:startBuild",
275
+ "Parameters": {
276
+ "ProjectName": "${CodeBuildProjectName}",
277
+ "EnvironmentVariablesOverride": [
278
+ {
279
+ "Name": "CONFIG_JSON",
280
+ "Value.$": "States.JsonToString($.currentConfig)",
281
+ "Type": "PLAINTEXT"
282
+ },
283
+ {
284
+ "Name": "CI_STAGE",
285
+ "Value": "path-prove-clean",
286
+ "Type": "PLAINTEXT"
287
+ },
288
+ {
289
+ "Name": "PATH_PROVER_MODE",
290
+ "Value": "true",
291
+ "Type": "PLAINTEXT"
292
+ }
293
+ ]
294
+ },
295
+ "ResultPath": "$.cleanResult",
296
+ "Retry": [
297
+ {
298
+ "ErrorEquals": ["States.TaskFailed"],
299
+ "IntervalSeconds": 10,
300
+ "MaxAttempts": 2,
301
+ "BackoffRate": 2.0
302
+ }
303
+ ],
304
+ "Catch": [
305
+ {
306
+ "ErrorEquals": ["States.ALL"],
307
+ "ResultPath": "$.cleanError",
308
+ "Next": "PickNext"
309
+ }
310
+ ],
311
+ "Next": "PickNext"
312
+ },
313
+
314
+ "PickNext": {
315
+ "Type": "Task",
316
+ "Resource": "${BrainFunctionArn}",
317
+ "Parameters": {
318
+ "action": "pickNext",
319
+ "iteration.$": "$.iteration",
320
+ "budgetSpent.$": "$.budgetSpent",
321
+ "maxProvesPerRun.$": "$.maxProvesPerRun",
322
+ "maxCostPerRun.$": "$.maxCostPerRun",
323
+ "currentConfig.$": "$.currentConfig",
324
+ "previousResults.$": "$.previousResults",
325
+ "lastResult": "success",
326
+ "priorityConfigPath.$": "$.priorityConfigPath"
327
+ },
328
+ "ResultPath": "$.pickNextResult",
329
+ "Retry": [
330
+ {
331
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
332
+ "IntervalSeconds": 5,
333
+ "MaxAttempts": 2,
334
+ "BackoffRate": 2.0
335
+ }
336
+ ],
337
+ "Catch": [
338
+ {
339
+ "ErrorEquals": ["States.ALL"],
340
+ "ResultPath": "$.error",
341
+ "Next": "End"
342
+ }
343
+ ],
344
+ "Next": "CheckDone"
345
+ },
346
+
347
+ "CheckDone": {
348
+ "Type": "Choice",
349
+ "Choices": [
350
+ {
351
+ "Variable": "$.pickNextResult.done",
352
+ "BooleanEquals": true,
353
+ "Next": "End"
354
+ }
355
+ ],
356
+ "Default": "UpdateIterationState"
357
+ },
358
+
359
+ "UpdateIterationState": {
360
+ "Type": "Pass",
361
+ "Parameters": {
362
+ "iteration.$": "$.pickNextResult.iteration",
363
+ "budgetSpent.$": "$.pickNextResult.budgetSpent",
364
+ "maxProvesPerRun.$": "$.maxProvesPerRun",
365
+ "maxCostPerRun.$": "$.maxCostPerRun",
366
+ "previousResults.$": "$.pickNextResult.previousResults",
367
+ "brainResult.$": "$.pickNextResult",
368
+ "priorityConfigPath.$": "$.priorityConfigPath"
369
+ },
370
+ "Next": "CheckBrainDone"
371
+ },
372
+
373
+ "ClassifyFailure": {
374
+ "Type": "Task",
375
+ "Resource": "${ClassifyFailureFunctionArn}",
376
+ "Parameters": {
377
+ "action": "classifyFailure",
378
+ "error.$": "$.error",
379
+ "config.$": "$.currentConfig",
380
+ "iteration.$": "$.iteration"
381
+ },
382
+ "ResultPath": "$.classification",
383
+ "Retry": [
384
+ {
385
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
386
+ "IntervalSeconds": 5,
387
+ "MaxAttempts": 2,
388
+ "BackoffRate": 2.0
389
+ }
390
+ ],
391
+ "Next": "WriteFailureRecord"
392
+ },
393
+
394
+ "WriteFailureRecord": {
395
+ "Type": "Task",
396
+ "Resource": "${WriteResultsFunctionArn}",
397
+ "Parameters": {
398
+ "action": "writeFailure",
399
+ "config.$": "$.currentConfig",
400
+ "error.$": "$.error",
401
+ "classification.$": "$.classification",
402
+ "runType": "path_prove"
403
+ },
404
+ "ResultPath": "$.failureWriteResult",
405
+ "Retry": [
406
+ {
407
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
408
+ "IntervalSeconds": 5,
409
+ "MaxAttempts": 2,
410
+ "BackoffRate": 2.0
411
+ }
412
+ ],
413
+ "Next": "CleanAfterFailure"
414
+ },
415
+
416
+ "CleanAfterFailure": {
417
+ "Type": "Task",
418
+ "Resource": "arn:aws:states:::codebuild:startBuild",
419
+ "Parameters": {
420
+ "ProjectName": "${CodeBuildProjectName}",
421
+ "EnvironmentVariablesOverride": [
422
+ {
423
+ "Name": "CONFIG_JSON",
424
+ "Value.$": "States.JsonToString($.currentConfig)",
425
+ "Type": "PLAINTEXT"
426
+ },
427
+ {
428
+ "Name": "CI_STAGE",
429
+ "Value": "path-prove-clean",
430
+ "Type": "PLAINTEXT"
431
+ },
432
+ {
433
+ "Name": "PATH_PROVER_MODE",
434
+ "Value": "true",
435
+ "Type": "PLAINTEXT"
436
+ }
437
+ ]
438
+ },
439
+ "ResultPath": "$.failureCleanResult",
440
+ "Retry": [
441
+ {
442
+ "ErrorEquals": ["States.TaskFailed"],
443
+ "IntervalSeconds": 10,
444
+ "MaxAttempts": 2,
445
+ "BackoffRate": 2.0
446
+ }
447
+ ],
448
+ "Catch": [
449
+ {
450
+ "ErrorEquals": ["States.ALL"],
451
+ "ResultPath": "$.failureCleanError",
452
+ "Next": "PickNextAfterFailure"
453
+ }
454
+ ],
455
+ "Next": "PickNextAfterFailure"
456
+ },
457
+
458
+ "PickNextAfterFailure": {
459
+ "Type": "Task",
460
+ "Resource": "${BrainFunctionArn}",
461
+ "Parameters": {
462
+ "action": "pickNext",
463
+ "iteration.$": "$.iteration",
464
+ "budgetSpent.$": "$.budgetSpent",
465
+ "maxProvesPerRun.$": "$.maxProvesPerRun",
466
+ "maxCostPerRun.$": "$.maxCostPerRun",
467
+ "currentConfig.$": "$.currentConfig",
468
+ "previousResults.$": "$.previousResults",
469
+ "lastResult": "failure",
470
+ "classification.$": "$.classification",
471
+ "priorityConfigPath.$": "$.priorityConfigPath"
472
+ },
473
+ "ResultPath": "$.pickNextResult",
474
+ "Retry": [
475
+ {
476
+ "ErrorEquals": ["Lambda.ServiceException", "Lambda.AWSLambdaException"],
477
+ "IntervalSeconds": 5,
478
+ "MaxAttempts": 2,
479
+ "BackoffRate": 2.0
480
+ }
481
+ ],
482
+ "Catch": [
483
+ {
484
+ "ErrorEquals": ["States.ALL"],
485
+ "ResultPath": "$.error",
486
+ "Next": "End"
487
+ }
488
+ ],
489
+ "Next": "CheckDone"
490
+ },
491
+
492
+ "End": {
493
+ "Type": "Succeed"
494
+ }
495
+ }
496
+ }
package/package.json CHANGED
@@ -1,16 +1,18 @@
1
1
  {
2
2
  "name": "@aws/ml-container-creator",
3
- "version": "0.9.1",
4
- "description": "Generator for SageMaker AI BYOC paradigm for predictive inference use-cases.",
5
- "type": "module",
6
- "main": "src/app.js",
3
+ "version": "0.10.3",
4
+ "description": "Build and deploy custom ML containers on AWS SageMaker with minimal configuration.",
5
+ "main": "src/index.js",
7
6
  "bin": {
8
- "ml-container-creator": "./bin/cli.js"
9
- },
10
- "publishConfig": {
11
- "access": "public"
7
+ "ml-container-creator": "./bin/cli.js",
8
+ "mcc": "./bin/cli.js"
12
9
  },
13
- "prepublishOnly": "npm run lint:fix && npm run test:ci",
10
+ "keywords": [
11
+ "sagemaker",
12
+ "docker",
13
+ "ml",
14
+ "containers"
15
+ ],
14
16
  "repository": {
15
17
  "type": "git",
16
18
  "url": "git+https://github.com/awslabs/ml-container-creator.git"
@@ -36,6 +38,19 @@
36
38
  "servers/instance-sizer/index.js",
37
39
  "servers/instance-sizer/manifest.json",
38
40
  "servers/instance-sizer/package.json",
41
+ "servers/endpoint-picker/index.js",
42
+ "servers/endpoint-picker/manifest.json",
43
+ "servers/endpoint-picker/package.json",
44
+ "servers/marketplace-picker/index.js",
45
+ "servers/marketplace-picker/manifest.json",
46
+ "servers/marketplace-picker/package.json",
47
+ "servers/e2e-status/index.js",
48
+ "servers/e2e-status/manifest.json",
49
+ "servers/e2e-status/package.json",
50
+ "servers/workload-picker/catalogs/",
51
+ "servers/workload-picker/index.js",
52
+ "servers/workload-picker/manifest.json",
53
+ "servers/workload-picker/package.json",
39
54
  "servers/lib/bedrock-client.js",
40
55
  "servers/lib/custom-validators.js",
41
56
  "servers/lib/dynamic-resolver.js",
@@ -44,65 +59,49 @@
44
59
  "servers/README.md",
45
60
  "config/defaults.json",
46
61
  "config/bootstrap-stack.json",
47
- "config/parameter-schema.json",
62
+ "config/bootstrap-e2e-stack.json",
63
+ "config/parameter-schema-v2.json",
64
+ "config/tune-catalog.json",
48
65
  "config/presets/",
49
66
  "infra/ci-harness/bin/",
50
67
  "infra/ci-harness/lambda/",
51
68
  "infra/ci-harness/lib/",
69
+ "infra/ci-harness/state-machines/",
52
70
  "infra/ci-harness/buildspec.yml",
53
71
  "infra/ci-harness/cdk.json",
54
72
  "infra/ci-harness/package.json",
55
73
  "infra/ci-harness/package-lock.json",
56
74
  "infra/ci-harness/tsconfig.json",
75
+ "infra/ci-harness/state-machines/",
57
76
  "README.md",
58
77
  "LICENSE",
59
78
  "LICENSE-THIRD-PARTY",
60
79
  "NOTICE"
61
80
  ],
62
- "keywords": [
63
- "cli",
64
- "standalone",
65
- "sagemaker",
66
- "byoc",
67
- "aws",
68
- "machine-learning",
69
- "docker"
70
- ],
81
+ "type": "module",
82
+ "license": "Apache-2.0",
83
+ "engines": {
84
+ "node": ">=24.11.1",
85
+ "npm": ">=11.6.2"
86
+ },
71
87
  "scripts": {
72
- "test": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --exit --reporter test/reporters/progress-reporter.cjs",
73
- "test:ci": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --exit --parallel --reporter spec",
74
- "test:verbose": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --exit --reporter spec",
75
- "test:minimal": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --reporter test/reporters/minimal-reporter.cjs",
76
- "test:watch": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --watch --reporter test/reporters/progress-reporter.cjs",
77
- "test:fast": "VALIDATE_ENV_VARS=false PROPERTY_NUM_RUNS=10 mocha test/**/*.test.js --exit --parallel --timeout 60000 --reporter dot",
78
- "test:coverage": "VALIDATE_ENV_VARS=false nyc mocha test/**/*.test.js",
79
- "test:unit": "VALIDATE_ENV_VARS=false mocha test/unit/**/*.test.js test/helpers/**/*.test.js --reporter spec",
80
- "test:integration": "VALIDATE_ENV_VARS=false mocha test/input-parsing-and-generation/**/*.test.js --reporter spec",
81
- "test:property": "VALIDATE_ENV_VARS=false mocha test/property/**/*.test.js --reporter spec",
82
- "test:all": "npm run test:ci",
83
- "test:servers": "for dir in servers/*/; do if [ -f \"$dir/package.json\" ] && node -e \"const p=JSON.parse(require('fs').readFileSync('${dir}package.json','utf8')); process.exit(p.scripts&&p.scripts.test?0:1)\"; then echo \"\\n🧪 Testing $dir\" && (cd \"$dir\" && npm test) || exit 1; fi; done",
84
- "test:perf": "VALIDATE_ENV_VARS=false mocha test/**/*.test.js --reporter json > test-results.json && node scripts/analyze-test-performance.js",
85
- "security-audit": "npm audit --audit-level=high",
86
- "security-fix": "npm audit fix",
87
- "lint": "eslint src/**/*.js bin/**/*.js test/**/*.js",
88
- "lint:fix": "eslint src/**/*.js bin/**/*.js test/**/*.js --fix",
89
- "start": "ml-container-creator",
90
- "dev": "npm link && ml-container-creator",
91
- "clean": "rm -rf test-output-*",
92
- "validate": "npm run lint && npm run test:all",
93
- "validate:catalogs": "node scripts/validate-catalog-enums.js",
94
- "validate:namespaces": "node scripts/validate-namespaces.js",
95
- "docs:serve": "mkdocs serve",
96
- "docs:build": "mkdocs build",
97
- "docs:deploy": "mkdocs gh-deploy",
98
- "docs:sync": "node scripts/sync-command-generator.js",
99
- "docs:check": "node scripts/sync-command-generator.js --check",
100
- "codegen": "node scripts/codegen-cli.js && node scripts/codegen-validator.js && node scripts/codegen-widget.js",
101
- "codegen:check": "node scripts/codegen-cli.js && node scripts/codegen-validator.js && node scripts/codegen-widget.js && node scripts/codegen-parity.js",
102
- "_sbom": "npm sbom --sbom-format spdx > sbom.json && for dir in servers/*/; do [ -f \"$dir/package.json\" ] && (cd \"$dir\" && npm sbom --sbom-format spdx > sbom.json); done",
103
- "_licenses:review": "license-checker --production --exclude MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,0BSD && for dir in servers/*/; do [ -f \"$dir/package.json\" ] && echo \"\\nChecking $dir\" && (cd \"$dir\" && npx license-checker --production --exclude MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,0BSD); done",
104
- "_licenses:csv": "license-checker --csv --out ./licenses.csv && for dir in servers/*/; do [ -f \"$dir/package.json\" ] && (cd \"$dir\" && npx license-checker --csv --out licenses.csv); done && cat servers/*/licenses.csv >> licenses.csv",
105
- "_licenses:attribution": "generate-attribution && mv oss-attribution/attribution.txt LICENSE-THIRD-PARTY && rm -rf oss-attribution && for dir in servers/*/; do [ -f \"$dir/package.json\" ] && (cd \"$dir\" && generate-attribution && cat oss-attribution/attribution.txt >> ../../LICENSE-THIRD-PARTY && rm -rf oss-attribution); done"
88
+ "test": "mocha 'test/**/*.test.js' --recursive --timeout 30000",
89
+ "test:property": "mocha 'test/property/**/*.test.js' --recursive --timeout 60000",
90
+ "test:all": "npm run test && npm run test:property",
91
+ "test:fast": "mocha 'test/**/*.test.js' --recursive --timeout 15000 --parallel",
92
+ "test:unit": "mocha 'test/unit/**/*.test.js' --recursive --timeout 15000",
93
+ "test:integration": "mocha 'test/integration/**/*.test.js' --recursive --timeout 30000",
94
+ "test:servers": "node servers/region-picker/test.js && node servers/instance-sizer/test.js && node servers/workload-picker/test.js",
95
+ "test:watch": "mocha 'test/**/*.test.js' --recursive --timeout 30000 --watch",
96
+ "test:coverage": "nyc npm test",
97
+ "test:ci": "npm run lint && npm run test:all",
98
+ "test:perf": "node scripts/analyze-test-performance.js",
99
+ "lint": "eslint src/ servers/ bin/ --ext .js,.cjs,.mjs",
100
+ "lint:fix": "eslint src/ servers/ bin/ --ext .js,.cjs,.mjs --fix",
101
+ "codegen": "node scripts/codegen-cli.js && node scripts/codegen-validator.js && node scripts/codegen-widget.js && node scripts/codegen-parameter-matrix.js",
102
+ "validate:doc-commands": "node scripts/validate-docs-commands.js",
103
+ "sbom": "sbom --format spdx --output sbom.json",
104
+ "prepublishOnly": "npm run lint && npm run test:all"
106
105
  },
107
106
  "dependencies": {
108
107
  "@inquirer/prompts": "^8.4.2",
@@ -126,19 +125,5 @@
126
125
  "npm-force-resolutions": "^0.0.10",
127
126
  "nyc": "^15.1.0",
128
127
  "sbom": "^0.0.0"
129
- },
130
- "engines": {
131
- "node": ">=24.11.1",
132
- "npm": ">=11.6.2"
133
- },
134
- "overrides": {
135
- "cross-spawn": "^7.0.3",
136
- "diff": "^5.2.2",
137
- "semver": "^7.5.4",
138
- "got": "^11.8.5",
139
- "qs": "^6.14.1",
140
- "serialize-javascript": "^7.0.5"
141
- },
142
- "author": "Dan Ferguson",
143
- "license": "Apache-2.0"
128
+ }
144
129
  }