aws-cdk-neuronx-patterns 0.0.13 → 0.0.15

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.
package/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@aws-cdk/aws-sagemaker-alpha": "2.200.0-alpha.0",
11
- "aws-cdk-lib": "^2.200.0",
11
+ "aws-cdk-lib": "^2.200.1",
12
12
  "constructs": "^10.0.5"
13
13
  },
14
14
  "dependencyClosure": {
@@ -4012,7 +4012,7 @@
4012
4012
  },
4013
4013
  "name": "aws-cdk-neuronx-patterns",
4014
4014
  "readme": {
4015
- "markdown": "# Neuronx patterns Construct Library\n\n> [!WARNING]\n> This library is experimental module.\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- vLLM with NxD Inference on ALB & ECS on EC2\n- Neuronx Compiler\n\n## vLLM NxD Inference on ALB & ECS on EC2\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on ECS. You may need to increase your request limit for your AWS account.\n\nBy using the `VllmNxdInferenceCompiler` construct included in this construct library, models published on HuggingFace can be easily deployed to ECS with Application Load Balancer. To define using the `VllmNxdInferenceCompiler` construct:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compiler = new VllmNxdInferenceCompiler(this, \"Compiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n});\nconst compiledModel = compiler.compile();\nconst taskDefinition = new VllmNxdInferenceTaskDefinition(\n this,\n \"TaskDefinition\",\n {\n compiledModel,\n },\n);\nconst service = new ApplicationLoadBalancedVllmNxDInferenceService(\n this,\n \"Service\",\n {\n vpc,\n taskDefinition,\n },\n);\n```\n\nThis is VllmNxDInferenceApplicationLoadBalancedEc2Service architecture.\n![VllmNxDInferenceApplicationLoadBalancedEc2Service architecture](./docs/vllm-nxd-inference-architecture.png)\n\nThe construct will automatically:\n\n- Calculate optimal tensor parallelism based on model size\n- Configure memory footprint for the ECS tasks\n- Set up the Application Load Balancer\n- Deploy the compiled model to ECS tasks\n- Configure health checks and auto-scaling\n\nThe service exposes a REST API endpoint through the Application Load Balancer that can be used to perform inference with the deployed model.\n\n### Using HuggingFace Token with Secrets\n\nWhen working with private or gated models on HuggingFace, you need to provide an authentication token. For security best practices, you can store your HuggingFace token in AWS Secrets Manager or SSM secure string and pass it to both the compiler and inference environments:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as batch from \"aws-cdk-lib/aws-batch\";\nimport { Secret } from \"aws-cdk-lib/aws-secretsmanager\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\n\n// Reference an existing secret containing your HuggingFace token\nconst hfTokenSecret = Secret.fromSecretNameV2(\n this,\n \"HFTokenSecret\",\n \"my-huggingface-token\",\n);\nconst hfToken = batch.Secret.fromSecretsManager(hfTokenSecret, \"readonlyToken\");\n\n// Pass the secret to the compiler\nconst compiler = new VllmNxdInferenceCompiler(this, \"Compiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n vllmArgs: {\n hfToken, // Pass the HF token secret here\n },\n});\n\nconst compiledModel = compiler.compile();\nconst taskDefinition = new VllmNxdInferenceTaskDefinition(\n this,\n \"TaskDefinition\",\n {\n compiledModel,\n },\n);\n\nconst service = new ApplicationLoadBalancedVllmNxDInferenceService(\n this,\n \"Service\",\n {\n vpc,\n taskDefinition,\n },\n);\n```\n\nThe secret will be securely passed as an environment variable to the compilation batch job and the ECS tasks running the inference server.\n\n## Neuronx Compiler\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.\n\nThis construct compiles models supported by Neuronx and uploads them to the specified S3 bucket. To define\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\ndeclare const image: INeuronxContainerImage;\nconst compile = new NeuronxCompiler(this, \"NeuronxCompiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n artifactS3Prefix: \"my-compiled-artifacts\",\n image,\n});\nconst compiledModel = compiler.compile();\n\n// Get the compiled artifacts from this S3 URL\nnew CfnOutput(this, \"CompiledArtifact\", {\n value: compiledModel.s3Url,\n});\n```\n\nThis construct assumes the required instance type depending on the number of model parameters.\n\nThis is NeuronxCompiler architecture.\n![NeuronxCompiler architecture](./docs/neuronx-compile-architecture.png)\n\n### Spot Instance\n\n> [!WARNING]\n> If you use Spot Instances, check if the request limit for Spot has been increased.\n\nYou can also use Spot Instances.\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\ndeclare const image: INeuronxContainerImage;\nnew NeuronxCompiler(this, \"NeuronxCompiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n artifactS3Prefix: \"my-compiled-artifacts\",\n image,\n spot: true,\n});\n```\n"
4015
+ "markdown": "# Neuronx patterns Construct Library\n\n> [!WARNING]\n> This library is experimental module.\n\nThis library provides high-level architectural patterns using neuronx (e.g. Inferentia2 and Trainium1). It contains:\n\n- vLLM with NxD Inference on ALB & ECS on EC2\n- Neuronx Compiler\n\n## Install\n\n```bash\n# NPM\nnpm i aws-cdk-neuronx-patterns\n\n# yarn\nyarn add aws-cdk-neuronx-patterns\n\n# PNPM\npnpm i aws-cdk-neuronx-patterns\n```\n\n## vLLM NxD Inference on ALB & ECS on EC2\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on ECS. You may need to increase your request limit for your AWS account.\n\nBy using the `VllmNxdInferenceCompiler` construct included in this construct library, models published on HuggingFace can be easily deployed to ECS with Application Load Balancer. To define using the `VllmNxdInferenceCompiler` construct:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\nconst compiler = new VllmNxdInferenceCompiler(this, \"Compiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n});\nconst compiledModel = compiler.compile();\nconst taskDefinition = new VllmNxdInferenceTaskDefinition(\n this,\n \"TaskDefinition\",\n {\n compiledModel,\n },\n);\nconst service = new ApplicationLoadBalancedVllmNxDInferenceService(\n this,\n \"Service\",\n {\n vpc,\n taskDefinition,\n },\n);\n```\n\nThis is VllmNxDInferenceApplicationLoadBalancedEc2Service architecture.\n![VllmNxDInferenceApplicationLoadBalancedEc2Service architecture](./docs/vllm-nxd-inference-architecture.png)\n\nThe construct will automatically:\n\n- Calculate optimal tensor parallelism based on model size\n- Configure memory footprint for the ECS tasks\n- Set up the Application Load Balancer\n- Deploy the compiled model to ECS tasks\n- Configure health checks and auto-scaling\n\nThe service exposes a REST API endpoint through the Application Load Balancer that can be used to perform inference with the deployed model.\n\n### Using HuggingFace Token with Secrets\n\nWhen working with private or gated models on HuggingFace, you need to provide an authentication token. For security best practices, you can store your HuggingFace token in AWS Secrets Manager or SSM secure string and pass it to both the compiler and inference environments:\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as batch from \"aws-cdk-lib/aws-batch\";\nimport { Secret } from \"aws-cdk-lib/aws-secretsmanager\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\n\n// Reference an existing secret containing your HuggingFace token\nconst hfTokenSecret = Secret.fromSecretNameV2(\n this,\n \"HFTokenSecret\",\n \"my-huggingface-token\",\n);\nconst hfToken = batch.Secret.fromSecretsManager(hfTokenSecret, \"readonlyToken\");\n\n// Pass the secret to the compiler\nconst compiler = new VllmNxdInferenceCompiler(this, \"Compiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n vllmArgs: {\n hfToken, // Pass the HF token secret here\n },\n});\n\nconst compiledModel = compiler.compile();\nconst taskDefinition = new VllmNxdInferenceTaskDefinition(\n this,\n \"TaskDefinition\",\n {\n compiledModel,\n },\n);\n\nconst service = new ApplicationLoadBalancedVllmNxDInferenceService(\n this,\n \"Service\",\n {\n vpc,\n taskDefinition,\n },\n);\n```\n\nThe secret will be securely passed as an environment variable to the compilation batch job and the ECS tasks running the inference server.\n\n## Neuronx Compiler\n\n> [!WARNING]\n> This construct uses an Inferentia2 instance on EC2. You may need to increase your request limit for your AWS account.\n\nThis construct compiles models supported by Neuronx and uploads them to the specified S3 bucket. To define\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\ndeclare const image: INeuronxContainerImage;\nconst compile = new NeuronxCompiler(this, \"NeuronxCompiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n artifactS3Prefix: \"my-compiled-artifacts\",\n image,\n});\nconst compiledModel = compiler.compile();\n\n// Get the compiled artifacts from this S3 URL\nnew CfnOutput(this, \"CompiledArtifact\", {\n value: compiledModel.s3Url,\n});\n```\n\nThis construct assumes the required instance type depending on the number of model parameters.\n\nThis is NeuronxCompiler architecture.\n![NeuronxCompiler architecture](./docs/neuronx-compile-architecture.png)\n\n### Spot Instance\n\n> [!WARNING]\n> If you use Spot Instances, check if the request limit for Spot has been increased.\n\nYou can also use Spot Instances.\n\n```ts\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\n\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.Bucket;\ndeclare const image: INeuronxContainerImage;\nnew NeuronxCompiler(this, \"NeuronxCompiler\", {\n vpc,\n bucket,\n model: Model.fromHuggingFace(\"example/example-7b-chat\"),\n artifactS3Prefix: \"my-compiled-artifacts\",\n image,\n spot: true,\n});\n```\n"
4016
4016
  },
4017
4017
  "repository": {
4018
4018
  "type": "git",
@@ -4038,7 +4038,7 @@
4038
4038
  },
4039
4039
  "locationInModule": {
4040
4040
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4041
- "line": 109
4041
+ "line": 119
4042
4042
  },
4043
4043
  "parameters": [
4044
4044
  {
@@ -4064,7 +4064,7 @@
4064
4064
  "kind": "class",
4065
4065
  "locationInModule": {
4066
4066
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4067
- "line": 108
4067
+ "line": 118
4068
4068
  },
4069
4069
  "name": "ApplicationLoadBalancedNeuronxService",
4070
4070
  "symbolId": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service:ApplicationLoadBalancedNeuronxService"
@@ -4082,7 +4082,7 @@
4082
4082
  "kind": "interface",
4083
4083
  "locationInModule": {
4084
4084
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4085
- "line": 106
4085
+ "line": 116
4086
4086
  },
4087
4087
  "name": "ApplicationLoadBalancedNeuronxServiceProps",
4088
4088
  "symbolId": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service:ApplicationLoadBalancedNeuronxServiceProps"
@@ -4103,7 +4103,7 @@
4103
4103
  },
4104
4104
  "locationInModule": {
4105
4105
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4106
- "line": 182
4106
+ "line": 183
4107
4107
  },
4108
4108
  "parameters": [
4109
4109
  {
@@ -4129,7 +4129,7 @@
4129
4129
  "kind": "class",
4130
4130
  "locationInModule": {
4131
4131
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4132
- "line": 176
4132
+ "line": 177
4133
4133
  },
4134
4134
  "name": "ApplicationLoadBalancedVllmNxDInferenceService",
4135
4135
  "properties": [
@@ -4140,7 +4140,7 @@
4140
4140
  "immutable": true,
4141
4141
  "locationInModule": {
4142
4142
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4143
- "line": 178
4143
+ "line": 179
4144
4144
  },
4145
4145
  "name": "listener",
4146
4146
  "type": {
@@ -4154,7 +4154,7 @@
4154
4154
  "immutable": true,
4155
4155
  "locationInModule": {
4156
4156
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4157
- "line": 177
4157
+ "line": 178
4158
4158
  },
4159
4159
  "name": "loadBalancer",
4160
4160
  "type": {
@@ -4168,7 +4168,7 @@
4168
4168
  "immutable": true,
4169
4169
  "locationInModule": {
4170
4170
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4171
- "line": 180
4171
+ "line": 181
4172
4172
  },
4173
4173
  "name": "service",
4174
4174
  "type": {
@@ -4182,7 +4182,7 @@
4182
4182
  "immutable": true,
4183
4183
  "locationInModule": {
4184
4184
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4185
- "line": 179
4185
+ "line": 180
4186
4186
  },
4187
4187
  "name": "targetGroup",
4188
4188
  "type": {
@@ -4196,7 +4196,7 @@
4196
4196
  "immutable": true,
4197
4197
  "locationInModule": {
4198
4198
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4199
- "line": 181
4199
+ "line": 182
4200
4200
  },
4201
4201
  "name": "taskDefinition",
4202
4202
  "type": {
@@ -4220,7 +4220,7 @@
4220
4220
  "kind": "interface",
4221
4221
  "locationInModule": {
4222
4222
  "filename": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns.ts",
4223
- "line": 151
4223
+ "line": 152
4224
4224
  },
4225
4225
  "name": "ApplicationLoadBalancedVllmNxDInferenceServiceProps",
4226
4226
  "symbolId": "src/vllm-nxd-inference/vllm-nxd-inference-ecs-patterns:ApplicationLoadBalancedVllmNxDInferenceServiceProps"
@@ -4880,7 +4880,7 @@
4880
4880
  "kind": "interface",
4881
4881
  "locationInModule": {
4882
4882
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4883
- "line": 41
4883
+ "line": 42
4884
4884
  },
4885
4885
  "name": "INeuronxTaskDefinition",
4886
4886
  "properties": [
@@ -4892,7 +4892,7 @@
4892
4892
  "immutable": true,
4893
4893
  "locationInModule": {
4894
4894
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4895
- "line": 45
4895
+ "line": 46
4896
4896
  },
4897
4897
  "name": "compiledModel",
4898
4898
  "type": {
@@ -4907,7 +4907,7 @@
4907
4907
  "immutable": true,
4908
4908
  "locationInModule": {
4909
4909
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4910
- "line": 42
4910
+ "line": 43
4911
4911
  },
4912
4912
  "name": "neuronxInstanceType",
4913
4913
  "type": {
@@ -4922,7 +4922,7 @@
4922
4922
  "immutable": true,
4923
4923
  "locationInModule": {
4924
4924
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4925
- "line": 44
4925
+ "line": 45
4926
4926
  },
4927
4927
  "name": "tasksPerInstance",
4928
4928
  "type": {
@@ -4937,7 +4937,7 @@
4937
4937
  "immutable": true,
4938
4938
  "locationInModule": {
4939
4939
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
4940
- "line": 43
4940
+ "line": 44
4941
4941
  },
4942
4942
  "name": "tensorParallelSize",
4943
4943
  "type": {
@@ -6888,7 +6888,7 @@
6888
6888
  },
6889
6889
  "locationInModule": {
6890
6890
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6891
- "line": 56
6891
+ "line": 57
6892
6892
  },
6893
6893
  "parameters": [
6894
6894
  {
@@ -6917,7 +6917,7 @@
6917
6917
  "kind": "class",
6918
6918
  "locationInModule": {
6919
6919
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6920
- "line": 47
6920
+ "line": 48
6921
6921
  },
6922
6922
  "methods": [
6923
6923
  {
@@ -6926,7 +6926,7 @@
6926
6926
  },
6927
6927
  "locationInModule": {
6928
6928
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6929
- "line": 88
6929
+ "line": 92
6930
6930
  },
6931
6931
  "name": "addContainerWithDefault",
6932
6932
  "parameters": [
@@ -6959,7 +6959,7 @@
6959
6959
  "immutable": true,
6960
6960
  "locationInModule": {
6961
6961
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6962
- "line": 54
6962
+ "line": 55
6963
6963
  },
6964
6964
  "name": "compiledModel",
6965
6965
  "overrides": "aws-cdk-neuronx-patterns.INeuronxTaskDefinition",
@@ -6974,7 +6974,7 @@
6974
6974
  "immutable": true,
6975
6975
  "locationInModule": {
6976
6976
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6977
- "line": 55
6977
+ "line": 56
6978
6978
  },
6979
6979
  "name": "linuxParameters",
6980
6980
  "protected": true,
@@ -6989,7 +6989,7 @@
6989
6989
  "immutable": true,
6990
6990
  "locationInModule": {
6991
6991
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
6992
- "line": 51
6992
+ "line": 52
6993
6993
  },
6994
6994
  "name": "neuronxInstanceType",
6995
6995
  "overrides": "aws-cdk-neuronx-patterns.INeuronxTaskDefinition",
@@ -7004,7 +7004,7 @@
7004
7004
  "immutable": true,
7005
7005
  "locationInModule": {
7006
7006
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7007
- "line": 53
7007
+ "line": 54
7008
7008
  },
7009
7009
  "name": "tasksPerInstance",
7010
7010
  "overrides": "aws-cdk-neuronx-patterns.INeuronxTaskDefinition",
@@ -7019,7 +7019,7 @@
7019
7019
  "immutable": true,
7020
7020
  "locationInModule": {
7021
7021
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7022
- "line": 52
7022
+ "line": 53
7023
7023
  },
7024
7024
  "name": "tensorParallelSize",
7025
7025
  "overrides": "aws-cdk-neuronx-patterns.INeuronxTaskDefinition",
@@ -7043,7 +7043,7 @@
7043
7043
  "kind": "interface",
7044
7044
  "locationInModule": {
7045
7045
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7046
- "line": 33
7046
+ "line": 34
7047
7047
  },
7048
7048
  "name": "NeuronxTaskDefinitionProps",
7049
7049
  "properties": [
@@ -7056,7 +7056,7 @@
7056
7056
  "immutable": true,
7057
7057
  "locationInModule": {
7058
7058
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7059
- "line": 38
7059
+ "line": 39
7060
7060
  },
7061
7061
  "name": "compiledModel",
7062
7062
  "type": {
@@ -7079,7 +7079,7 @@
7079
7079
  "kind": "interface",
7080
7080
  "locationInModule": {
7081
7081
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7082
- "line": 20
7082
+ "line": 21
7083
7083
  },
7084
7084
  "name": "NeuronxTaskDefinitionPropsBase",
7085
7085
  "properties": [
@@ -7092,7 +7092,7 @@
7092
7092
  "immutable": true,
7093
7093
  "locationInModule": {
7094
7094
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7095
- "line": 25
7095
+ "line": 26
7096
7096
  },
7097
7097
  "name": "neuronxInstanceType",
7098
7098
  "optional": true,
@@ -7110,7 +7110,7 @@
7110
7110
  "immutable": true,
7111
7111
  "locationInModule": {
7112
7112
  "filename": "src/base/aws-ecs-patterns/application-load-balanced-neuronx-service.ts",
7113
- "line": 30
7113
+ "line": 31
7114
7114
  },
7115
7115
  "name": "tensorParallelSize",
7116
7116
  "optional": true,
@@ -11688,6 +11688,6 @@
11688
11688
  "symbolId": "src/base/server-engine/vllm-engine/vllm-engine-argments:VllmTask"
11689
11689
  }
11690
11690
  },
11691
- "version": "0.0.13",
11692
- "fingerprint": "/7f5G+pL4MHLCs3x/hx3KUQk3/KsD694rdJWzFlaEOg="
11691
+ "version": "0.0.15",
11692
+ "fingerprint": "Mh68xlHjKpHD8sWSndFAaoJNQL4p3CJOE8CSBiuNeVA="
11693
11693
  }
package/README.md CHANGED
@@ -8,6 +8,19 @@ This library provides high-level architectural patterns using neuronx (e.g. Infe
8
8
  - vLLM with NxD Inference on ALB & ECS on EC2
9
9
  - Neuronx Compiler
10
10
 
11
+ ## Install
12
+
13
+ ```bash
14
+ # NPM
15
+ npm i aws-cdk-neuronx-patterns
16
+
17
+ # yarn
18
+ yarn add aws-cdk-neuronx-patterns
19
+
20
+ # PNPM
21
+ pnpm i aws-cdk-neuronx-patterns
22
+ ```
23
+
11
24
  ## vLLM NxD Inference on ALB & ECS on EC2
12
25
 
13
26
  > [!WARNING]
@@ -41,5 +41,5 @@ class NeuronxBatchComputeEnvironment extends constructs_1.Construct {
41
41
  }
42
42
  exports.NeuronxBatchComputeEnvironment = NeuronxBatchComputeEnvironment;
43
43
  _a = JSII_RTTI_SYMBOL_1;
44
- NeuronxBatchComputeEnvironment[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatchComputeEnvironment", version: "0.0.13" };
44
+ NeuronxBatchComputeEnvironment[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatchComputeEnvironment", version: "0.0.15" };
45
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1iYXRjaC1jb21wdXRlLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jhc2UvYXdzLWJhdGNoL25ldXJvbngtYmF0Y2gtY29tcHV0ZS1lbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLCtDQUErQztBQUMvQyxpREFBcUQ7QUFFckQsMkNBQXVDO0FBQ3ZDLHdDQUF5RDtBQVF6RDs7R0FFRztBQUNILE1BQWEsOEJBQ1gsU0FBUSxzQkFBUztJQVdqQixZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUEwQztRQUUxQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUk7WUFDN0I7Z0JBQ0UsS0FBSyxFQUFFLElBQUkscUNBQTJCLENBQ3BDLElBQUksRUFDSiw2QkFBNkIsQ0FDOUI7Z0JBQ0QsU0FBUyxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVO2FBQ2hEO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQ3ZELElBQUksRUFDSixVQUFVLEVBQ1Y7WUFDRSxHQUFHLEtBQUs7WUFDUixNQUFNO1NBQ1AsQ0FDRixDQUFDO1FBQ0YsSUFDRSxLQUFLLENBQUMsY0FBYztZQUNwQixLQUFLLENBQUMsY0FBYyxZQUFZLHdCQUFjLEVBQzlDLENBQUM7WUFFQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUNwQixDQUFDLG1CQUFtQixDQUNuQix5Q0FBeUMsRUFDekMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDekMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUNqRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztRQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFhLENBQUM7SUFDbEQsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQXFCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7QUExREgsd0VBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgUmVzb3VyY2VFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCB7IExhdW5jaFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElSb2xlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UgfSBmcm9tIFwiLi4vbmV1cm9ueFwiO1xuXG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhCYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXVyb254QmF0Y2hDb21wdXRlRW52aXJvbm1lbnRQcm9wc1xuICBleHRlbmRzIGJhdGNoLk1hbmFnZWRFYzJFY3NDb21wdXRlRW52aXJvbm1lbnRQcm9wcyB7fVxuXG4vKipcbiAqIE5ldXJvbnggYmF0Y2ggY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgTmV1cm9ueEJhdGNoQ29tcHV0ZUVudmlyb25tZW50XG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgYmF0Y2guSUNvbXB1dGVFbnZpcm9ubWVudFxue1xuICByZWFkb25seSBjb21wdXRlRW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudEFybjogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlUm9sZT86IElSb2xlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSBzdGFjazogU3RhY2s7XG4gIHJlYWRvbmx5IGVudjogUmVzb3VyY2VFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgaW5zdGFuY2VSb2xlOiBJUm9sZTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogYmF0Y2guTWFuYWdlZEVjMkVjc0NvbXB1dGVFbnZpcm9ubWVudDtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXVyb254QmF0Y2hDb21wdXRlRW52aXJvbm1lbnRQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGltYWdlcyA9IHByb3BzLmltYWdlcyA/PyBbXG4gICAgICB7XG4gICAgICAgIGltYWdlOiBuZXcgTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2VcIixcbiAgICAgICAgKSxcbiAgICAgICAgaW1hZ2VUeXBlOiBiYXRjaC5FY3NNYWNoaW5lSW1hZ2VUeXBlLkVDU19BTDIwMjMsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBiYXRjaC5NYW5hZ2VkRWMyRWNzQ29tcHV0ZUVudmlyb25tZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIGltYWdlcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBwcm9wcy5sYXVuY2hUZW1wbGF0ZSAmJlxuICAgICAgcHJvcHMubGF1bmNoVGVtcGxhdGUgaW5zdGFuY2VvZiBMYXVuY2hUZW1wbGF0ZVxuICAgICkge1xuICAgICAgKFxuICAgICAgICB0aGlzLnJlc291cmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkNvbXB1dGVFbnZpcm9ubWVudFxuICAgICAgKS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgICBcIkNvbXB1dGVSZXNvdXJjZXMuTGF1bmNoVGVtcGxhdGUuVmVyc2lvblwiLFxuICAgICAgICBwcm9wcy5sYXVuY2hUZW1wbGF0ZS5sYXRlc3RWZXJzaW9uTnVtYmVyLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVFbnZpcm9ubWVudEFybiA9IHRoaXMucmVzb3VyY2UuY29tcHV0ZUVudmlyb25tZW50QXJuO1xuICAgIHRoaXMuY29tcHV0ZUVudmlyb25tZW50TmFtZSA9IHRoaXMucmVzb3VyY2UuY29tcHV0ZUVudmlyb25tZW50TmFtZTtcbiAgICB0aGlzLmVuYWJsZWQgPSB0aGlzLnJlc291cmNlLmVuYWJsZWQ7XG4gICAgdGhpcy5lbnYgPSB0aGlzLnJlc291cmNlLmVudjtcbiAgICB0aGlzLnNlcnZpY2VSb2xlID0gdGhpcy5yZXNvdXJjZS5zZXJ2aWNlUm9sZTtcbiAgICB0aGlzLnN0YWNrID0gdGhpcy5yZXNvdXJjZS5zdGFjaztcbiAgICB0aGlzLmluc3RhbmNlUm9sZSA9IHRoaXMucmVzb3VyY2UuaW5zdGFuY2VSb2xlITtcbiAgfVxuICBhcHBseVJlbW92YWxQb2xpY3kocG9saWN5OiBSZW1vdmFsUG9saWN5KTogdm9pZCB7XG4gICAgdGhpcy5yZXNvdXJjZS5hcHBseVJlbW92YWxQb2xpY3kocG9saWN5KTtcbiAgfVxufVxuIl19
@@ -55,5 +55,5 @@ class NeuronxBatchEcsJobDefinition extends constructs_1.Construct {
55
55
  }
56
56
  exports.NeuronxBatchEcsJobDefinition = NeuronxBatchEcsJobDefinition;
57
57
  _a = JSII_RTTI_SYMBOL_1;
58
- NeuronxBatchEcsJobDefinition[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatchEcsJobDefinition", version: "0.0.13" };
58
+ NeuronxBatchEcsJobDefinition[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatchEcsJobDefinition", version: "0.0.15" };
59
59
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1iYXRjaC1lY3Mtam9iLWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFzZS9hd3MtYmF0Y2gvbmV1cm9ueC1iYXRjaC1lY3Mtam9iLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSwrQ0FBK0M7QUFFL0MsMkNBQXVDO0FBWXZDOztHQUVHO0FBQ0gsTUFBYSw0QkFDWCxTQUFRLHNCQUFTO0lBYWpCLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQXdDO1FBRXhDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxlQUFlLEdBQ25CLEtBQUssQ0FBQyxlQUFlO1lBQ3JCLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxlQUFlLENBQUMsVUFBVSxDQUN4QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDWixNQUFNLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEtBQUs7U0FDekQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEIsUUFBUSxFQUFFLGNBQWMsS0FBSyxFQUFFO1lBQy9CLGFBQWEsRUFBRSxjQUFjLEtBQUssRUFBRTtZQUNwQyxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUk7Z0JBQzNCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUMzRCxHQUFHLEtBQUs7WUFDUixTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQzVDLElBQUksRUFDSixxQkFBcUIsRUFDckI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLGVBQWU7YUFDaEIsQ0FDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3JELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQy9CLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxNQUFxQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUE2QjtRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxRQUFvQixFQUFFLEtBQXNCO1FBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDOztBQW5FSCxvRUFvRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEdXJhdGlvbixcbiAgUmVtb3ZhbFBvbGljeSxcbiAgUmVzb3VyY2VFbnZpcm9ubWVudCxcbiAgU3RhY2ssXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgYmF0Y2ggZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYXRjaFwiO1xuaW1wb3J0IHsgSUdyYW50YWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSU5ldXJvbnhJbnN0YW5jZVR5cGUgfSBmcm9tIFwiLi4vbmV1cm9ueFwiO1xuXG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhCYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXVyb254QmF0Y2hFY3NKb2JEZWZpbml0aW9uUHJvcHNcbiAgZXh0ZW5kcyBiYXRjaC5FY3NFYzJDb250YWluZXJEZWZpbml0aW9uUHJvcHMsXG4gICAgYmF0Y2guSm9iRGVmaW5pdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgbmV1cm9ueEluc3RhbmNlVHlwZTogSU5ldXJvbnhJbnN0YW5jZVR5cGU7XG59XG5cbi8qKlxuICogTmV1cm9ueCBiYXRjaCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXVyb254QmF0Y2hFY3NKb2JEZWZpbml0aW9uXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgYmF0Y2guSUpvYkRlZmluaXRpb25cbntcbiAgcmVhZG9ubHkgam9iRGVmaW5pdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBqb2JEZWZpbml0aW9uTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgcmVhZG9ubHkgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgcmV0cnlTdHJhdGVnaWVzOiBiYXRjaC5SZXRyeVN0cmF0ZWd5W107XG4gIHJlYWRvbmx5IHNjaGVkdWxpbmdQcmlvcml0eT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICByZWFkb25seSBzdGFjazogU3RhY2s7XG4gIHJlYWRvbmx5IGVudjogUmVzb3VyY2VFbnZpcm9ubWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogYmF0Y2guRWNzSm9iRGVmaW5pdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXVyb254QmF0Y2hFY3NKb2JEZWZpbml0aW9uUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgbGludXhQYXJhbWV0ZXJzID1cbiAgICAgIHByb3BzLmxpbnV4UGFyYW1ldGVycyA/P1xuICAgICAgbmV3IGJhdGNoLkxpbnV4UGFyYW1ldGVycyh0aGlzLCBcIkxpbnV4UGFyYW1ldGVyc1wiKTtcbiAgICBsaW51eFBhcmFtZXRlcnMuYWRkRGV2aWNlcyhcbiAgICAgIC4uLkFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IHByb3BzLm5ldXJvbnhJbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICAgIH0pLm1hcCgoXywgaW5kZXgpID0+ICh7XG4gICAgICAgIGhvc3RQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lclBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICBiYXRjaC5EZXZpY2VQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgYmF0Y2guRGV2aWNlUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgYmF0Y2guRWNzSm9iRGVmaW5pdGlvbih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY29udGFpbmVyOiBuZXcgYmF0Y2guRWNzRWMyQ29udGFpbmVyRGVmaW5pdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDb250YWluZXJEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICBsaW51eFBhcmFtZXRlcnMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIH0pO1xuICAgIHRoaXMuam9iRGVmaW5pdGlvbkFybiA9IHRoaXMucmVzb3VyY2Uuam9iRGVmaW5pdGlvbkFybjtcbiAgICB0aGlzLmpvYkRlZmluaXRpb25OYW1lID0gdGhpcy5yZXNvdXJjZS5qb2JEZWZpbml0aW9uTmFtZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSB0aGlzLnJlc291cmNlLnBhcmFtZXRlcnM7XG4gICAgdGhpcy5yZXRyeUF0dGVtcHRzID0gdGhpcy5yZXNvdXJjZS5yZXRyeUF0dGVtcHRzO1xuICAgIHRoaXMucmV0cnlTdHJhdGVnaWVzID0gdGhpcy5yZXNvdXJjZS5yZXRyeVN0cmF0ZWdpZXM7XG4gICAgdGhpcy5zY2hlZHVsaW5nUHJpb3JpdHkgPSB0aGlzLnJlc291cmNlLnNjaGVkdWxpbmdQcmlvcml0eTtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aGlzLnJlc291cmNlLnRpbWVvdXQ7XG4gICAgdGhpcy5zdGFjayA9IHRoaXMucmVzb3VyY2Uuc3RhY2s7XG4gICAgdGhpcy5lbnYgPSB0aGlzLnJlc291cmNlLmVudjtcbiAgfVxuICBhcHBseVJlbW92YWxQb2xpY3kocG9saWN5OiBSZW1vdmFsUG9saWN5KTogdm9pZCB7XG4gICAgdGhpcy5yZXNvdXJjZS5hcHBseVJlbW92YWxQb2xpY3kocG9saWN5KTtcbiAgfVxuICBhZGRSZXRyeVN0cmF0ZWd5KHN0cmF0ZWd5OiBiYXRjaC5SZXRyeVN0cmF0ZWd5KTogdm9pZCB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRSZXRyeVN0cmF0ZWd5KHN0cmF0ZWd5KTtcbiAgfVxuICAvKipcbiAgICogR3JhbnRzIHRoZSBgYmF0Y2g6c3VibWl0Sm9iYCBwZXJtaXNzaW9uIHRvIHRoZSBpZGVudGl0eSBvbiBib3RoIHRoaXMgam9iIGRlZmluaXRpb24gYW5kIHRoZSBgcXVldWVgXG4gICAqL1xuICBncmFudFN1Ym1pdEpvYihpZGVudGl0eTogSUdyYW50YWJsZSwgcXVldWU6IGJhdGNoLklKb2JRdWV1ZSk6IHZvaWQge1xuICAgIHRoaXMucmVzb3VyY2UuZ3JhbnRTdWJtaXRKb2IoaWRlbnRpdHksIHF1ZXVlKTtcbiAgfVxufVxuIl19
@@ -58,5 +58,5 @@ class NeuronxBatch extends constructs_1.Construct {
58
58
  }
59
59
  exports.NeuronxBatch = NeuronxBatch;
60
60
  _a = JSII_RTTI_SYMBOL_1;
61
- NeuronxBatch[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatch", version: "0.0.13" };
61
+ NeuronxBatch[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxBatch", version: "0.0.15" };
62
62
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1iYXRjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYXNlL2F3cy1iYXRjaC9uZXVyb254LWJhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsK0NBQStDO0FBQy9DLDJDQUEyQztBQUMzQywyQ0FBdUM7QUFDdkMsd0NBQStFO0FBb0MvRTs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBR3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3BFLFlBQVksRUFBRTtnQkFDWjtvQkFDRSxVQUFVLEVBQUUsV0FBVztvQkFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDbEU7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ3ZELHlCQUF5QixFQUFFLEtBQUs7WUFDaEMsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEtBQUssRUFBRSxJQUFJLHFDQUEyQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7b0JBQzNELFNBQVMsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVTtpQkFDaEQ7YUFDRjtZQUNELGNBQWM7WUFDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUM5QixDQUFDLG1CQUFtQixDQUNuQix5Q0FBeUMsRUFDekMsY0FBYyxDQUFDLG1CQUFtQixDQUNuQyxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQ25CLEtBQUssQ0FBQyxlQUFlO1lBQ3JCLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxlQUFlLENBQUMsVUFBVSxDQUN4QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDWixNQUFNLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEtBQUs7U0FDekQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEIsUUFBUSxFQUFFLGNBQWMsS0FBSyxFQUFFO1lBQy9CLGFBQWEsRUFBRSxjQUFjLEtBQUssRUFBRTtZQUNwQyxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUk7Z0JBQzNCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUNyRSxTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQzVDLElBQUksRUFDSixxQkFBcUIsRUFDckI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLGVBQWU7YUFDaEIsQ0FDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBOURILG9DQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpemUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElOZXVyb254SW5zdGFuY2VUeXBlLCBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UgfSBmcm9tIFwiLi4vbmV1cm9ueFwiO1xuXG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhCYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXVyb254QmF0Y2hQcm9wc1xuICBleHRlbmRzIGJhdGNoLkVjc0VjMkNvbnRhaW5lckRlZmluaXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBWUEMgaW4gd2hpY2ggdGhpcyB3aWxsIGxhdW5jaCB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgb2Ygd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV1cm9ueEluc3RhbmNlVHlwZTogSU5ldXJvbnhJbnN0YW5jZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgcm9vdCB2b2x1bWUgb2Ygd29ya2VyIGluc3RhbmNlLlxuICAgKiBAZGVmYXVsdCAtIE4gYmlsaW9uIHBhcmFtZXRlcnMgKiA1R2lCIEVCU1xuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lU2l6ZTogU2l6ZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSBzcG90IGluc3RhbmNlcy5cbiAgICogU3BvdCBpbnN0YW5jZXMgYXJlIGxlc3MgZXhwZW5zaXZlIEVDMiBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgcmVjbGFpbWVkIGJ5IEVDMiBhdCBhbnkgdGltZTtcbiAgICogeW91ciBqb2Igd2lsbCBiZSBnaXZlbiB0d28gbWludXRlcyBvZiBub3RpY2UgYmVmb3JlIHJlY2xhbWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgVlBDIFN1Ym5ldHMgdGhpcyBDb21wdXRlIEVudmlyb25tZW50IHdpbGwgbGF1bmNoIGluc3RhbmNlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBuZXcgc3VibmV0cyB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xufVxuXG4vKipcbiAqIE5ldXJvbnggYmF0Y2ggY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgTmV1cm9ueEJhdGNoIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50OiBiYXRjaC5NYW5hZ2VkRWMyRWNzQ29tcHV0ZUVudmlyb25tZW50O1xuICByZWFkb25seSBqb2JEZWZpbml0aW9uOiBiYXRjaC5FY3NKb2JEZWZpbml0aW9uO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV1cm9ueEJhdGNoUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IGVjMi5MYXVuY2hUZW1wbGF0ZSh0aGlzLCBcIkxhdW5jaFRlbXBsYXRlXCIsIHtcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMocHJvcHMudm9sdW1lU2l6ZS50b0dpYmlieXRlcygpKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgdGhpcy5jb21wdXRlRW52aXJvbm1lbnQgPSBuZXcgYmF0Y2guTWFuYWdlZEVjMkVjc0NvbXB1dGVFbnZpcm9ubWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIkNvbXB1dGVFbnZpcm9ubWVudFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgICAgaW5zdGFuY2VUeXBlczogW3Byb3BzLm5ldXJvbnhJbnN0YW5jZVR5cGUuaW5zdGFuY2VUeXBlXSxcbiAgICAgICAgdXNlT3B0aW1hbEluc3RhbmNlQ2xhc3NlczogZmFsc2UsXG4gICAgICAgIGltYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlOiBuZXcgTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlKHRoaXMsIFwiTWFjaGluSW1hZ2VcIiksXG4gICAgICAgICAgICBpbWFnZVR5cGU6IGJhdGNoLkVjc01hY2hpbmVJbWFnZVR5cGUuRUNTX0FMMjAyMyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgc3BvdDogcHJvcHMuc3BvdCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICAoXG4gICAgICB0aGlzLmNvbXB1dGVFbnZpcm9ubWVudC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBiYXRjaC5DZm5Db21wdXRlRW52aXJvbm1lbnRcbiAgICApLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIkNvbXB1dGVSZXNvdXJjZXMuTGF1bmNoVGVtcGxhdGUuVmVyc2lvblwiLFxuICAgICAgbGF1bmNoVGVtcGxhdGUubGF0ZXN0VmVyc2lvbk51bWJlcixcbiAgICApO1xuICAgIGNvbnN0IGxpbnV4UGFyYW1ldGVycyA9XG4gICAgICBwcm9wcy5saW51eFBhcmFtZXRlcnMgPz9cbiAgICAgIG5ldyBiYXRjaC5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIik7XG4gICAgbGludXhQYXJhbWV0ZXJzLmFkZERldmljZXMoXG4gICAgICAuLi5BcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiBwcm9wcy5uZXVyb254SW5zdGFuY2VUeXBlLmFjY2VsZXJhdG9yQ2hpcHMuY2hpcHMsXG4gICAgICB9KS5tYXAoKF8sIGluZGV4KSA9PiAoe1xuICAgICAgICBob3N0UGF0aDogYC9kZXYvbmV1cm9uJHtpbmRleH1gLFxuICAgICAgICBjb250YWluZXJQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICAgYmF0Y2guRGV2aWNlUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIGJhdGNoLkRldmljZVBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIF0sXG4gICAgICB9KSksXG4gICAgKTtcbiAgICB0aGlzLmpvYkRlZmluaXRpb24gPSBuZXcgYmF0Y2guRWNzSm9iRGVmaW5pdGlvbih0aGlzLCBcIkpvYkRlZmluaXRpb25cIiwge1xuICAgICAgY29udGFpbmVyOiBuZXcgYmF0Y2guRWNzRWMyQ29udGFpbmVyRGVmaW5pdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDb250YWluZXJEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICBsaW51eFBhcmFtZXRlcnMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -29,6 +29,9 @@ class NeuronxTaskDefinition extends ecs.Ec2TaskDefinition {
29
29
  containerPath: `/dev/neuron${index}`,
30
30
  permissions: [ecs.DevicePermission.READ, ecs.DevicePermission.WRITE],
31
31
  })));
32
+ if (this.executionRole) {
33
+ props.compiledModel.bucket.grantRead(this.executionRole);
34
+ }
32
35
  props.compiledModel.bucket.grantRead(this.taskRole);
33
36
  this.compiledModel = props.compiledModel;
34
37
  this.neuronxInstanceType = neuronxInstanceType;
@@ -36,7 +39,7 @@ class NeuronxTaskDefinition extends ecs.Ec2TaskDefinition {
36
39
  this.tasksPerInstance = tasksPerInstance;
37
40
  }
38
41
  addContainerWithDefault(id, props) {
39
- return super.addContainer(id, {
42
+ const container = super.addContainer(id, {
40
43
  logging: ecs.LogDriver.awsLogs({
41
44
  streamPrefix: id,
42
45
  }),
@@ -45,11 +48,17 @@ class NeuronxTaskDefinition extends ecs.Ec2TaskDefinition {
45
48
  this.tasksPerInstance),
46
49
  ...props,
47
50
  });
51
+ container.addMountPoints({
52
+ sourceVolume: "model",
53
+ containerPath: "/opt/ml/model",
54
+ readOnly: false,
55
+ });
56
+ return container;
48
57
  }
49
58
  }
50
59
  exports.NeuronxTaskDefinition = NeuronxTaskDefinition;
51
60
  _a = JSII_RTTI_SYMBOL_1;
52
- NeuronxTaskDefinition[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxTaskDefinition", version: "0.0.13" };
61
+ NeuronxTaskDefinition[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxTaskDefinition", version: "0.0.15" };
53
62
  class ApplicationLoadBalancedNeuronxService extends aws_ecs_patterns_1.ApplicationLoadBalancedEc2Service {
54
63
  constructor(scope, id, props) {
55
64
  const neuronxTaskDefinition = props.taskDefinition;
@@ -58,16 +67,47 @@ class ApplicationLoadBalancedNeuronxService extends aws_ecs_patterns_1.Applicati
58
67
  throw new Error("taskDefinition must extend NeuronxTaskDefinition");
59
68
  }
60
69
  super(scope, id, {
61
- healthCheckGracePeriod: props.healthCheckGracePeriod ?? aws_cdk_lib_1.Duration.minutes(5),
70
+ healthCheckGracePeriod: props.healthCheckGracePeriod ?? aws_cdk_lib_1.Duration.minutes(15),
62
71
  ...props,
63
72
  });
64
73
  const cluster = this.getDefaultCluster(this, props.vpc);
65
- const volumeSize = Math.ceil(neuronxTaskDefinition.tasksPerInstance *
66
- neuronxTaskDefinition.compiledModel.weightSize.toGibibytes() +
67
- neuronx_1.PytorchTrainingNeuronxImage.size.toGibibytes() +
74
+ // install and mount mountpoint for s3
75
+ const userData = aws_ec2_1.UserData.forLinux();
76
+ userData.addCommands(`
77
+ #!/bin/bash -e
78
+
79
+ # Install Mountpoint
80
+ MP_RPM=$(mktemp --suffix=.rpm)
81
+ curl https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm > $MP_RPM
82
+
83
+ # cloud-init installs conflict with SSM agent: https://github.com/amazonlinux/amazon-linux-2023/issues/397
84
+ attempt=0
85
+ max_attempts=5
86
+ until dnf install -y $MP_RPM; do
87
+ attempt=$((attempt + 1))
88
+ if [ $attempt -ge $max_attempts ]; then
89
+ echo "Failed to install mount-s3 after $max_attempts attempts. Exiting."
90
+ exit 1
91
+ fi
92
+ echo "dnf install mount-s3 failed (attempt $attempt/$max_attempts), retrying in 3 seconds..."
93
+ sleep 3
94
+ done
95
+
96
+ rm $MP_RPM
97
+
98
+ # Setup the fstab file and create the mount
99
+ mkdir --parents /mnt/${neuronxTaskDefinition.compiledModel.bucket.bucketName}
100
+ mount-s3 ${neuronxTaskDefinition.compiledModel.bucket.bucketName} /mnt/${neuronxTaskDefinition.compiledModel.bucket.bucketName} --allow-other --file-mode=644 --dir-mode=755`);
101
+ neuronxTaskDefinition.addVolume({
102
+ name: "model",
103
+ host: {
104
+ sourcePath: `/mnt/${neuronxTaskDefinition.compiledModel.bucket.bucketName}`,
105
+ },
106
+ });
107
+ const volumeSize = Math.ceil(neuronx_1.PytorchTrainingNeuronxImage.size.toGibibytes() +
68
108
  neuronx_1.NeuronOptimizedMachineImage.size.toGibibytes());
69
- cluster.addCapacity("InstanceCapacity", {
70
- ...props,
109
+ const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "AutoScalingGroup", {
110
+ vpc: cluster.vpc,
71
111
  instanceType: neuronxTaskDefinition.neuronxInstanceType.instanceType,
72
112
  machineImage: new neuronx_1.NeuronOptimizedMachineImage(this, "NeuronOptimizedMachineImage"),
73
113
  blockDevices: [
@@ -79,12 +119,18 @@ class ApplicationLoadBalancedNeuronxService extends aws_ecs_patterns_1.Applicati
79
119
  }),
80
120
  },
81
121
  ],
82
- minCapacity: Math.ceil((props.desiredCount ?? 1) / neuronxTaskDefinition.tasksPerInstance),
122
+ userData,
123
+ desiredCapacity: Math.ceil((props.desiredCount ?? 1) / neuronxTaskDefinition.tasksPerInstance),
124
+ });
125
+ autoScalingGroup.connections.allowFrom(this.loadBalancer, aws_ec2_1.Port.tcpRange(32768, 60999));
126
+ neuronxTaskDefinition.compiledModel.bucket.grantRead(autoScalingGroup);
127
+ const provider = new ecs.AsgCapacityProvider(this, "AsgCapacityProvider", {
128
+ autoScalingGroup,
83
129
  });
84
- cluster.connections.allowFrom(this.loadBalancer, aws_ec2_1.Port.tcpRange(32768, 60999));
130
+ cluster.addAsgCapacityProvider(provider);
85
131
  }
86
132
  }
87
133
  exports.ApplicationLoadBalancedNeuronxService = ApplicationLoadBalancedNeuronxService;
88
134
  _b = JSII_RTTI_SYMBOL_1;
89
- ApplicationLoadBalancedNeuronxService[_b] = { fqn: "aws-cdk-neuronx-patterns.ApplicationLoadBalancedNeuronxService", version: "0.0.13" };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlZC1uZXVyb254LXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFzZS9hd3MtZWNzLXBhdHRlcm5zL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZWQtbmV1cm9ueC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlFQUdxQztBQUNyQyxpREFBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLG1FQUdzQztBQUV0Qyx3Q0FJb0I7QUE4QnBCLE1BQWEscUJBQ1gsU0FBUSxHQUFHLENBQUMsaUJBQWlCO0lBUTdCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsTUFBTSxtQkFBbUIsR0FDdkIsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7UUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sZ0JBQWdCLEdBQ3BCLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLG9CQUFvQixFQUFFO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FDOUIscUJBQXFCLGdCQUFnQixFQUFFLENBQ3hDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FDN0IsR0FBRyxLQUFLLENBQUMsSUFBSSxD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QVUsRUFBRTt3QkFDeEMsVUFBVSxFQUFFLHFDQUFtQixDQUFDLEdBQUc7d0JBQ25DLFNBQVMsRUFBRSxJQUFJO3FCQUNoQixDQUFDO2lCQUNIO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FDcEIsQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLGdCQUFnQixDQUNuRTtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUMzQixJQUFJLENBQUMsWUFBWSxFQUNqQixjQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7O0FBbERILHNGQW1EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgRWJzRGV2aWNlVm9sdW1lVHlwZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgUG9ydCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VkRWMyU2VydmljZSxcbiAgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRFYzJTZXJ2aWNlUHJvcHMsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzLXBhdHRlcm5zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgSU5ldXJvbnhJbnN0YW5jZVR5cGUsXG4gIE5ldXJvbk9wdGltaXplZE1hY2hpbmVJbWFnZSxcbiAgUHl0b3JjaFRyYWluaW5nTmV1cm9ueEltYWdlLFxufSBmcm9tIFwiLi4vbmV1cm9ueFwiO1xuaW1wb3J0IHsgTmV1cm9ueENvbXBpbGVkTW9kZWwgfSBmcm9tIFwiLi4vbmV1cm9ueC1jb21waWxlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ldXJvbnhUYXNrRGVmaW5pdGlvblByb3BzQmFzZVxuICBleHRlbmRzIGVjcy5FYzJUYXNrRGVmaW5pdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB0eXBlIG9mIGNvbXBpbGUgd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV1cm9ueEluc3RhbmNlVHlwZT86IElOZXVyb254SW5zdGFuY2VUeXBlO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0ZW5zb3IgcGFyYWxsZWwgc2l6ZS5cbiAgICogQGRlZmF1bHQgLSAxXG4gICAqL1xuICByZWFkb25seSB0ZW5zb3JQYXJhbGxlbFNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV1cm9ueFRhc2tEZWZpbml0aW9uUHJvcHNcbiAgZXh0ZW5kcyBOZXVyb254VGFza0RlZmluaXRpb25Qcm9wc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIGJlIGNvbXBpbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZWRNb2RlbDogTmV1cm9ueENvbXBpbGVkTW9kZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5ldXJvbnhUYXNrRGVmaW5pdGlvbiBleHRlbmRzIGVjcy5JRWMyVGFza0RlZmluaXRpb24ge1xuICByZWFkb25seSBuZXVyb254SW5zdGFuY2VUeXBlOiBJTmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgcmVhZG9ubHkgdGVuc29yUGFyYWxsZWxTaXplOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRhc2tzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tcGlsZWRNb2RlbDogTmV1cm9ueENvbXBpbGVkTW9kZWw7XG59XG5leHBvcnQgY2xhc3MgTmV1cm9ueFRhc2tEZWZpbml0aW9uXG4gIGV4dGVuZHMgZWNzLkVjMlRhc2tEZWZpbml0aW9uXG4gIGltcGxlbWVudHMgSU5ldXJvbnhUYXNrRGVmaW5pdGlvblxue1xuICByZWFkb25seSBuZXVyb254SW5zdGFuY2VUeXBlOiBJTmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgcmVhZG9ubHkgdGVuc29yUGFyYWxsZWxTaXplOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRhc2tzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tcGlsZWRNb2RlbDogTmV1cm9ueENvbXBpbGVkTW9kZWw7XG4gIHByb3RlY3RlZCByZWFkb25seSBsaW51eFBhcmFtZXRlcnM6IGVjcy5MaW51eFBhcmFtZXRlcnM7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXVyb254VGFza0RlZmluaXRpb25Qcm9wcykge1xuICAgIGNvbnN0IG5ldXJvbnhJbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMubmV1cm9ueEluc3RhbmNlVHlwZSA/PyBwcm9wcy5jb21waWxlZE1vZGVsLmNvbXBpbGVUaW1lSW5zdGFuY2VUeXBlO1xuICAgIGNvbnN0IHRlbnNvclBhcmFsbGVsU2l6ZSA9IHByb3BzLnRlbnNvclBhcmFsbGVsU2l6ZSA/PyAxO1xuICAgIGNvbnN0IHRhc2tzUGVySW5zdGFuY2UgPVxuICAgICAgbmV1cm9ueEluc3RhbmNlVHlwZS5hY2NlbGVyYXRvckNoaXBzLm5ldXJvbnhDb3JlcyAvIHRlbnNvclBhcmFsbGVsU2l6ZTtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcGxhY2VtZW50Q29uc3RyYWludHM6IFtcbiAgICAgICAgLi4uKHByb3BzLnBsYWNlbWVudENvbnN0cmFpbnRzID8/IFtdKSxcbiAgICAgICAgZWNzLlBsYWNlbWVudENvbnN0cmFpbnQubWVtYmVyT2YoXG4gICAgICAgICAgYHJ1bm5pbmdUYXNrc0NvdW50PCR7dGFza3NQZXJJbnN0YW5jZX1gLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLmxpbnV4UGFyYW1ldGVycyA9IG5ldyBlY3MuTGludXhQYXJhbWV0ZXJzKHRoaXMsIFwiTGludXhQYXJhbWV0ZXJzXCIpO1xuICAgIHRoaXMubGludXhQYXJhbWV0ZXJzLmFkZERldmljZXMoXG4gICAgICAuLi5BcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiBuZXVyb254SW5zdGFuY2VUeXBlPy5hY2NlbGVyYXRvckNoaXBzLmNoaXBzID8/IDEsXG4gICAgICB9KS5tYXA8ZWNzLkRldmljZT4oKF8sIGluZGV4KSA9PiAoe1xuICAgICAgICBob3N0UGF0aDogYC9kZXYvbmV1cm9uJHtpbmRleH1gLFxuICAgICAgICBjb250YWluZXJQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIHBlcm1pc3Npb25zOiBbZWNzLkRldmljZVBlcm1pc3Npb24uUkVBRCwgZWNzLkRldmljZVBlcm1pc3Npb24uV1JJVEVdLFxuICAgICAgfSkpLFxuICAgICk7XG4gICAgcHJvcHMuY29tcGlsZWRNb2RlbC5idWNrZXQuZ3JhbnRSZWFkKHRoaXMudGFza1JvbGUpO1xuICAgIHRoaXMuY29tcGlsZWRNb2RlbCA9IHByb3BzLmNvbXBpbGVkTW9kZWw7XG4gICAgdGhpcy5uZXVyb254SW5zdGFuY2VUeXBlID0gbmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgICB0aGlzLnRlbnNvclBhcmFsbGVsU2l6ZSA9IHRlbnNvclBhcmFsbGVsU2l6ZTtcbiAgICB0aGlzLnRhc2tzUGVySW5zdGFuY2UgPSB0YXNrc1Blckluc3RhbmNlO1xuICB9XG5cbiAgYWRkQ29udGFpbmVyV2l0aERlZmF1bHQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogZWNzLkNvbnRhaW5lckRlZmluaXRpb25PcHRpb25zLFxuICApOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIHN1cGVyLmFkZENvbnRhaW5lcihpZCwge1xuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgc3RyZWFtUHJlZml4OiBpZCxcbiAgICAgIH0pLFxuICAgICAgbGludXhQYXJhbWV0ZXJzOiB0aGlzLmxpbnV4UGFyYW1ldGVycyxcbiAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiBNYXRoLmNlaWwoXG4gICAgICAgICh0aGlzLm5ldXJvbnhJbnN0YW5jZVR5cGUubWVtb3J5LnRvTWViaWJ5dGVzKCkgKiAwLjgpIC9cbiAgICAgICAgICB0aGlzLnRhc2tzUGVySW5zdGFuY2UsXG4gICAgICApLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZE5ldXJvbnhTZXJ2aWNlUHJvcHNcbiAgZXh0ZW5kcyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZEVjMlNlcnZpY2VQcm9wcyB7fVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VkTmV1cm9ueFNlcnZpY2UgZXh0ZW5kcyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZEVjMlNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VkTmV1cm9ueFNlcnZpY2VQcm9wcyxcbiAgKSB7XG4gICAgY29uc3QgbmV1cm9ueFRhc2tEZWZpbml0aW9uID0gcHJvcHMudGFza0RlZmluaXRpb247XG4gICAgaWYgKFxuICAgICAgIW5ldXJvbnhUYXNrRGVmaW5pdGlvbiB8fFxuICAgICAgIShuZXVyb254VGFza0RlZmluaXRpb24gaW5zdGFuY2VvZiBOZXVyb254VGFza0RlZmluaXRpb24pXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0YXNrRGVmaW5pdGlvbiBtdXN0IGV4dGVuZCBOZXVyb254VGFza0RlZmluaXRpb25cIik7XG4gICAgfVxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDpcbiAgICAgICAgcHJvcHMuaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCA/PyBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gICAgY29uc3QgY2x1c3RlciA9IHRoaXMuZ2V0RGVmYXVsdENsdXN0ZXIodGhpcywgcHJvcHMudnBjKTtcblxuICAgIGNvbnN0IHZvbHVtZVNpemUgPSBNYXRoLmNlaWwoXG4gICAgICBuZXVyb254VGFza0RlZmluaXRpb24udGFza3NQZXJJbnN0YW5jZSAqXG4gICAgICAgIG5ldXJvbnhUYXNrRGVmaW5pdGlvbi5jb21waWxlZE1vZGVsLndlaWdodFNpemUudG9HaWJpYnl0ZXMoKSArXG4gICAgICAgIFB5dG9yY2hUcmFpbmluZ05ldXJvbnhJbWFnZS5zaXplLnRvR2liaWJ5dGVzKCkgK1xuICAgICAgICBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2Uuc2l6ZS50b0dpYmlieXRlcygpLFxuICAgICk7XG4gICAgY2x1c3Rlci5hZGRDYXBhY2l0eShcIkluc3RhbmNlQ2FwYWNpdHlcIiwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBpbnN0YW5jZVR5cGU6IG5ldXJvbnhUYXNrRGVmaW5pdGlvbi5uZXVyb254SW5zdGFuY2VUeXBlLmluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogbmV3IE5ldXJvbk9wdGltaXplZE1hY2hpbmVJbWFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2VcIixcbiAgICAgICksXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgdm9sdW1lOiBCbG9ja0RldmljZVZvbHVtZS5lYnModm9sdW1lU2l6ZSwge1xuICAgICAgICAgICAgdm9sdW1lVHlwZTogRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbWluQ2FwYWNpdHk6IE1hdGguY2VpbChcbiAgICAgICAgKHByb3BzLmRlc2lyZWRDb3VudCA/PyAxKSAvIG5ldXJvbnhUYXNrRGVmaW5pdGlvbi50YXNrc1Blckluc3RhbmNlLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICBjbHVzdGVyLmNvbm5lY3Rpb25zLmFsbG93RnJvbShcbiAgICAgIHRoaXMubG9hZEJhbGFuY2VyLFxuICAgICAgUG9ydC50Y3BSYW5nZSgzMjc2OCwgNjA5OTkpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
135
+ ApplicationLoadBalancedNeuronxService[_b] = { fqn: "aws-cdk-neuronx-patterns.ApplicationLoadBalancedNeuronxService", version: "0.0.15" };
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlZC1uZXVyb254LXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFzZS9hd3MtZWNzLXBhdHRlcm5zL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZWQtbmV1cm9ueC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlFQUlxQztBQUNyQyxpREFBcUQ7QUFDckQsMkNBQTJDO0FBQzNDLG1FQUdzQztBQUV0Qyx3Q0FJb0I7QUE4QnBCLE1BQWEscUJBQ1gsU0FBUSxHQUFHLENBQUMsaUJBQWlCO0lBUTdCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsTUFBTSxtQkFBbUIsR0FDdkIsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7UUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sZ0JBQWdCLEdBQ3BCLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLG9CQUFvQixFQUFFO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FDOUIscUJBQXFCLGdCQUFnQixFQUFFLENBQ3hDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FDN0IsR0FBRyxLQUFLLENBQUMsSUFBSSxD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QyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM1QixDQUFDO1FBQ0YscUJBQXFCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDeEUsZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQTFGSCxzRkEyRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQXV0b1NjYWxpbmdHcm91cCxcbiAgQmxvY2tEZXZpY2VWb2x1bWUsXG4gIEVic0RldmljZVZvbHVtZVR5cGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IFBvcnQsIFVzZXJEYXRhIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRFYzJTZXJ2aWNlLFxuICBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZEVjMlNlcnZpY2VQcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3MtcGF0dGVybnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJTmV1cm9ueEluc3RhbmNlVHlwZSxcbiAgTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlLFxuICBQeXRvcmNoVHJhaW5pbmdOZXVyb254SW1hZ2UsXG59IGZyb20gXCIuLi9uZXVyb254XCI7XG5pbXBvcnQgeyBOZXVyb254Q29tcGlsZWRNb2RlbCB9IGZyb20gXCIuLi9uZXVyb254LWNvbXBpbGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV1cm9ueFRhc2tEZWZpbml0aW9uUHJvcHNCYXNlXG4gIGV4dGVuZHMgZWNzLkVjMlRhc2tEZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgb2YgY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254SW5zdGFuY2VUeXBlPzogSU5ldXJvbnhJbnN0YW5jZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRlbnNvciBwYXJhbGxlbCBzaXplLlxuICAgKiBAZGVmYXVsdCAtIDFcbiAgICovXG4gIHJlYWRvbmx5IHRlbnNvclBhcmFsbGVsU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXVyb254VGFza0RlZmluaXRpb25Qcm9wc1xuICBleHRlbmRzIE5ldXJvbnhUYXNrRGVmaW5pdGlvblByb3BzQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gYmUgY29tcGlsZWQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlZE1vZGVsOiBOZXVyb254Q29tcGlsZWRNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTmV1cm9ueFRhc2tEZWZpbml0aW9uIGV4dGVuZHMgZWNzLklFYzJUYXNrRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IG5ldXJvbnhJbnN0YW5jZVR5cGU6IElOZXVyb254SW5zdGFuY2VUeXBlO1xuICByZWFkb25seSB0ZW5zb3JQYXJhbGxlbFNpemU6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGFza3NQZXJJbnN0YW5jZTogbnVtYmVyO1xuICByZWFkb25seSBjb21waWxlZE1vZGVsOiBOZXVyb254Q29tcGlsZWRNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBOZXVyb254VGFza0RlZmluaXRpb25cbiAgZXh0ZW5kcyBlY3MuRWMyVGFza0RlZmluaXRpb25cbiAgaW1wbGVtZW50cyBJTmV1cm9ueFRhc2tEZWZpbml0aW9uXG57XG4gIHJlYWRvbmx5IG5ldXJvbnhJbnN0YW5jZVR5cGU6IElOZXVyb254SW5zdGFuY2VUeXBlO1xuICByZWFkb25seSB0ZW5zb3JQYXJhbGxlbFNpemU6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGFza3NQZXJJbnN0YW5jZTogbnVtYmVyO1xuICByZWFkb25seSBjb21waWxlZE1vZGVsOiBOZXVyb254Q29tcGlsZWRNb2RlbDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxpbnV4UGFyYW1ldGVyczogZWNzLkxpbnV4UGFyYW1ldGVycztcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldXJvbnhUYXNrRGVmaW5pdGlvblByb3BzKSB7XG4gICAgY29uc3QgbmV1cm9ueEluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5uZXVyb254SW5zdGFuY2VUeXBlID8/IHByb3BzLmNvbXBpbGVkTW9kZWwuY29tcGlsZVRpbWVJbnN0YW5jZVR5cGU7XG4gICAgY29uc3QgdGVuc29yUGFyYWxsZWxTaXplID0gcHJvcHMudGVuc29yUGFyYWxsZWxTaXplID8/IDE7XG4gICAgY29uc3QgdGFza3NQZXJJbnN0YW5jZSA9XG4gICAgICBuZXVyb254SW5zdGFuY2VUeXBlLmFjY2VsZXJhdG9yQ2hpcHMubmV1cm9ueENvcmVzIC8gdGVuc29yUGFyYWxsZWxTaXplO1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBwbGFjZW1lbnRDb25zdHJhaW50czogW1xuICAgICAgICAuLi4ocHJvcHMucGxhY2VtZW50Q29uc3RyYWludHMgPz8gW10pLFxuICAgICAgICBlY3MuUGxhY2VtZW50Q29uc3RyYWludC5tZW1iZXJPZihcbiAgICAgICAgICBgcnVubmluZ1Rhc2tzQ291bnQ8JHt0YXNrc1Blckluc3RhbmNlfWAsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMubGludXhQYXJhbWV0ZXJzID0gbmV3IGVjcy5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIik7XG4gICAgdGhpcy5saW51eFBhcmFtZXRlcnMuYWRkRGV2aWNlcyhcbiAgICAgIC4uLkFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IG5ldXJvbnhJbnN0YW5jZVR5cGU/LmFjY2VsZXJhdG9yQ2hpcHMuY2hpcHMgPz8gMSxcbiAgICAgIH0pLm1hcDxlY3MuRGV2aWNlPigoXywgaW5kZXgpID0+ICh7XG4gICAgICAgIGhvc3RQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lclBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgcGVybWlzc2lvbnM6IFtlY3MuRGV2aWNlUGVybWlzc2lvbi5SRUFELCBlY3MuRGV2aWNlUGVybWlzc2lvbi5XUklURV0sXG4gICAgICB9KSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5leGVjdXRpb25Sb2xlKSB7XG4gICAgICBwcm9wcy5jb21waWxlZE1vZGVsLmJ1Y2tldC5ncmFudFJlYWQodGhpcy5leGVjdXRpb25Sb2xlKTtcbiAgICB9XG4gICAgcHJvcHMuY29tcGlsZWRNb2RlbC5idWNrZXQuZ3JhbnRSZWFkKHRoaXMudGFza1JvbGUpO1xuICAgIHRoaXMuY29tcGlsZWRNb2RlbCA9IHByb3BzLmNvbXBpbGVkTW9kZWw7XG4gICAgdGhpcy5uZXVyb254SW5zdGFuY2VUeXBlID0gbmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgICB0aGlzLnRlbnNvclBhcmFsbGVsU2l6ZSA9IHRlbnNvclBhcmFsbGVsU2l6ZTtcbiAgICB0aGlzLnRhc2tzUGVySW5zdGFuY2UgPSB0YXNrc1Blckluc3RhbmNlO1xuICB9XG5cbiAgYWRkQ29udGFpbmVyV2l0aERlZmF1bHQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogZWNzLkNvbnRhaW5lckRlZmluaXRpb25PcHRpb25zLFxuICApOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gc3VwZXIuYWRkQ29udGFpbmVyKGlkLCB7XG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICBzdHJlYW1QcmVmaXg6IGlkLFxuICAgICAgfSksXG4gICAgICBsaW51eFBhcmFtZXRlcnM6IHRoaXMubGludXhQYXJhbWV0ZXJzLFxuICAgICAgbWVtb3J5UmVzZXJ2YXRpb25NaUI6IE1hdGguY2VpbChcbiAgICAgICAgKHRoaXMubmV1cm9ueEluc3RhbmNlVHlwZS5tZW1vcnkudG9NZWJpYnl0ZXMoKSAqIDAuOCkgL1xuICAgICAgICAgIHRoaXMudGFza3NQZXJJbnN0YW5jZSxcbiAgICAgICksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgICBjb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiBcIm1vZGVsXCIsXG4gICAgICBjb250YWluZXJQYXRoOiBcIi9vcHQvbWwvbW9kZWxcIixcbiAgICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWROZXVyb254U2VydmljZVByb3BzXG4gIGV4dGVuZHMgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRFYzJTZXJ2aWNlUHJvcHMge31cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZE5ldXJvbnhTZXJ2aWNlIGV4dGVuZHMgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRFYzJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZE5ldXJvbnhTZXJ2aWNlUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IG5ldXJvbnhUYXNrRGVmaW5pdGlvbiA9IHByb3BzLnRhc2tEZWZpbml0aW9uO1xuICAgIGlmIChcbiAgICAgICFuZXVyb254VGFza0RlZmluaXRpb24gfHxcbiAgICAgICEobmV1cm9ueFRhc2tEZWZpbml0aW9uIGluc3RhbmNlb2YgTmV1cm9ueFRhc2tEZWZpbml0aW9uKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFza0RlZmluaXRpb24gbXVzdCBleHRlbmQgTmV1cm9ueFRhc2tEZWZpbml0aW9uXCIpO1xuICAgIH1cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6XG4gICAgICAgIHByb3BzLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QgPz8gRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSB0aGlzLmdldERlZmF1bHRDbHVzdGVyKHRoaXMsIHByb3BzLnZwYyk7XG5cbiAgICAvLyBpbnN0YWxsIGFuZCBtb3VudCBtb3VudHBvaW50IGZvciBzM1xuICAgIGNvbnN0IHVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoKTtcbiAgICB1c2VyRGF0YS5hZGRDb21tYW5kcyhgXG4jIS9iaW4vYmFzaCAtZVxuXG4jIEluc3RhbGwgTW91bnRwb2ludFxuTVBfUlBNPSQobWt0ZW1wIC0tc3VmZml4PS5ycG0pXG5jdXJsIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9tb3VudHBvaW50LXMzLXJlbGVhc2UvbGF0ZXN0L3g4Nl82NC9tb3VudC1zMy5ycG0gPiAkTVBfUlBNXG5cbiMgY2xvdWQtaW5pdCBpbnN0YWxscyBjb25mbGljdCB3aXRoIFNTTSBhZ2VudDogaHR0cHM6Ly9naXRodWIuY29tL2FtYXpvbmxpbnV4L2FtYXpvbi1saW51eC0yMDIzL2lzc3Vlcy8zOTdcbmF0dGVtcHQ9MFxubWF4X2F0dGVtcHRzPTVcbnVudGlsIGRuZiBpbnN0YWxsIC15ICRNUF9SUE07IGRvXG4gICAgYXR0ZW1wdD0kKChhdHRlbXB0ICsgMSkpXG4gICAgaWYgWyAkYXR0ZW1wdCAtZ2UgJG1heF9hdHRlbXB0cyBdOyB0aGVuXG4gICAgICAgIGVjaG8gXCJGYWlsZWQgdG8gaW5zdGFsbCBtb3VudC1zMyBhZnRlciAkbWF4X2F0dGVtcHRzIGF0dGVtcHRzLiBFeGl0aW5nLlwiXG4gICAgICAgIGV4aXQgMVxuICAgIGZpXG4gICAgZWNobyBcImRuZiBpbnN0YWxsIG1vdW50LXMzIGZhaWxlZCAoYXR0ZW1wdCAkYXR0ZW1wdC8kbWF4X2F0dGVtcHRzKSwgcmV0cnlpbmcgaW4gMyBzZWNvbmRzLi4uXCJcbiAgICBzbGVlcCAzXG5kb25lXG5cbnJtICRNUF9SUE1cblxuIyBTZXR1cCB0aGUgZnN0YWIgZmlsZSBhbmQgY3JlYXRlIHRoZSBtb3VudFxubWtkaXIgLS1wYXJlbnRzIC9tbnQvJHtuZXVyb254VGFza0RlZmluaXRpb24uY29tcGlsZWRNb2RlbC5idWNrZXQuYnVja2V0TmFtZX1cbm1vdW50LXMzICR7bmV1cm9ueFRhc2tEZWZpbml0aW9uLmNvbXBpbGVkTW9kZWwuYnVja2V0LmJ1Y2tldE5hbWV9IC9tbnQvJHtuZXVyb254VGFza0RlZmluaXRpb24uY29tcGlsZWRNb2RlbC5idWNrZXQuYnVja2V0TmFtZX0gLS1hbGxvdy1vdGhlciAtLWZpbGUtbW9kZT02NDQgLS1kaXItbW9kZT03NTVgKTtcblxuICAgIG5ldXJvbnhUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUoe1xuICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgaG9zdDoge1xuICAgICAgICBzb3VyY2VQYXRoOiBgL21udC8ke25ldXJvbnhUYXNrRGVmaW5pdGlvbi5jb21waWxlZE1vZGVsLmJ1Y2tldC5idWNrZXROYW1lfWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgdm9sdW1lU2l6ZSA9IE1hdGguY2VpbChcbiAgICAgIFB5dG9yY2hUcmFpbmluZ05ldXJvbnhJbWFnZS5zaXplLnRvR2liaWJ5dGVzKCkgK1xuICAgICAgICBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2Uuc2l6ZS50b0dpYmlieXRlcygpLFxuICAgICk7XG4gICAgY29uc3QgYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKHRoaXMsIFwiQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICB2cGM6IGNsdXN0ZXIudnBjLFxuICAgICAgaW5zdGFuY2VUeXBlOiBuZXVyb254VGFza0RlZmluaXRpb24ubmV1cm9ueEluc3RhbmNlVHlwZS5pbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2U6IG5ldyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlXCIsXG4gICAgICApLFxuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBcIi9kZXYveHZkYVwiLFxuICAgICAgICAgIHZvbHVtZTogQmxvY2tEZXZpY2VWb2x1bWUuZWJzKHZvbHVtZVNpemUsIHtcbiAgICAgICAgICAgIHZvbHVtZVR5cGU6IEVic0RldmljZVZvbHVtZVR5cGUuR1AzLFxuICAgICAgICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVzZXJEYXRhLFxuICAgICAgZGVzaXJlZENhcGFjaXR5OiBNYXRoLmNlaWwoXG4gICAgICAgIChwcm9wcy5kZXNpcmVkQ291bnQgPz8gMSkgLyBuZXVyb254VGFza0RlZmluaXRpb24udGFza3NQZXJJbnN0YW5jZSxcbiAgICAgICksXG4gICAgfSk7XG4gICAgYXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICB0aGlzLmxvYWRCYWxhbmNlcixcbiAgICAgIFBvcnQudGNwUmFuZ2UoMzI3NjgsIDYwOTk5KSxcbiAgICApO1xuICAgIG5ldXJvbnhUYXNrRGVmaW5pdGlvbi5jb21waWxlZE1vZGVsLmJ1Y2tldC5ncmFudFJlYWQoYXV0b1NjYWxpbmdHcm91cCk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgZWNzLkFzZ0NhcGFjaXR5UHJvdmlkZXIodGhpcywgXCJBc2dDYXBhY2l0eVByb3ZpZGVyXCIsIHtcbiAgICAgIGF1dG9TY2FsaW5nR3JvdXAsXG4gICAgfSk7XG4gICAgY2x1c3Rlci5hZGRBc2dDYXBhY2l0eVByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgfVxufVxuIl19
@@ -47,6 +47,6 @@ class PytorchTrainingNeuronxImage extends NeuronxImage {
47
47
  }
48
48
  exports.PytorchTrainingNeuronxImage = PytorchTrainingNeuronxImage;
49
49
  _a = JSII_RTTI_SYMBOL_1;
50
- PytorchTrainingNeuronxImage[_a] = { fqn: "aws-cdk-neuronx-patterns.PytorchTrainingNeuronxImage", version: "0.0.13" };
50
+ PytorchTrainingNeuronxImage[_a] = { fqn: "aws-cdk-neuronx-patterns.PytorchTrainingNeuronxImage", version: "0.0.15" };
51
51
  PytorchTrainingNeuronxImage.imageName = "public.ecr.aws/neuron/pytorch-training-neuronx";
52
52
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1sZWFybmluZy1jb250YWluZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jhc2UvbmV1cm9ueC9kZWVwLWxlYXJuaW5nLWNvbnRhaW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUM7QUFPbkMsTUFBZSxZQUFZO0lBNEZ6QixNQUFNLENBQUMsY0FBYyxDQUNuQixjQUFzQixFQUN0QixhQUFxQixFQUNyQixjQUFzQixFQUN0QixhQUFxQjtRQUVyQixPQUFPO1lBQ0wsVUFBVSxFQUFFLGNBQWM7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxHQUFHLGNBQWMsY0FBYyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxjQUFjLFVBQVUsYUFBYSxFQUFFO1NBQ3RILENBQUM7SUFDSixDQUFDOztBQXRHZSxpQkFBSSxHQUFHLGtCQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLHdCQUF3QjtBQUNSLHVCQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FDdEQsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7QUFDRix3QkFBd0I7QUFDUix1QkFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQ3RELFFBQVEsRUFDUixNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0FBQ0Ysd0JBQXdCO0FBQ1IsdUJBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUN0RCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztBQUNGLHdCQUF3QjtBQUNSLHVCQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FDdEQsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7QUFDRix3QkFBd0I7QUFDUix1QkFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQ3RELFFBQVEsRUFDUixNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0FBQ0Ysd0JBQXdCO0FBQ1IsdUJBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUN0RCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztBQUNGLHdCQUF3QjtBQUNSLHVCQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FDdEQsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7QUFDRix3QkFBd0I7QUFDUix1QkFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQ3RELFFBQVEsRUFDUixNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0FBQ0Ysd0JBQXdCO0FBQ1IsdUJBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUN0RCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztBQUNGLHdCQUF3QjtBQUNSLHVCQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FDdEQsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7QUFDRix3QkFBd0I7QUFDUix1QkFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQ3RELFFBQVEsRUFDUixNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0FBQ0Ysd0JBQXdCO0FBQ1IsdUJBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUN0RCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztBQUNGLHdCQUF3QjtBQUNSLG1CQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7S0FDbEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWtCLENBQUM7QUFpQjVDLE1BQWEsMkJBQTRCLFNBQVEsWUFBWTs7QUFBN0Qsa0VBRUM7OztBQURpQixxQ0FBUyxHQUFHLGdEQUFnRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElOZXVyb254SW1hZ2Uge1xuICByZWFkb25seSBpbWFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaW1hZ2VUYWc6IHN0cmluZztcbiAgcmVhZG9ubHkgc2RrVmVyc2lvbjogc3RyaW5nO1xufVxuYWJzdHJhY3QgY2xhc3MgTmV1cm9ueEltYWdlIHtcbiAgc3RhdGljIHJlYWRvbmx5IHNpemUgPSBTaXplLmdpYmlieXRlcygzMCk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjMuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjNfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjMuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi42LjBcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjIuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjJfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjIuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi41LjFcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjEuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjFfMSA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjEuMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi41LjFcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjEuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjFfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjEuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi41LjFcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjAuMiAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjBfMiA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjAuMlwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjAuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjBfMSA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjAuMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjAuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjBfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMjAuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTkuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMTlfMSA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMTkuMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTkuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMTlfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMTkuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTguMiAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMThfMiA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMTguMlwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTguMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMThfMSA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMTguMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTguMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMThfMCA9IE5ldXJvbnhJbWFnZS5mcm9tU2RrVmVyc2lvbihcbiAgICBcIjIuMTguMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBMYXRlc3QgTmV1cm9uIFNESyAqL1xuICBzdGF0aWMgcmVhZG9ubHkgTEFURVNUID0gT2JqZWN0LmVudHJpZXMoTmV1cm9ueEltYWdlKVxuICAgIC5maWx0ZXIoKFtrXSkgPT4gay5zdGFydHNXaXRoKFwiU0RLX1wiKSlcbiAgICAuc29ydCgoW2sxXSwgW2syXSkgPT4gKGsxIDwgazIgPyAxIDogLTEpKVxuICAgIC5tYXAoKFtfLCB2XSkgPT4gdilbMF0gYXMgSU5ldXJvbnhJbWFnZTtcblxuICBzdGF0aWMgZnJvbVNka1ZlcnNpb24oXG4gICAgbmV1cm9ueFZlcnNpb246IHN0cmluZyxcbiAgICBweXRob25WZXJzaW9uOiBzdHJpbmcsXG4gICAgcHl0b3JjaFZlcnNpb246IHN0cmluZyxcbiAgICB1YnVudHVWZXJzaW9uOiBzdHJpbmcsXG4gICk6IElOZXVyb254SW1hZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzZGtWZXJzaW9uOiBuZXVyb254VmVyc2lvbixcbiAgICAgIGltYWdlTmFtZTogdGhpcy5pbWFnZU5hbWUsXG4gICAgICBpbWFnZVRhZzogYCR7cHl0b3JjaFZlcnNpb259LW5ldXJvbngtcHkke3B5dGhvblZlcnNpb24ucmVwbGFjZShcIi5cIiwgXCJcIil9LXNkayR7bmV1cm9ueFZlcnNpb259LXVidW50dSR7dWJ1bnR1VmVyc2lvbn1gLFxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBpbWFnZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFB5dG9yY2hUcmFpbmluZ05ldXJvbnhJbWFnZSBleHRlbmRzIE5ldXJvbnhJbWFnZSB7XG4gIHN0YXRpYyByZWFkb25seSBpbWFnZU5hbWUgPSBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLXRyYWluaW5nLW5ldXJvbnhcIjtcbn1cbiJdfQ==
@@ -84,7 +84,7 @@ class Parameters {
84
84
  }
85
85
  exports.Parameters = Parameters;
86
86
  _a = JSII_RTTI_SYMBOL_1;
87
- Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.13" };
87
+ Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.15" };
88
88
  /**
89
89
  * Compile target model.
90
90
  */
@@ -149,5 +149,5 @@ class Model {
149
149
  }
150
150
  exports.Model = Model;
151
151
  _b = JSII_RTTI_SYMBOL_1;
152
- Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.13" };
152
+ Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.15" };
153
153
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFzZS9uZXVyb254L21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTBDO0FBRzFDLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0QixnRUFBaUIsQ0FBQTtJQUNqQiw2REFBZSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxZQUFZLDRCQUFaLFlBQVksUUFHdkI7QUFFRDs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQUVEOztHQUVHO0FBQ0gsTUFBYSxVQUFVO0lBQ3JCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQWtCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0Q7SUFDRTs7T0FFRztJQUNjLFVBQWtCO1FBQWxCLGVBQVUsR0FBVixVQUFVLENBQVE7SUFDbEMsQ0FBQztJQUNKOzs7T0FHRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFDRDs7O09BR0c7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TixNQUFNLENBQVU7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUN2QixDQUFDOztBQWxFTixzQkFtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaXplLCBUb2tlbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcblxuZXhwb3J0IGVudW0gRGF0YVR5cGVCaXRzIHtcbiAgQkYxNl9PUl9GUDE2ID0gMTYsXG4gIEZQOF9PUl9JTlQ4ID0gOCxcbn1cblxuLyoqXG4gKiBRdWFudCBkYXRhIHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFF1YW50RHR5cGUge1xuICAvKipcbiAgICogaW50OCB3ZWlnaHQgc3RvcmFnZS5cbiAgICovXG4gIFM4ID0gXCJzOFwiLFxufVxuXG4vKipcbiAqIE9wdGltaXphdGlvbiBsZXZlbC5cbiAqL1xuZXhwb3J0IGVudW0gT3B0TGV2ZWwge1xuICAvKipcbiAgICogZW5hYmxlcyB0aGUgY29yZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGluIHRoZSBjb21waWxlciwgd2hpbGUgYWxzbyBtaW5pbWl6aW5nIGNvbXBpbGUgdGltZS5cbiAgICovXG4gIE1JTklNSVpJTkdfQ09NUElMRV9USU1FID0gMSxcbiAgLyoqXG4gICAqIHByb3ZpZGVzIHRoZSBiZXN0IGJhbGFuY2UgYmV0d2VlbiBtb2RlbCBwZXJmb3JtYW5jZSBhbmQgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgQkVTVF9CQUxBTkNFID0gMixcbiAgLyoqXG4gICAqIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgbW9kZWwgZXhlY3V0aW9uIHBlcmZvcm1hbmNlIGJ1dCBtYXkgaW5jdXIgbG9uZ2VyIGNvbXBpbGUgdGltZXMgYW5kIGhpZ2hlciBob3N0IG1lbW9yeSB1c2FnZSBkdXJpbmcgbW9kZWwgY29tcGlsYXRpb24uXG4gICAqL1xuICBNT0RFTF9FWEVDVVRJT05fUEVSRk9STUFOQ0UgPSAzLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgbWlsbGlvbi5cbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgbWlsbGlvblhcbiAgICogQHJldHVybnMgcGFyYW1ldGVyc1xuICAgKi9cbiAgc3RhdGljIG1pbGxpb24ocGFyYW1ldGVyczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgKiAxMDAwMDAwKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgUGFyYW1ldGVycyByZXByZXNlbnRpbmcgYW4gYW1vdW50IGJpbGxpb24uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGJpbGxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzICogMTAwMDAwMDAwMCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBudW1iZXIgb2YgcGFyZW10ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczogbnVtYmVyLFxuICApIHt9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhpcyBudW1iZXIgb2YgcGFyYW1ldGVycyBhcyBtaWxsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIG1pbGxpb24uXG4gICAqL1xuICB0b01pbGxpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycyAvIDEwMDAwMDA7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGxpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsbGlvbi5cbiAgICovXG4gIHRvQmlsbGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzIC8gMTAwMDAwMDAwMDtcbiAgfVxuICB3ZWlnaHRTaXplKCkge1xuICAgIHJldHVybiBTaXplLmdpYmlieXRlcyh0aGlzLnRvQmlsbGlvbigpICogMi41KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQ29uZmlnIHtcbiAgcmVhZG9ubHkgbGF5ZXJzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGVtYmVkZGluZ0RpbWVuc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBhdHRlbnRpb25IZWFkczogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsIGJhc2ljIGluZnJvbWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogUGFyYW1ldGVycztcbiAgcmVhZG9ubHkgY29uZmlnPzogTW9kZWxDb25maWc7XG4gIHJlYWRvbmx5IG1vZGVsTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgLyoqXG4gICAqIG1vZGVsIGluZm9ybWF0aW9ucyBhdCBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gbW9kZWxJZCBtb2RlbCBpZCBvbiB0aGUgSHVnZ2luZ0ZhY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgbW9kZWwgYmFzaWMgaW5mb3JtYXRpb25cbiAgICogQHJldHVybnMgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBmcm9tSHVnZ2luZ0ZhY2UobW9kZWxJZDogc3RyaW5nLCBvcHRpb25zPzogTW9kZWxPcHRpb25zKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IG9wdGlvbnM/LnBhcmFtZXRlcnMgPz8gTW9kZWwubWF5YmVQYXJhbXMobW9kZWxJZCk7XG4gICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBtb2RlbCBJRC4gU2V0IG9wdGlvbmFsIHBhcmFtZXRlcnMuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsKG1vZGVsSWQsIG9wdGlvbnM/Lm1vZGVsTmFtZSA/PyBtb2RlbElkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IFMzIEJ1Y2tldFxuICAgKiBAcGFyYW0gYnVja2V0IE1vZGVsIHN0b3JlZCBTMyBCdWNrZXRcbiAgICogQHBhcmFtIHByZWZpeCBNb2RlbCBzdG9yZWQgb2JqZWN0cyBwcmVmaXhcbiAgICogQHBhcmFtIG9wdGlvbnMgbW9kZWwgYmFzaWMgaW5mb3JtYXRpb25cbiAgICogQHJldHVybnMgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBmcm9tQnVja2V0KGJ1Y2tldDogSUJ1Y2tldCwgcHJlZml4OiBzdHJpbmcsIG9wdGlvbnM/OiBNb2RlbE9wdGlvbnMpIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHByZWZpeCkgJiYgIW9wdGlvbnM/Lm1vZGVsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZWxOYW1lIGlzIHJlcXVpcmVkIHdoZW4gcHJlZml4IGlzIHVucmVzb2x2ZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsTmFtZSA9IG9wdGlvbnM/Lm1vZGVsTmFtZSA/PyBwcmVmaXguc3BsaXQoXCIvXCIpLnNsaWNlKC0xKVswXTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gb3B0aW9ucz8ucGFyYW1ldGVycyA/PyBNb2RlbC5tYXliZVBhcmFtcyhtb2RlbE5hbWUpO1xuICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBjYW5ub3QgYmUgaW5mZXJyZWQgZnJvbSB0aGUgbW9kZWwgSUQuIFNldCBvcHRpb25hbCBwYXJhbWV0ZXJzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbChcbiAgICAgIGJ1Y2tldC5zM1VybEZvck9iamVjdChwcmVmaXgpLFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgeyAuLi5vcHRpb25zLCBwYXJhbWV0ZXJzIH0sXG4gICAgICBidWNrZXQsXG4gICAgICBwcmVmaXgsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBtYXliZVBhcmFtcyhzb3VyY2U6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaWxsaW9uID0gc291cmNlLm1hdGNoKC8tKFxcZCspW2JCXS8pO1xuICAgICAgaWYgKGJpbGxpb24/LlsxXSkge1xuICAgICAgICByZXR1cm4gUGFyYW1ldGVycy5iaWxsaW9uKHBhcnNlSW50KGJpbGxpb25bMV0pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1pbGxpb24gPSBzb3VyY2UubWF0Y2goLy0oXFxkKylbbU1dLyk7XG4gICAgICBpZiAobWlsbGlvbj8uWzFdKSB7XG4gICAgICAgIHJldHVybiBQYXJhbWV0ZXJzLm1pbGxpb24ocGFyc2VJbnQobWlsbGlvblsxXSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTk9QXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgbW9kZWxOYW1lOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICAgIHJlYWRvbmx5IGJ1Y2tldD86IElCdWNrZXQsXG4gICAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nLFxuICApIHt9XG59XG4iXX0=