Repository: awslabs/aiops-modules
Pull request #296: feat: add deepseek manifest
Author: login: kukushking
Created: 2025-03-09T18:37:34Z | Merged: 2025-03-10T16:50:42Z

## Checklist before requesting a review

- [x] I updated `CHANGELOG.MD` with a description of my changes
- [x] If the change was to a module, I ran the code validation script (`scripts/validate.sh`)
- [x] If the change was to a module, I have added thorough tests
- [x] If the change was to a module, I have added/updated the module's README.md
- [x] If a module was added, I added a reference to the module to the repository's README.md
- [x] I verified that my code deploys successfully using `seedfarmer apply`

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.



Diff:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 999caefe..9b5012b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,10 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - added snyk security scans workflow
 - added managed mlflow to `sagemaker-studio` module
 - added JupyterLab to `sagemaker-studio` module
+- added `deepseek-sagemaker` example manifest
 
 ### **Changed**
 - enforce ssl on pipeline bucket in sagemaker templates module
 - update architecture diagrams in `sagemaker-templates-service-catalog` with GitHub support
+- update CDK in `sagemaker-jumpstart-fm-endpoint` module
 
 ## v1.7.2
 
diff --git a/README.md b/README.md
index f0d0c927..684ae3cc 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@ End-to-end example use-cases built using modules in this repository.
 | [MLOps with Amazon SageMaker](manifests/mlops-sagemaker/)                                                 | Set up environment for MLOps with Amazon SageMaker. Deploy secure Amazon SageMaker Studio Domain, and provisions SageMaker Project Templates using Service Catalog, including model training and deployment.                                                                                                                                                         |
 | [Ray on Amazon Elastic Kubernetes Service (EKS)](manifests/ray-on-eks/)                                   | Run Ray on AWS EKS. Deploys an AWS EKS cluster, KubeRay Ray Operator, and a Ray Cluster with autoscaling enabled.                                                             |
 | [Fine-tune 6B LLM (GPT-J) using Ray on Amazon EKS](manifests/fine-tuning-6b/)                             | Run fine-tuning of 6B GPT-J LLM. Deploys an AWS EKS cluster, KubeRay Ray Operator, and a Ray Cluster with autoscaling enabled, and runs a fine-tuning job. [How to fine tune a 6B LLM simply and cost-effective using Ray on Amazon EKS?](https://medium.com/@junjie-tang/how-to-fine-tune-a-6b-llm-simply-and-cost-effective-using-ray-ai-runtime-on-amazon-eks-a4ae0b3c6464)                                                  |
+| [DeepSeek R1 on Amazon SageMaker](manifests/deepseek-sagemaer/)             | An example using [DeepSeek R1 Distill Llama 8B](https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B) on Amazon SageMaker. Deploys a VPC, and Amazon SageMaker endpoint and Amazon SageMaker Studio IDE.                                                                                                                                    |
 | [Mlflow tracking server and model registry with Amazon SageMaker](manifests/mlflow-tracking/)             | An example using Mlflow experiments tracking, model registry, and LLM tracing with Amazon SageMaker. Deploy self-hosted Mlflow tracking server and model registry on AWS Fargate, and Amazon SageMaker Studio Domain environment.                                                                                                                                    |
 | [Managed Workflows with Apache Airflow (MWAA) for Machine Learning Training](manifests/mwaa-ml-training/) | An example orchestrating ML training jobs with Managed Workflows for Apache Airflow (MWAA). Deploys MWAA and an example ML training DAG.                                                                                                                                                                                                                             |
 | [MLOps with Step Functions](manifests/mlops-stepfunctions/)                                               | Automate machine learning lifecycle using Amazon SageMaker and AWS Step Functions.                                                                                                                                                                                                                                                                                   |
diff --git a/manifests/deepseek-sagemaker/README.MD b/manifests/deepseek-sagemaker/README.MD
new file mode 100644
index 00000000..0ab4da77
--- /dev/null
+++ b/manifests/deepseek-sagemaker/README.MD
@@ -0,0 +1,33 @@
+# DeepSeek R1 on Amazon Sagemaker JumpStart
+
+## Description
+
+The manifest `manifests/deepseek-sagemaker/deployment.yaml` deploys [DeepSeek R1 Distill Llama 8B](https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B) Large Language Model on Amazon SageMaker JumpStart.
+
+### Modules Inventory
+
+- [SageMaker JumpStart Endpoint Module](modules/fmops/sagemaker-jumpstart-fm-endpoint/README.md)
+- [SageMaker Studio Module](modules/sagemaker/sagemaker-studio/README.md)
+- [Networking Module](https://github.com/awslabs/idf-modules/tree/main/modules/network/basic-cdk)
+
+## Deployment
+
+### Request Quota Increase
+
+1. Navigate to `Service Quotas` > `AWS services` > `Amazon SageMaker` > `ml.g6.12xlarge for endpoint usage` and request an increase of 1 instance (the default is 0).
+
+### Deploy Manifest
+
+For deployment instructions, please refer to [DEPLOYMENT.MD](https://github.com/awslabs/aiops-modules/blob/main/DEPLOYMENT.md). You will need to deploy the following manifest: `manifests/deepseek-sagemaker/deployment.yaml`.
+
+## User Guide
+
+### Test Inference using Amazon SageMaker AI Studio IDE
+
+1. Navigate to `Amazon Sagemaker AI` > `Domains` > choose your domain > `User Profiles` and launch Studio as `lead-ds-user-1` user.
+
+2. In the Studio, navigate to `Deployments` > `Endpoints`, click on the endpoint name and choose `Test Inference` tab. 
+
+3. Enter your prompt and click `Send Request`:
+
+![Test Inference](docs/studio-test-inference.png "Test Inference")
diff --git a/manifests/deepseek-sagemaker/deployment.yaml b/manifests/deepseek-sagemaker/deployment.yaml
new file mode 100644
index 00000000..9d135862
--- /dev/null
+++ b/manifests/deepseek-sagemaker/deployment.yaml
@@ -0,0 +1,19 @@
+name: deepseek-sagemaker
+toolchainRegion: us-east-1
+forceDependencyRedeploy: true
+groups:
+  - name: networking
+    path: manifests/deepseek-sagemaker/networking-modules.yaml
+  - name: endpoints
+    path: manifests/deepseek-sagemaker/sagemaker-endpoints-modules.yaml
+  - name: studio
+    path: manifests/deepseek-sagemaker/sagemaker-studio-modules.yaml
+targetAccountMappings:
+  - alias: primary
+    accountId:
+      valueFrom:
+        envVariable: PRIMARY_ACCOUNT
+    default: true
+    regionMappings:
+      - region: us-east-1
+        default: true
diff --git a/manifests/deepseek-sagemaker/docs/studio-test-inference.png b/manifests/deepseek-sagemaker/docs/studio-test-inference.png
new file mode 100644
index 00000000..86a52831
Binary files /dev/null and b/manifests/deepseek-sagemaker/docs/studio-test-inference.png differ
diff --git a/manifests/deepseek-sagemaker/networking-modules.yaml b/manifests/deepseek-sagemaker/networking-modules.yaml
new file mode 100644
index 00000000..057cbb27
--- /dev/null
+++ b/manifests/deepseek-sagemaker/networking-modules.yaml
@@ -0,0 +1,6 @@
+name: networking
+path: git::https://github.com/awslabs/idf-modules.git//modules/network/basic-cdk?ref=release/1.13.0&depth=1
+targetAccount: primary
+parameters:
+  - name: internet-accessible
+    value: True
diff --git a/manifests/deepseek-sagemaker/sagemaker-endpoints-modules.yaml b/manifests/deepseek-sagemaker/sagemaker-endpoints-modules.yaml
new file mode 100644
index 00000000..dde4460c
--- /dev/null
+++ b/manifests/deepseek-sagemaker/sagemaker-endpoints-modules.yaml
@@ -0,0 +1,20 @@
+name: deepseek-jumpstart
+path: modules/fmops/sagemaker-jumpstart-fm-endpoint
+targetAccount: primary
+parameters:
+  - name: jump-start-model-name
+    value: DEEPSEEK_LLM_R1_DISTILL_LLAMA_8B_1_1_2
+  - name: instance-type
+    value: ml.g6.12xlarge
+  - name: vpc_id
+    valueFrom:
+      moduleMetadata:
+        group: networking
+        name: networking
+        key: VpcId
+  - name: subnet_ids
+    valueFrom:
+      moduleMetadata:
+        group: networking
+        name: networking
+        key: PrivateSubnetIds
diff --git a/manifests/deepseek-sagemaker/sagemaker-studio-modules.yaml b/manifests/deepseek-sagemaker/sagemaker-studio-modules.yaml
new file mode 100644
index 00000000..26c04894
--- /dev/null
+++ b/manifests/deepseek-sagemaker/sagemaker-studio-modules.yaml
@@ -0,0 +1,30 @@
+name: studio
+path: modules/sagemaker/sagemaker-studio
+targetAccount: primary
+parameters:
+  - name: vpc_id
+    valueFrom:
+      moduleMetadata:
+        group: networking
+        name: networking
+        key: VpcId
+  - name: subnet_ids
+    valueFrom:
+      moduleMetadata:
+        group: networking
+        name: networking
+        key: PrivateSubnetIds
+  - name: data_science_users
+    value:
+      - ds-user-1
+  - name: lead_data_science_users
+    value:
+      - lead-ds-user-1
+  - name: server_lifecycle_name
+    value: studio-auto-shutdown
+  - name: studio_bucket_name
+    value: mlops-*
+  - name: retain_efs
+    value: 'False'
+  - name: enable_domain_resource_isolation
+    value: 'False'
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/README.md b/modules/fmops/sagemaker-jumpstart-fm-endpoint/README.md
index 5aa44218..ff522bfa 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/README.md
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/README.md
@@ -23,6 +23,7 @@ The module uses [AWS Generative AI CDK Constructs](https://github.com/awslabs/ge
 
 - `vpc-id` - VPC id
 - `subnet-ids` - VPC subnet ids
+- `endpoint-name` - name of te endpoint. `{project}-{deloyment}-{module}` by default.
 
 ### Module Metadata Outputs
 
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/deployspec.yaml b/modules/fmops/sagemaker-jumpstart-fm-endpoint/deployspec.yaml
index f29ad3f1..7ec91e75 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/deployspec.yaml
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/deployspec.yaml
@@ -3,7 +3,7 @@ deploy:
   phases:
     install:
       commands:
-        - npm install -g aws-cdk@2.130.0
+        - npm install -g aws-cdk@2.1003.0
         - npm install
     build:
       commands:
@@ -15,7 +15,7 @@ destroy:
   phases:
     install:
       commands:
-        - npm install -g aws-cdk@2.130.0
+        - npm install -g aws-cdk@2.1003.0
         - npm install
     build:
       commands:
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/index.ts b/modules/fmops/sagemaker-jumpstart-fm-endpoint/index.ts
index 99265b94..3e18d5ae 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/index.ts
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/index.ts
@@ -10,6 +10,7 @@ const projectName = process.env.SEEDFARMER_PROJECT_NAME;
 const deploymentName = process.env.SEEDFARMER_DEPLOYMENT_NAME;
 const moduleName = process.env.SEEDFARMER_MODULE_NAME;
 
+const endpointName: string | undefined = process.env.SEEDFARMER_PARAMETER_ENDPOINT_NAME;
 const jumpStartModelName: string = process.env.SEEDFARMER_PARAMETER_JUMP_START_MODEL_NAME!;
 const instanceType: string = process.env.SEEDFARMER_PARAMETER_INSTANCE_TYPE!;
 
@@ -22,6 +23,7 @@ const stack = new SagemakerJumpStartFmEndpointStack(app, `${projectName}-${deplo
   projectName,
   deploymentName,
   moduleName,
+  endpointName,
   jumpStartModelName,
   instanceType,
   vpcId,
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/lib/sagemaker-jumpstart-fm-endpoint-stack.ts b/modules/fmops/sagemaker-jumpstart-fm-endpoint/lib/sagemaker-jumpstart-fm-endpoint-stack.ts
index d6bdc3b0..d324eaae 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/lib/sagemaker-jumpstart-fm-endpoint-stack.ts
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/lib/sagemaker-jumpstart-fm-endpoint-stack.ts
@@ -14,6 +14,7 @@ interface SagemakerJumpStartFmEndpointStackProps extends cdk.StackProps {
   projectName?: string;
   deploymentName?: string;
   moduleName?: string;
+  endpointName?: string;
   jumpStartModelName: string;
   instanceType: string;
   vpcId?: string | undefined;
@@ -87,6 +88,7 @@ export class SagemakerJumpStartFmEndpointStack extends cdk.Stack {
     }
 
     this.jumpStartEndpoint = new JumpStartSageMakerEndpoint(this, "JumpStartEndpoint", {
+      endpointName: props.endpointName ?? `${props.projectName}-${props.deploymentName}-${props.moduleName}`,
       model: JumpStartModel.of(props.jumpStartModelName),
       instanceType: SageMakerInstanceType.of(props.instanceType),
       role: this.role,
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/package-lock.json b/modules/fmops/sagemaker-jumpstart-fm-endpoint/package-lock.json
index ea05ec58..ee061c5c 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/package-lock.json
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/package-lock.json
@@ -8,8 +8,8 @@
       "name": "sagemaker-fm-endpoint",
       "version": "0.1.0",
       "dependencies": {
-        "@cdklabs/generative-ai-cdk-constructs": "^0.1.74",
-        "aws-cdk-lib": "^2.130.0",
+        "@cdklabs/generative-ai-cdk-constructs": "^0.1.296",
+        "aws-cdk-lib": "^2.181.1",
         "constructs": "^10.3.0",
         "source-map-support": "^0.5.21"
       },
@@ -55,19 +55,52 @@
       }
     },
     "node_modules/@aws-cdk/asset-awscli-v1": {
-      "version": "2.2.202",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz",
-      "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg=="
-    },
-    "node_modules/@aws-cdk/asset-kubectl-v20": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz",
-      "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg=="
+      "version": "2.2.226",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.226.tgz",
+      "integrity": "sha512-dlf8mTsW6ulV9pUxiYHSRHtQfZhHX1gmLEbHGE1sPI//skgkma+p5CVBeSiou9QEdcHOvOVruYzxY9OZ/GDS7g==",
+      "license": "Apache-2.0"
     },
     "node_modules/@aws-cdk/asset-node-proxy-agent-v6": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz",
-      "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz",
+      "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@aws-cdk/cloud-assembly-schema": {
+      "version": "40.7.0",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-40.7.0.tgz",
+      "integrity": "sha512-00wVKn9pOOGXbeNwA4E8FUFt0zIB4PmSO7PvIiDWgpaFX3G/sWyy0A3s6bg/n2Yvkghu8r4a8ckm+mAzkAYmfA==",
+      "bundleDependencies": [
+        "jsonschema",
+        "semver"
+      ],
+      "license": "Apache-2.0",
+      "dependencies": {
+        "jsonschema": "~1.4.1",
+        "semver": "^7.7.1"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      }
+    },
+    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": {
+      "version": "1.4.1",
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": {
+      "version": "7.7.1",
+      "inBundle": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
     },
     "node_modules/@babel/code-frame": {
       "version": "7.23.5",
@@ -692,20 +725,47 @@
       "dev": true
     },
     "node_modules/@cdklabs/generative-ai-cdk-constructs": {
-      "version": "0.1.74",
-      "resolved": "https://registry.npmjs.org/@cdklabs/generative-ai-cdk-constructs/-/generative-ai-cdk-constructs-0.1.74.tgz",
-      "integrity": "sha512-nOa9tZsHSy5ibgLaik5jol0kbt4Qb2pnP7JbEPkYdkAQMq/zeIEcylllBpXvm7spCJdmT1coyYWlynncv17p3Q==",
+      "version": "0.1.296",
+      "resolved": "https://registry.npmjs.org/@cdklabs/generative-ai-cdk-constructs/-/generative-ai-cdk-constructs-0.1.296.tgz",
+      "integrity": "sha512-7GHdcwI7IFpzSBvW5YVLqelpnGlbIsu5f0UQjVG4VhoAjSxHFzAXOo8WM9LFUj9IH+jrLJAO48p2fvxHxVRUig==",
+      "bundleDependencies": [
+        "@aws-cdk/aws-lambda-python-alpha",
+        "deepmerge"
+      ],
+      "license": "Apache-2.0",
       "dependencies": {
-        "cdk-nag": "^2.28.46"
+        "@aws-cdk/aws-lambda-python-alpha": "2.181.1-alpha.0",
+        "cdk-nag": "^2.35.36",
+        "deepmerge": "^4.3.1"
       },
       "engines": {
-        "node": ">= 18.12.0 <= 20.x"
+        "node": ">= 18.12.0 <= 22.x"
       },
       "peerDependencies": {
-        "aws-cdk-lib": "^2.116.0",
+        "aws-cdk-lib": "^2.181.1",
         "constructs": "^10.3.0"
       }
     },
+    "node_modules/@cdklabs/generative-ai-cdk-constructs/node_modules/@aws-cdk/aws-lambda-python-alpha": {
+      "version": "2.181.1-alpha.0",
+      "inBundle": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "peerDependencies": {
+        "aws-cdk-lib": "^2.181.1",
+        "constructs": "^10.0.0"
+      }
+    },
+    "node_modules/@cdklabs/generative-ai-cdk-constructs/node_modules/deepmerge": {
+      "version": "4.3.1",
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -1959,9 +2019,9 @@
       }
     },
     "node_modules/aws-cdk-lib": {
-      "version": "2.130.0",
-      "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.130.0.tgz",
-      "integrity": "sha512-yK7ibePipdjlI4AFM94fwwtsCkmpWJ0JFZTMPahahC/3Pxe/BA/nnI/4Namvl5QPxW5QlU0xQYU7cywioq3RQg==",
+      "version": "2.182.0",
+      "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.182.0.tgz",
+      "integrity": "sha512-emymzTJiCpPz8oF++oiFvFuLH1QZjv6NRNQGn7VuDrEewZFTM4VpiVco5NrxH+KCWnXquDBPF5sQIUo6HY7jLg==",
       "bundleDependencies": [
         "@balena/dockerignore",
         "case",
@@ -1975,20 +2035,21 @@
         "yaml",
         "mime-types"
       ],
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-cdk/asset-awscli-v1": "^2.2.202",
-        "@aws-cdk/asset-kubectl-v20": "^2.1.2",
-        "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1",
+        "@aws-cdk/asset-awscli-v1": "^2.2.208",
+        "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0",
+        "@aws-cdk/cloud-assembly-schema": "^40.6.0",
         "@balena/dockerignore": "^1.0.2",
         "case": "1.6.3",
         "fs-extra": "^11.2.0",
-        "ignore": "^5.3.1",
+        "ignore": "^5.3.2",
         "jsonschema": "^1.4.1",
         "mime-types": "^2.1.35",
         "minimatch": "^3.1.2",
         "punycode": "^2.3.1",
-        "semver": "^7.6.0",
-        "table": "^6.8.1",
+        "semver": "^7.6.3",
+        "table": "^6.8.2",
         "yaml": "1.10.2"
       },
       "engines": {
@@ -2004,14 +2065,14 @@
       "license": "Apache-2.0"
     },
     "node_modules/aws-cdk-lib/node_modules/ajv": {
-      "version": "8.12.0",
+      "version": "8.17.1",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
         "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "require-from-string": "^2.0.2"
       },
       "funding": {
         "type": "github",
@@ -2101,8 +2162,23 @@
       "inBundle": true,
       "license": "MIT"
     },
+    "node_modules/aws-cdk-lib/node_modules/fast-uri": {
+      "version": "3.0.6",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ],
+      "inBundle": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/aws-cdk-lib/node_modules/fs-extra": {
-      "version": "11.2.0",
+      "version": "11.3.0",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
@@ -2120,7 +2196,7 @@
       "license": "ISC"
     },
     "node_modules/aws-cdk-lib/node_modules/ignore": {
-      "version": "5.3.1",
+      "version": "5.3.2",
       "inBundle": true,
       "license": "MIT",
       "engines": {
@@ -2152,7 +2228,7 @@
       }
     },
     "node_modules/aws-cdk-lib/node_modules/jsonschema": {
-      "version": "1.4.1",
+      "version": "1.5.0",
       "inBundle": true,
       "license": "MIT",
       "engines": {
@@ -2164,17 +2240,6 @@
       "inBundle": true,
       "license": "MIT"
     },
-    "node_modules/aws-cdk-lib/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "inBundle": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/aws-cdk-lib/node_modules/mime-db": {
       "version": "1.52.0",
       "inBundle": true,
@@ -2222,12 +2287,9 @@
       }
     },
     "node_modules/aws-cdk-lib/node_modules/semver": {
-      "version": "7.6.0",
+      "version": "7.6.3",
       "inBundle": true,
       "license": "ISC",
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -2276,7 +2338,7 @@
       }
     },
     "node_modules/aws-cdk-lib/node_modules/table": {
-      "version": "6.8.1",
+      "version": "6.9.0",
       "inBundle": true,
       "license": "BSD-3-Clause",
       "dependencies": {
@@ -2298,19 +2360,6 @@
         "node": ">= 10.0.0"
       }
     },
-    "node_modules/aws-cdk-lib/node_modules/uri-js": {
-      "version": "4.4.1",
-      "inBundle": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/aws-cdk-lib/node_modules/yallist": {
-      "version": "4.0.0",
-      "inBundle": true,
-      "license": "ISC"
-    },
     "node_modules/aws-cdk-lib/node_modules/yaml": {
       "version": "1.10.2",
       "inBundle": true,
@@ -2683,11 +2732,12 @@
       "dev": true
     },
     "node_modules/cdk-nag": {
-      "version": "2.28.55",
-      "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.28.55.tgz",
-      "integrity": "sha512-ETdEB6zFQqxVrWXMZSI3c3EoMNOp919pdYsb11zlZyyfS99mgKf9wdXHpBWYu2gY+efxXktWj7HLoPU6g1sxrQ==",
+      "version": "2.35.40",
+      "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.35.40.tgz",
+      "integrity": "sha512-S2zo25FTYLNY7uHRFKT4Hlapf8kGuTe9b/MIIxY5PXV76ZeCjhii6AsaV2hhIPx983ckbvv8cnjINoJATpKmcA==",
+      "license": "Apache-2.0",
       "peerDependencies": {
-        "aws-cdk-lib": "^2.116.0",
+        "aws-cdk-lib": "^2.156.0",
         "constructs": "^10.0.5"
       }
     },
@@ -6950,19 +7000,33 @@
       }
     },
     "@aws-cdk/asset-awscli-v1": {
-      "version": "2.2.202",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz",
-      "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg=="
-    },
-    "@aws-cdk/asset-kubectl-v20": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz",
-      "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg=="
+      "version": "2.2.226",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.226.tgz",
+      "integrity": "sha512-dlf8mTsW6ulV9pUxiYHSRHtQfZhHX1gmLEbHGE1sPI//skgkma+p5CVBeSiou9QEdcHOvOVruYzxY9OZ/GDS7g=="
     },
     "@aws-cdk/asset-node-proxy-agent-v6": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz",
-      "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz",
+      "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A=="
+    },
+    "@aws-cdk/cloud-assembly-schema": {
+      "version": "40.7.0",
+      "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-40.7.0.tgz",
+      "integrity": "sha512-00wVKn9pOOGXbeNwA4E8FUFt0zIB4PmSO7PvIiDWgpaFX3G/sWyy0A3s6bg/n2Yvkghu8r4a8ckm+mAzkAYmfA==",
+      "requires": {
+        "jsonschema": "~1.4.1",
+        "semver": "^7.7.1"
+      },
+      "dependencies": {
+        "jsonschema": {
+          "version": "1.4.1",
+          "bundled": true
+        },
+        "semver": {
+          "version": "7.7.1",
+          "bundled": true
+        }
+      }
     },
     "@babel/code-frame": {
       "version": "7.23.5",
@@ -7438,11 +7502,24 @@
       "dev": true
     },
     "@cdklabs/generative-ai-cdk-constructs": {
-      "version": "0.1.74",
-      "resolved": "https://registry.npmjs.org/@cdklabs/generative-ai-cdk-constructs/-/generative-ai-cdk-constructs-0.1.74.tgz",
-      "integrity": "sha512-nOa9tZsHSy5ibgLaik5jol0kbt4Qb2pnP7JbEPkYdkAQMq/zeIEcylllBpXvm7spCJdmT1coyYWlynncv17p3Q==",
+      "version": "0.1.296",
+      "resolved": "https://registry.npmjs.org/@cdklabs/generative-ai-cdk-constructs/-/generative-ai-cdk-constructs-0.1.296.tgz",
+      "integrity": "sha512-7GHdcwI7IFpzSBvW5YVLqelpnGlbIsu5f0UQjVG4VhoAjSxHFzAXOo8WM9LFUj9IH+jrLJAO48p2fvxHxVRUig==",
       "requires": {
-        "cdk-nag": "^2.28.46"
+        "@aws-cdk/aws-lambda-python-alpha": "2.181.1-alpha.0",
+        "cdk-nag": "^2.35.36",
+        "deepmerge": "^4.3.1"
+      },
+      "dependencies": {
+        "@aws-cdk/aws-lambda-python-alpha": {
+          "version": "2.181.1-alpha.0",
+          "bundled": true,
+          "requires": {}
+        },
+        "deepmerge": {
+          "version": "4.3.1",
+          "bundled": true
+        }
       }
     },
     "@colors/colors": {
@@ -8406,23 +8483,23 @@
       }
     },
     "aws-cdk-lib": {
-      "version": "2.130.0",
-      "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.130.0.tgz",
-      "integrity": "sha512-yK7ibePipdjlI4AFM94fwwtsCkmpWJ0JFZTMPahahC/3Pxe/BA/nnI/4Namvl5QPxW5QlU0xQYU7cywioq3RQg==",
+      "version": "2.182.0",
+      "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.182.0.tgz",
+      "integrity": "sha512-emymzTJiCpPz8oF++oiFvFuLH1QZjv6NRNQGn7VuDrEewZFTM4VpiVco5NrxH+KCWnXquDBPF5sQIUo6HY7jLg==",
       "requires": {
-        "@aws-cdk/asset-awscli-v1": "^2.2.202",
-        "@aws-cdk/asset-kubectl-v20": "^2.1.2",
-        "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1",
+        "@aws-cdk/asset-awscli-v1": "^2.2.208",
+        "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0",
+        "@aws-cdk/cloud-assembly-schema": "^40.6.0",
         "@balena/dockerignore": "^1.0.2",
         "case": "1.6.3",
         "fs-extra": "^11.2.0",
-        "ignore": "^5.3.1",
+        "ignore": "^5.3.2",
         "jsonschema": "^1.4.1",
         "mime-types": "^2.1.35",
         "minimatch": "^3.1.2",
         "punycode": "^2.3.1",
-        "semver": "^7.6.0",
-        "table": "^6.8.1",
+        "semver": "^7.6.3",
+        "table": "^6.8.2",
         "yaml": "1.10.2"
       },
       "dependencies": {
@@ -8431,13 +8508,13 @@
           "bundled": true
         },
         "ajv": {
-          "version": "8.12.0",
+          "version": "8.17.1",
           "bundled": true,
           "requires": {
-            "fast-deep-equal": "^3.1.1",
+            "fast-deep-equal": "^3.1.3",
+            "fast-uri": "^3.0.1",
             "json-schema-traverse": "^1.0.0",
-            "require-from-string": "^2.0.2",
-            "uri-js": "^4.2.2"
+            "require-from-string": "^2.0.2"
           }
         },
         "ansi-regex": {
@@ -8494,8 +8571,12 @@
           "version": "3.1.3",
           "bundled": true
         },
+        "fast-uri": {
+          "version": "3.0.6",
+          "bundled": true
+        },
         "fs-extra": {
-          "version": "11.2.0",
+          "version": "11.3.0",
           "bundled": true,
           "requires": {
             "graceful-fs": "^4.2.0",
@@ -8508,7 +8589,7 @@
           "bundled": true
         },
         "ignore": {
-          "version": "5.3.1",
+          "version": "5.3.2",
           "bundled": true
         },
         "is-fullwidth-code-point": {
@@ -8528,20 +8609,13 @@
           }
         },
         "jsonschema": {
-          "version": "1.4.1",
+          "version": "1.5.0",
           "bundled": true
         },
         "lodash.truncate": {
           "version": "4.4.2",
           "bundled": true
         },
-        "lru-cache": {
-          "version": "6.0.0",
-          "bundled": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
         "mime-db": {
           "version": "1.52.0",
           "bundled": true
@@ -8569,11 +8643,8 @@
           "bundled": true
         },
         "semver": {
-          "version": "7.6.0",
-          "bundled": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
+          "version": "7.6.3",
+          "bundled": true
         },
         "slice-ansi": {
           "version": "4.0.0",
@@ -8601,7 +8672,7 @@
           }
         },
         "table": {
-          "version": "6.8.1",
+          "version": "6.9.0",
           "bundled": true,
           "requires": {
             "ajv": "^8.0.1",
@@ -8615,17 +8686,6 @@
           "version": "2.0.1",
           "bundled": true
         },
-        "uri-js": {
-          "version": "4.4.1",
-          "bundled": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "bundled": true
-        },
         "yaml": {
           "version": "1.10.2",
           "bundled": true
@@ -8882,9 +8942,9 @@
       "dev": true
     },
     "cdk-nag": {
-      "version": "2.28.55",
-      "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.28.55.tgz",
-      "integrity": "sha512-ETdEB6zFQqxVrWXMZSI3c3EoMNOp919pdYsb11zlZyyfS99mgKf9wdXHpBWYu2gY+efxXktWj7HLoPU6g1sxrQ==",
+      "version": "2.35.40",
+      "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.35.40.tgz",
+      "integrity": "sha512-S2zo25FTYLNY7uHRFKT4Hlapf8kGuTe9b/MIIxY5PXV76ZeCjhii6AsaV2hhIPx983ckbvv8cnjINoJATpKmcA==",
       "requires": {}
     },
     "chalk": {
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json b/modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json
index 5e73c630..b77c174b 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json
@@ -29,8 +29,8 @@
     "@typescript-eslint/parser": "^6.21.0"
   },
   "dependencies": {
-    "@cdklabs/generative-ai-cdk-constructs": "^0.1.74",
-    "aws-cdk-lib": "^2.130.0",
+    "@cdklabs/generative-ai-cdk-constructs": "^0.1.296",
+    "aws-cdk-lib": "^2.181.1",
     "constructs": "^10.3.0",
     "source-map-support": "^0.5.21"
   }
diff --git a/modules/fmops/sagemaker-jumpstart-fm-endpoint/test/sagemaker-fm-endpoint.test.ts b/modules/fmops/sagemaker-jumpstart-fm-endpoint/test/sagemaker-fm-endpoint.test.ts
index c6c394c4..4f19fdd9 100644
--- a/modules/fmops/sagemaker-jumpstart-fm-endpoint/test/sagemaker-fm-endpoint.test.ts
+++ b/modules/fmops/sagemaker-jumpstart-fm-endpoint/test/sagemaker-fm-endpoint.test.ts
@@ -8,6 +8,7 @@ describe("Sagemaker JumpStart Fm Endpoint Stack", () => {
   const projectName = "mlops";
   const deploymentName = "platform";
   const moduleName = "fm-endpoint";
+  const endpointName = "endpoint";
   const jumpStartModelName = "HUGGINGFACE_LLM_MISTRAL_7B_2_1_0";
   const instanceType = "ml.g5.2xlarge";
   const vpcId = "vpc-123";
@@ -19,6 +20,7 @@ describe("Sagemaker JumpStart Fm Endpoint Stack", () => {
     projectName,
     deploymentName,
     moduleName,
+    endpointName,
     jumpStartModelName,
     instanceType,
     vpcId,


Reviews:
user: login: EthanBunce
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T16:05:28Z
user: login: kukushking
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T16:21:52Z
user: login: EthanBunce
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T16:50:02Z

Review comments:
diff_hunk: @@ -29,8 +29,9 @@
     "@typescript-eslint/parser": "^6.21.0"
   },
   "dependencies": {
-    "@cdklabs/generative-ai-cdk-constructs": "^0.1.74",
-    "aws-cdk-lib": "^2.130.0",
+    "@cdklabs/generative-ai-cdk-constructs": "^0.1.296",
+    "aws-cdk": "^2",
path: modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json
user: login: EthanBunce
body: Should this be pinned to 2.1003.0 to match the version in the deployspec, or does it not matter?
created_at: 2025-03-10T16:05:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -29,8 +29,9 @@
     "@typescript-eslint/parser": "^6.21.0"
   },
   "dependencies": {
-    "@cdklabs/generative-ai-cdk-constructs": "^0.1.74",
-    "aws-cdk-lib": "^2.130.0",
+    "@cdklabs/generative-ai-cdk-constructs": "^0.1.296",
+    "aws-cdk": "^2",
path: modules/fmops/sagemaker-jumpstart-fm-endpoint/package.json
user: login: kukushking
body: this is cli, does not really matter, in fact we don't need it here. updated!
created_at: 2025-03-10T16:21:52Z
author_association: CONTRIBUTOR

PR comments:
user: login: malachi-constant
created_at: 2025-03-09T18:38:24Z
body: 
### AWS CodeBuild CI Report

* CodeBuild project: AIOpsModuleTestsInfrastruct-doMLXEYsnmxr
* Commit ID: 3706dbd46132699f1841d6bd32f114c61dee9fcf
* Result: SUCCEEDED
* [Build Logs](https://ythfngxmh6.execute-api.us-west-2.amazonaws.com/Prod/buildlogs?key=12c3a3a8-657f-446f-b03a-9b0501317574%2Fbuild.log) (available for 30 days)

*Powered by [github-codebuild-logs](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:277187709615:applications~github-codebuild-logs), available on the [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/)*


<!--
CREATED BY GITHUB-CODEBUILD-LOGS
-->


author_association: CONTRIBUTOR
user: login: malachi-constant
created_at: 2025-03-10T11:25:49Z
body: 
### AWS CodeBuild CI Report

* CodeBuild project: AIOpsModuleTestsInfrastruct-doMLXEYsnmxr
* Commit ID: f2c35ded25fd3cc5c18245c56d8d95c535f5a018
* Result: SUCCEEDED
* [Build Logs](https://ythfngxmh6.execute-api.us-west-2.amazonaws.com/Prod/buildlogs?key=32f91a88-ac6d-4352-af6b-5427b48def8f%2Fbuild.log) (available for 30 days)

*Powered by [github-codebuild-logs](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:277187709615:applications~github-codebuild-logs), available on the [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/)*


<!--
CREATED BY GITHUB-CODEBUILD-LOGS
-->


author_association: CONTRIBUTOR
user: login: malachi-constant
created_at: 2025-03-10T16:21:47Z
body: 
### AWS CodeBuild CI Report

* CodeBuild project: AIOpsModuleTestsInfrastruct-doMLXEYsnmxr
* Commit ID: 4c5f72b990bf3fb615f6f31980a89263fb8e29c4
* Result: SUCCEEDED
* [Build Logs](https://ythfngxmh6.execute-api.us-west-2.amazonaws.com/Prod/buildlogs?key=760864f8-10f0-4337-96af-ff64edfb9532%2Fbuild.log) (available for 30 days)

*Powered by [github-codebuild-logs](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:277187709615:applications~github-codebuild-logs), available on the [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/)*


<!--
CREATED BY GITHUB-CODEBUILD-LOGS
-->


author_association: CONTRIBUTOR