@@ -6,6 +6,12 @@ ARG ENV_IN_FILENAME
66ARG PINNED_ENV_IN_FILENAME
77ARG ARG_BASED_ENV_IN_FILENAME
88ARG IMAGE_VERSION
9+
10+ # Amazon Q Agentic Chat version - update this default value when needed
11+ ARG FLARE_SERVER_VERSION_JL=1.25.0
12+ # IDE type for Amazon Q integration
13+ ARG AMAZON_Q_IDE_TYPE=jupyterlab
14+
915LABEL "org.amazon.sagemaker-distribution.image.version" =$IMAGE_VERSION
1016
1117ARG AMZN_BASE="/opt/amazon/sagemaker"
@@ -49,6 +55,8 @@ ENV MAMBA_USER=$NB_USER
4955ENV USER=$NB_USER
5056
5157COPY aws-cli-public-key.asc /tmp/
58+ COPY extract_amazon_q_agentic_chat_urls.py /tmp/
59+ COPY download_amazon_q_agentic_chat_artifacts.sh /tmp/
5260
5361RUN apt-get update && apt-get upgrade -y && \
5462 apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less mandoc jq ca-certificates gnupg && \
@@ -73,11 +81,10 @@ RUN apt-get update && apt-get upgrade -y && \
7381 unzip q.zip && \
7482 Q_INSTALL_GLOBAL=true ./q/install.sh --no-confirm && \
7583 rm -rf q q.zip && \
76- : && \
7784 echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile && \
7885# CodeEditor - create server, user data dirs
79- mkdir -p /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data \
80- && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data && \
86+ mkdir -p /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data /opt/amazon/sagemaker/sagemaker- code-editor-user-data \
87+ && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data /opt/amazon/sagemaker/sagemaker- code-editor-user-data && \
8188# create dir to store user data files
8289 mkdir -p /opt/amazon/sagemaker/user-data \
8390 && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/user-data && \
@@ -87,11 +94,15 @@ COPY dirs/ ${DIRECTORY_TREE_STAGE_DIR}/
8794RUN rsync -a ${DIRECTORY_TREE_STAGE_DIR}/ / && \
8895 rm -rf ${DIRECTORY_TREE_STAGE_DIR} && \
8996# CodeEditor - download the extensions
90- mkdir -p /etc/code-editor/extensions && \
97+ mkdir -p /etc/code-editor/extensions /etc/code-editor/extensions-sagemaker-ui && \
9198 while IFS= read -r url || [ -n "$url" ]; do \
9299 echo "Downloading extension from ${url}..." && \
93100 wget --no-check-certificate -P /etc/code-editor/extensions "${url}" ; \
94101 done < /etc/code-editor/extensions.txt
102+ while IFS= read -r url || [ -n "$url" ]; do \
103+ echo "Downloading sagemaker-ui extension from ${url}..." && \
104+ wget --no-check-certificate -P /etc/code-editor/extensions-sagemaker-ui "${url}" ; \
105+ done < /etc/code-editor/extensions-sagemaker-ui.txt
95106
96107USER $MAMBA_USER
97108COPY --chown=$MAMBA_USER:$MAMBA_USER $ENV_IN_FILENAME *.in /tmp/
@@ -121,6 +132,13 @@ RUN if [[ -z $ARG_BASED_ENV_IN_FILENAME ]] ; \
121132 find /opt/conda -name "yarn.lock" -type f -delete && \
122133 rm -rf /tmp/*.in && \
123134 sudo ln -s $(which python3) /usr/bin/python && \
135+ # Download shared web client libraries
136+ sudo mkdir -p /etc/web-client/libs && \
137+ sudo curl -L --retry 3 --retry-delay 5 --fail "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js" -o "/etc/web-client/libs/jszip.min.js" || (echo "Failed to download JSZip library" && exit 1) && \
138+ # Download Amazon Q Agentic Chat artifacts for JupyterLab integration
139+ bash /tmp/download_amazon_q_agentic_chat_artifacts.sh $FLARE_SERVER_VERSION_JL /etc/amazon-q-agentic-chat/artifacts/$AMAZON_Q_IDE_TYPE $AMAZON_Q_IDE_TYPE && \
140+ # Fix ownership for JupyterLab access
141+ sudo chown -R $MAMBA_USER:$MAMBA_USER /etc/amazon-q-agentic-chat/ /etc/web-client/ && \
124142 # Update npm version
125143 npm i -g npm && \
126144 # Enforce to use `conda-forge` as only channel, by removing `defaults`
@@ -133,9 +151,17 @@ RUN if [[ -z $ARG_BASED_ENV_IN_FILENAME ]] ; \
133151 echo "Installing extension ${ext}..." ; \
134152 sagemaker-code-editor --install-extension "${ext}" --extensions-dir "${extensionloc}" --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data; \
135153 done \
154+ # Install sagemaker-ui extensions
155+ && extensionloc_ui=/opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data/extensions && mkdir -p "${extensionloc_ui}" \
156+ && for ext in /etc/code-editor/extensions-sagemaker-ui/*.vsix; do \
157+ echo "Installing sagemaker-ui extension ${ext}..." ; \
158+ sagemaker-code-editor --install-extension "${ext}" --extensions-dir "${extensionloc_ui}" --server-data-dir /opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data; \
159+ done \
136160 # Copy the settings
137161 && cp /etc/code-editor/code_editor_machine_settings.json /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/Machine/settings.json && \
138162 cp /etc/code-editor/code_editor_user_settings.json /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/User/settings.json && \
163+ cp /etc/code-editor/code_editor_machine_settings.json /opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data/data/Machine/settings.json && \
164+ cp /etc/code-editor/code_editor_user_settings.json /opt/amazon/sagemaker/sagemaker-ui-code-editor-server-data/data/User/settings.json && \
139165 # Install glue kernels, and move to shared directory
140166 # Also patching base kernel so Studio background code doesn't start session silently
141167 install-glue-kernels && \
0 commit comments