@aws/ml-container-creator 0.10.0 → 0.12.1

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 +33 -22
  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 +851 -7
  11. package/infra/ci-harness/state-machines/path-prover.asl.json +496 -0
  12. package/package.json +53 -67
  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 +166 -153
  23. package/servers/instance-sizer/lib/instance-ranker.js +120 -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/instances.json +27 -0
  29. package/servers/lib/catalogs/model-servers.json +201 -3
  30. package/servers/lib/custom-validators.js +13 -13
  31. package/servers/lib/dynamic-resolver.js +4 -4
  32. package/servers/marketplace-picker/index.js +342 -0
  33. package/servers/marketplace-picker/manifest.json +14 -0
  34. package/servers/marketplace-picker/package.json +18 -0
  35. package/servers/model-picker/index.js +382 -382
  36. package/servers/region-picker/index.js +56 -56
  37. package/servers/workload-picker/LICENSE +202 -0
  38. package/servers/workload-picker/catalogs/workload-profiles.json +67 -0
  39. package/servers/workload-picker/index.js +171 -0
  40. package/servers/workload-picker/manifest.json +16 -0
  41. package/servers/workload-picker/package.json +16 -0
  42. package/src/app.js +12 -3
  43. package/src/lib/bootstrap-command-handler.js +609 -15
  44. package/src/lib/bootstrap-config.js +36 -0
  45. package/src/lib/bootstrap-profile-manager.js +48 -41
  46. package/src/lib/ci-register-helpers.js +74 -0
  47. package/src/lib/config-loader.js +3 -0
  48. package/src/lib/config-manager.js +7 -0
  49. package/src/lib/config-validator.js +1 -1
  50. package/src/lib/cuda-resolver.js +17 -8
  51. package/src/lib/generated/cli-options.js +319 -314
  52. package/src/lib/generated/parameter-matrix.js +672 -661
  53. package/src/lib/generated/validation-rules.js +76 -72
  54. package/src/lib/path-prover-brain.js +664 -0
  55. package/src/lib/prompts/infrastructure-prompts.js +2 -2
  56. package/src/lib/prompts/model-prompts.js +6 -0
  57. package/src/lib/prompts/project-prompts.js +12 -0
  58. package/src/lib/secrets-prompt-runner.js +4 -0
  59. package/src/lib/template-manager.js +1 -1
  60. package/src/lib/template-variable-resolver.js +87 -1
  61. package/src/lib/tune-catalog-validator.js +37 -4
  62. package/templates/Dockerfile +9 -0
  63. package/templates/code/adapter_sidecar.py +444 -0
  64. package/templates/code/serve +6 -0
  65. package/templates/code/serve.d/vllm.ejs +1 -1
  66. package/templates/do/.benchmark_writer.py +1476 -0
  67. package/templates/do/.tune_helper.py +982 -57
  68. package/templates/do/__pycache__/.benchmark_writer.cpython-312.pyc +0 -0
  69. package/templates/do/adapter +154 -0
  70. package/templates/do/benchmark +639 -85
  71. package/templates/do/build +5 -0
  72. package/templates/do/clean.d/async-inference.ejs +5 -0
  73. package/templates/do/clean.d/batch-transform.ejs +5 -0
  74. package/templates/do/clean.d/hyperpod-eks.ejs +5 -0
  75. package/templates/do/clean.d/managed-inference.ejs +5 -0
  76. package/templates/do/config +115 -45
  77. package/templates/do/deploy.d/async-inference.ejs +30 -3
  78. package/templates/do/deploy.d/batch-transform.ejs +29 -3
  79. package/templates/do/deploy.d/hyperpod-eks.ejs +4 -0
  80. package/templates/do/deploy.d/managed-inference.ejs +216 -14
  81. package/templates/do/lib/endpoint-config.sh +1 -1
  82. package/templates/do/lib/profile.sh +44 -0
  83. package/templates/do/optimize +106 -37
  84. package/templates/do/push +5 -0
  85. package/templates/do/register +94 -0
  86. package/templates/do/stage +567 -0
  87. package/templates/do/submit +7 -0
  88. package/templates/do/test +14 -0
  89. package/templates/do/tune +382 -59
  90. package/templates/do/validate +44 -4
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@amzn/ml-container-creator-workload-picker",
3
+ "version": "1.0.0",
4
+ "description": "MCP server that provides named benchmark workload profiles for do/benchmark.",
5
+ "modes": {
6
+ "static": true,
7
+ "smart": false,
8
+ "discover": false
9
+ },
10
+ "catalogs": {
11
+ "workload-profiles": "./catalogs/workload-profiles.json"
12
+ },
13
+ "tool": {
14
+ "name": "get_workload_profile"
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@amzn/ml-container-creator-workload-picker",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "description": "MCP server that provides named benchmark workload profiles for ML Container Creator. Defines token distributions, concurrency levels, and streaming modes for standardized benchmarking.",
6
+ "type": "module",
7
+ "main": "index.js",
8
+ "license": "Apache-2.0",
9
+ "scripts": {
10
+ "test": "node test.js"
11
+ },
12
+ "dependencies": {
13
+ "@modelcontextprotocol/sdk": "^1.12.0",
14
+ "zod": "^3.22.0"
15
+ }
16
+ }
package/src/app.js CHANGED
@@ -16,7 +16,7 @@ import CommentGenerator from './lib/comment-generator.js';
16
16
  import ConfigurationManager from './lib/configuration-manager.js';
17
17
  import RegistryLoader from './lib/registry-loader.js';
18
18
  import { resolvePrefixedEnvVars } from './lib/engine-prefix-resolver.js';
19
- import { _ensureTemplateVariables, _validateEnvironmentVariables, _mergeEnvVarsWithPrecedence } from './lib/template-variable-resolver.js';
19
+ import { _ensureTemplateVariables, _validateEnvironmentVariables } from './lib/template-variable-resolver.js';
20
20
  import ejs from 'ejs';
21
21
 
22
22
  const __filename = fileURLToPath(import.meta.url);
@@ -344,13 +344,15 @@ export async function writeProject(templateDir, destDir, answers, registryConfig
344
344
  // Exclude do/benchmark when benchmarking is not selected
345
345
  if (!answers.includeBenchmark) {
346
346
  ignorePatterns.push('**/do/benchmark');
347
+ ignorePatterns.push('**/do/.benchmark_writer.py');
347
348
  ignorePatterns.push('**/do/optimize');
348
349
  }
349
350
 
350
- // Exclude do/adapter and do/adapters/ when LoRA is not enabled
351
+ // Exclude do/adapter, do/adapters/, and adapter sidecar when LoRA is not enabled
351
352
  if (!answers.enableLora) {
352
353
  ignorePatterns.push('**/do/adapter');
353
354
  ignorePatterns.push('**/do/adapters/**');
355
+ ignorePatterns.push('**/code/adapter_sidecar.py');
354
356
  }
355
357
 
356
358
  // Exclude tune files when framework is NOT transformers OR deploymentTarget is batch-transform
@@ -375,6 +377,12 @@ export async function writeProject(templateDir, destDir, answers, registryConfig
375
377
  ignorePatterns.push('**/do/lib/feedback.sh');
376
378
  }
377
379
 
380
+ // Exclude do/stage when model is already S3-sourced (nothing to stage)
381
+ const modelName = answers.modelName || answers.customModelName || '';
382
+ if (answers.modelSource === 's3' || modelName.startsWith('s3://')) {
383
+ ignorePatterns.push('**/do/stage');
384
+ }
385
+
378
386
  // Exclude do/test when hosted-model-endpoint is not selected
379
387
  const testTypes = answers.testTypes || [];
380
388
  if (!testTypes.includes('hosted-model-endpoint')) {
@@ -816,7 +824,8 @@ function _setExecutablePermissions(destDir, answers = {}) {
816
824
  'do/add-ic',
817
825
  'do/adapter',
818
826
  'do/tune',
819
- 'do/train'
827
+ 'do/train',
828
+ 'do/stage'
820
829
  ];
821
830
 
822
831
  const shellScripts = architecture === 'marketplace' ? marketplaceScripts : defaultScripts;