From 65a8f9d9357ff42b0d94252017eeb53c9dc6bb73 Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 11:00:32 +0530 Subject: [PATCH 01/17] Test PR for ppc64le hermetic build Signed-off-by: Varad --- ...i-nemo-guardrails-server-pull-request.yaml | 25 +++- .../requirements-devpi-index.txt | 7 + .../requirements-rhoai-3.4-index.txt | 19 +++ .../requirements-sdist-build.txt | 22 ++++ ppc64le-requirements/requirements.txt | 123 ++++++++++++++++++ rpms.in.yaml | 9 ++ rpms.lock.yaml | 8 ++ ubi.repo | 62 +++++++++ 8 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 ppc64le-requirements/requirements-devpi-index.txt create mode 100644 ppc64le-requirements/requirements-rhoai-3.4-index.txt create mode 100644 ppc64le-requirements/requirements-sdist-build.txt create mode 100644 ppc64le-requirements/requirements.txt create mode 100644 rpms.in.yaml create mode 100644 rpms.lock.yaml create mode 100644 ubi.repo diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index 21790731a8..5512cf8fd6 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -45,9 +45,30 @@ spec: - linux/ppc64le - name: prefetch-input value: | - [{"type": "generic", "path": "."}] + [ + { + "type": "pip", + "path": ".", + "requirements_files": [ + "ppc64le-requirements/requirements-rhoai-3.4-index.txt", + "ppc64le-requirements/requirements.txt" + ], + "requirements_build_files": [ + "ppc64le-requirements/requirements-sdist-build.txt" + ], + "allow_binary": "true" + }, + { + "type": "rpm", + "path": ". + }, + { + "type": "generic", + "path": "." + } + ] - name: hermetic - value: false + value: true - name: enable-slack-failure-notification value: "false" - name: path-context diff --git a/ppc64le-requirements/requirements-devpi-index.txt b/ppc64le-requirements/requirements-devpi-index.txt new file mode 100644 index 0000000000..252eb03881 --- /dev/null +++ b/ppc64le-requirements/requirements-devpi-index.txt @@ -0,0 +1,7 @@ +# blis==1.3.0 +# presidio_analyzer==2.2.359 +# spacy==3.8.7 +# thinc==8.3.6 +# hf-xet==1.1.10 +# onnxruntime==1.22.1 +# torch==2.9.0 diff --git a/ppc64le-requirements/requirements-rhoai-3.4-index.txt b/ppc64le-requirements/requirements-rhoai-3.4-index.txt new file mode 100644 index 0000000000..68642bdcc0 --- /dev/null +++ b/ppc64le-requirements/requirements-rhoai-3.4-index.txt @@ -0,0 +1,19 @@ +--index-url https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple + +annoy==1.17.3 +fastembed==0.6.0 +grpcio==1.80.0 +langchain-openai==0.3.35 +scikit-learn==1.7.2 +scipy==1.16.3 +tiktoken==0.12.0 +confection==0.1.5 +fasttext-predict==0.9.2.4 +Jinja2==3.1.6 +langchain==0.3.27 +langchain-core==0.3.83 +langchain-nvidia-ai-endpoints==0.3.19 +langchain-text-splitters==0.3.11 +pillow==11.3.0 +py_rust_stemmers==0.1.5 +yara-python==4.5.4 \ No newline at end of file diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt new file mode 100644 index 0000000000..cb253dd3f5 --- /dev/null +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -0,0 +1,22 @@ +cryptography==44.0.3 +cymem==2.0.11 +huggingface-hub==0.35.1 +langchain-community==0.3.29 +langcodes==3.5.0 +language_data==1.3.0 +marisa-trie==1.3.1 +MarkupSafe==3.0.2 +murmurhash==1.0.13 +numpy==2.3.3 +pandas==2.3.1 +preshed==3.0.10 +presidio_anonymizer==2.2.359 +PyYAML==6.0.2 +srsly==2.5.1 +tokenizers==0.22.1 +transformers==4.57.1 +weasel==0.4.1 +opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 +opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 +#sentence-transformers==5.1.2. # requires torch==1.80.0 +# presidio_analyzer==2.2.359 diff --git a/ppc64le-requirements/requirements.txt b/ppc64le-requirements/requirements.txt new file mode 100644 index 0000000000..d974d01d55 --- /dev/null +++ b/ppc64le-requirements/requirements.txt @@ -0,0 +1,123 @@ +aiofiles==25.1.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-retry==2.9.1 +aiosignal==1.4.0 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.11.0 +asgiref==3.11.1 +attrs==25.3.0 +catalogue==2.0.10 +certifi==2025.8.3 +cffi==1.17.1 +charset-normalizer==3.4.3 +click==8.1.8 +cloudpathlib==0.22.0 +coloredlogs==15.0.1 +colorlog==6.10.1 +Cython==3.2.4 +dataclasses-json==0.6.7 +distro==1.9.0 +einops==0.8.1 +fastapi==0.122.0 +filelock==3.19.1 +filetype==1.2.0 +flatbuffers==25.2.10 +frozenlist==1.7.0 +fsspec==2025.9.0 +googleapis-common-protos==1.74.0 +greenlet==3.4.0 +h11==0.16.0 +httpcore==1.0.9 +httpx==0.28.1 +httpx-sse==0.4.1 +humanfriendly==10.0 +idna==3.10 +importlib_metadata==8.7.0 +jiter==0.10.0 +joblib==1.5.2 +jsonpatch==1.33 +jsonpointer==3.0.0 +langsmith==0.4.30 +lark==1.3.0 +loguru==0.7.3 +markdown-it-py==3.0.0 +marshmallow==3.26.1 +mdurl==0.1.2 +meson==1.9.2 +meson-python==0.19.0 +mmh3==5.2.0 +mpmath==1.3.0 +multidict==6.6.4 +mypy_extensions==1.1.0 +nest-asyncio==1.6.0 +networkx==3.5 +ninja==1.13.0 +nltk==3.9.2 +openai==2.21.0 +opentelemetry-api==1.38.0 +opentelemetry-distro==0.59b0 +opentelemetry-exporter-otlp-proto-common==1.38.0 +opentelemetry-exporter-otlp-proto-http==1.38.0 +opentelemetry-instrumentation==0.59b0 +opentelemetry-instrumentation-asgi==0.59b0 +opentelemetry-instrumentation-fastapi==0.59b0 +opentelemetry-instrumentation-httpx==0.59b0 +opentelemetry-proto==1.38.0 +opentelemetry-sdk==1.38.0 +opentelemetry-semantic-conventions==0.59b0 +opentelemetry-util-http==0.59b0 +orjson==3.11.3 +packaging==25.0 +phonenumbers==9.0.10 +prompt_toolkit==3.0.52 +propcache==0.3.2 +protobuf==6.32.1 +pycparser==2.22 +pydantic==2.11.9 +pydantic-settings==2.10.1 +pydantic_core==2.33.2 +Pygments==2.19.2 +pyproject-metadata==0.11.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.1.1 +pytz==2025.2 +regex==2025.9.18 +requests==2.32.5 +requests-file==2.1.0 +requests-toolbelt==1.0.0 +rich==14.1.0 +robust-downloader==0.0.2 +safetensors==0.6.2 +setuptools==80.9.0 +shellingham==1.5.4 +simpleeval==1.0.3 +six==1.17.0 +smart_open==7.3.1 +sniffio==1.3.1 +spacy-legacy==3.0.12 +spacy-loggers==1.0.5 +SQLAlchemy==2.0.43 +starlette==0.50.0 +sympy==1.14.0 +tenacity==9.1.2 +threadpoolctl==3.6.0 +tldextract==5.3.0 +tqdm==4.67.1 +typer==0.19.2 +typing-inspect==0.9.0 +typing-inspection==0.4.1 +typing_extensions==4.15.0 +tzdata==2025.2 +urllib3==2.5.0 +uuid_utils==0.14.0 +uvicorn==0.37.0 +versioneer==0.29 +wasabi==1.1.3 +watchdog==6.0.0 +wcwidth==0.2.14 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 +zstandard==0.25.0 \ No newline at end of file diff --git a/rpms.in.yaml b/rpms.in.yaml new file mode 100644 index 0000000000..68317b6cb0 --- /dev/null +++ b/rpms.in.yaml @@ -0,0 +1,9 @@ +arches: + - ppc64le +contentOrigin: + repofiles: + - ubi.repo +packages: + - unzip +context: + containerfile: Dockerfile.konflux diff --git a/rpms.lock.yaml b/rpms.lock.yaml new file mode 100644 index 0000000000..148f75fd68 --- /dev/null +++ b/rpms.lock.yaml @@ -0,0 +1,8 @@ +--- +lockfileVersion: 1 +lockfileVendor: redhat +arches: + - arch: ppc64le + packages: [] + source: [] + module_metadata: [] diff --git a/ubi.repo b/ubi.repo new file mode 100644 index 0000000000..984f297683 --- /dev/null +++ b/ubi.repo @@ -0,0 +1,62 @@ +[ubi-9-for-$basearch-baseos-rpms] +name = Red Hat Universal Base Image 9 (RPMs) - BaseOS +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/baseos/os +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[ubi-9-for-$basearch-baseos-debug-rpms] +name = Red Hat Universal Base Image 9 (Debug RPMs) - BaseOS +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/baseos/debug +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[ubi-9-for-$basearch-baseos-source-rpms] +name = Red Hat Universal Base Image 9 (Source RPMs) - BaseOS +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/baseos/source/SRPMS +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[ubi-9-for-$basearch-appstream-rpms] +name = Red Hat Universal Base Image 9 (RPMs) - AppStream +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/appstream/os +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[ubi-9-for-$basearch-appstream-debug-rpms] +name = Red Hat Universal Base Image 9 (Debug RPMs) - AppStream +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/appstream/debug +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[ubi-9-for-$basearch-appstream-source-rpms] +name = Red Hat Universal Base Image 9 (Source RPMs) - AppStream +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/appstream/source/SRPMS +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[codeready-builder-for-ubi-9-$basearch-rpms] +name = Red Hat Universal Base Image 9 (RPMs) - CodeReady Builder +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/codeready-builder/os +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[codeready-builder-for-ubi-9-$basearch-debug-rpms] +name = Red Hat Universal Base Image 9 (Debug RPMs) - CodeReady Builder +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/codeready-builder/debug +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 + +[codeready-builder-for-ubi-9-$basearch-source-rpms] +name = Red Hat Universal Base Image 9 (Source RPMs) - CodeReady Builder +baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/$basearch/codeready-builder/source/SRPMS +enabled = 1 +gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release +gpgcheck = 1 From e2fd135f3f7947ec7e076a6948d37f8d04207917 Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 11:07:42 +0530 Subject: [PATCH 02/17] Test PR for ppc64le hermetic build Signed-off-by: Varad --- .tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index 5512cf8fd6..07cb755a0c 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -60,7 +60,7 @@ spec: }, { "type": "rpm", - "path": ". + "path": "." }, { "type": "generic", From 2b66a174acb2a03d6636d5a8697c9898e2ae1817 Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 11:30:58 +0530 Subject: [PATCH 03/17] Test PR for ppc64le hermetic build Signed-off-by: Varad --- ppc64le-requirements/requirements-rhoai-3.4-index.txt | 2 +- ppc64le-requirements/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ppc64le-requirements/requirements-rhoai-3.4-index.txt b/ppc64le-requirements/requirements-rhoai-3.4-index.txt index 68642bdcc0..e4eb106b5c 100644 --- a/ppc64le-requirements/requirements-rhoai-3.4-index.txt +++ b/ppc64le-requirements/requirements-rhoai-3.4-index.txt @@ -16,4 +16,4 @@ langchain-nvidia-ai-endpoints==0.3.19 langchain-text-splitters==0.3.11 pillow==11.3.0 py_rust_stemmers==0.1.5 -yara-python==4.5.4 \ No newline at end of file +yara-python==4.5.4 diff --git a/ppc64le-requirements/requirements.txt b/ppc64le-requirements/requirements.txt index d974d01d55..ed7ecbc121 100644 --- a/ppc64le-requirements/requirements.txt +++ b/ppc64le-requirements/requirements.txt @@ -120,4 +120,4 @@ wcwidth==0.2.14 wrapt==1.17.3 yarl==1.20.1 zipp==3.23.0 -zstandard==0.25.0 \ No newline at end of file +zstandard==0.25.0 From f58328de31e4e400bae5d654a2c61edfafd2e5b3 Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 11:42:12 +0530 Subject: [PATCH 04/17] Test PR for ppc64le hermetic build Signed-off-by: Varad --- ...i-nemo-guardrails-server-pull-request.yaml | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index 07cb755a0c..20db9f2678 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -3,9 +3,9 @@ kind: PipelineRun metadata: annotations: build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/NeMo-Guardrails?rev={{revision}} - build.appstudio.redhat.com/commit_sha: '{{revision}}' - build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' - build.appstudio.redhat.com/target_branch: '{{target_branch}}' + build.appstudio.redhat.com/commit_sha: "{{revision}}" + build.appstudio.redhat.com/pull_request_number: "{{pull_request_number}}" + build.appstudio.redhat.com/target_branch: "{{target_branch}}" pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-comment: "^/build-konflux" @@ -45,28 +45,28 @@ spec: - linux/ppc64le - name: prefetch-input value: | - [ - { - "type": "pip", - "path": ".", - "requirements_files": [ - "ppc64le-requirements/requirements-rhoai-3.4-index.txt", - "ppc64le-requirements/requirements.txt" - ], - "requirements_build_files": [ - "ppc64le-requirements/requirements-sdist-build.txt" - ], - "allow_binary": "true" - }, - { - "type": "rpm", - "path": "." - }, - { - "type": "generic", - "path": "." - } - ] + [ + { + "type": "pip", + "path": ".", + "requirements_files": [ + "ppc64le-requirements/requirements-rhoai-3.4-index.txt", + "ppc64le-requirements/requirements.txt" + ], + "requirements_build_files": [ + "ppc64le-requirements/requirements-sdist-build.txt" + ], + "allow_binary": "true" + }, + { + "type": "rpm", + "path": "." + }, + { + "type": "generic", + "path": "." + } + ] - name: hermetic value: true - name: enable-slack-failure-notification From c8065af941d3282a397222ce673416669cd2481a Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 12:24:33 +0530 Subject: [PATCH 05/17] test Signed-off-by: Varad --- ...i-nemo-guardrails-server-pull-request.yaml | 3 +- Dockerfile.konflux | 186 +----------------- ppc64le-requirements/requirements.txt | 2 +- 3 files changed, 5 insertions(+), 186 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index 20db9f2678..fdc1491411 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -56,7 +56,8 @@ spec: "requirements_build_files": [ "ppc64le-requirements/requirements-sdist-build.txt" ], - "allow_binary": "true" + "allow_binary": "true", + "skip_cargo_vendor": "true" }, { "type": "rpm", diff --git a/Dockerfile.konflux b/Dockerfile.konflux index d76a62985a..c136fd3076 100644 --- a/Dockerfile.konflux +++ b/Dockerfile.konflux @@ -1,165 +1,12 @@ -############################################################### -# Stage 1 Base builder image with common tooling -############################################################### -FROM registry.access.redhat.com/ubi9/python-312@sha256:21739f35258f21e23a7e02e79c763f2a69e605416fedd54b6ec9c5ef68fd1f43 as packages-build +FROM registry.access.redhat.com/ubi9/python-312@sha256:0abad955c2c2e4575dc8987d76b8c49a7dd8e0679063e3118dab03c54528232f as build -USER root +USER 0 WORKDIR /app -ENV PATH="$HOME/.cargo/bin:$PATH" -ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ -ARG TARGETARCH - -# Install dependencies -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - dnf install -y \ - make libtool wget patch ninja-build cmake xz bzip2-devel libffi-devel zlib-devel openssl-devel libevent-devel \ - python3.12 python3.12-devel python3.12-pip clang \ - gcc-toolset-14-gcc gcc-toolset-14-gcc-c++ gcc-toolset-14-gcc-gfortran skopeo && \ - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ - dnf clean all && \ - pip install --upgrade setuptools-rust pip 'cmake<4' setuptools wheel maturin ; \ - fi - COPY requirements* /app/ -# Create a dummy file to trigger build dependency -RUN touch /tmp/control - -############################################################### -# Stage 2 to build OpenBLAS -############################################################### - -FROM packages-build AS openblas-builder -ENV OPENBLAS_VERSION=0.3.30 -ARG TARGETARCH - -WORKDIR /app - -# Creating a directory for OpenBlas -RUN mkdir /tmp/openblas - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-14/enable && \ - wget https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip && \ - unzip OpenBLAS-${OPENBLAS_VERSION}.zip -d /tmp/ && mv -T /tmp/OpenBLAS-${OPENBLAS_VERSION} /tmp/openblas && \ - cd /tmp/openblas && \ - make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0 ; \ - fi - -############################################################### -# Stage 3 to build pyTorch -############################################################### - -FROM packages-build AS torch-builder -USER root - -WORKDIR /app - -ARG MAX_JOBS -ARG _GLIBCXX_USE_CXX11_ABI=1 -ARG TARGETARCH - -RUN mkdir -p /torchwheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export TORCH_VERSION=$(sed -n "s/^torch==//p" /app/requirements-torch.in) && \ - source /opt/rh/gcc-toolset-14/enable && \ - git clone --recursive https://github.com/pytorch/pytorch.git -b v${TORCH_VERSION} && \ - cd pytorch && pip install -r requirements.txt && \ - rm -f dist/torch*+git*whl && \ - # Set MAX_JOBS to 2 or 4 to prevent OOM - # MAX_JOBS=4 \ - USE_NCCL=0 \ - BUILD_TEST=0 \ - PYTORCH_BUILD_VERSION=${TORCH_VERSION} \ - PYTORCH_BUILD_NUMBER=1 \ - pip wheel . --no-build-isolation --wheel-dir /torchwheels/ \ -; fi - -############################################################### -# Stage 4 to build Tiktoken -############################################################### - -FROM packages-build as tiktoken-builder -ARG TARGETARCH -WORKDIR /app - -RUN mkdir -p /tiktokenwheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export TIKTOKEN_VERSION=$(sed -n "s/^tiktoken==//p" /app/requirements.txt) && \ - source /opt/rh/gcc-toolset-14/enable && \ - git clone https://github.com/openai/tiktoken.git && \ - cd tiktoken && \ - git checkout ${TIKTOKEN_VERSION} && \ - pip wheel . --wheel-dir /tiktokenwheels ; \ - fi - -############################################################### -# Stage 5 to build onnxruntime -############################################################### -FROM packages-build AS onnxruntime-builder -ARG TARGETARCH -USER root - -WORKDIR /app - -ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib - -# copy built OpenBLAS sources -COPY --from=openblas-builder /tmp/openblas/ /build/openblas - -# Install OpenBLAS -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - PREFIX=/app/.openblas make -C /build/openblas install && \ - ln -sf /app/.openblas/lib/libopenblasp-r0.3.30.so /app/.openblas/lib/libopenblasp.so.0 ; \ - fi - -COPY scripts/build_onnxruntime.sh /build/build_onnxruntime.sh - -RUN mkdir -p /onnxruntime_wheels - -# Build onnxruntime -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export ONNXRUNTIME_VERSION=$(sed -n "s/^onnxruntime==//p" /app/requirements.txt) && \ - sh /build/build_onnxruntime.sh ; \ - fi - -############################################################### -# Stage 6 Install hf_xet from source ppc64le -############################################################### -FROM packages-build AS hf-xet-builder -ARG TARGETARCH -USER root - -WORKDIR /app -RUN mkdir -p /hf_xet_wheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export HF_XET_VERSION=$(sed -n "s/^hf-xet==//p" /app/requirements.txt) && \ - git clone https://github.com/huggingface/xet-core.git && \ - cd xet-core/hf_xet && git checkout v${HF_XET_VERSION} && \ - sed -i '/python-source = "python"/d' pyproject.toml && \ - maturin build --release --out /hf_xet_wheels ; \ - fi - -############################################################### -# Stage 7 Install all the dependencies -############################################################### - -FROM registry.access.redhat.com/ubi9/python-312@sha256:21739f35258f21e23a7e02e79c763f2a69e605416fedd54b6ec9c5ef68fd1f43 as build - -USER 0 -WORKDIR /app - ARG TARGETARCH ARG GUARDRAILS_PROFILE=opensource -ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib -ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/app/.openblas/lib/pkgconfig -ENV PATH="$HOME/.cargo/bin:/app/.venv/bin:$PATH" -ENV BLIS_ARCH=generic -ENV GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 COPY requirements.txt requirements-torch.txt pyproject.toml README.md ./ COPY nemoguardrails/ ./nemoguardrails/ @@ -180,35 +27,6 @@ ENV HF_HOME=/app/.cache/huggingface \ RUN python3 -m venv /app/.venv -# Copy OpenBLAS -COPY --from=openblas-builder /tmp/openblas/ /tmp/openblas - -# Dummy file to trigger build dependency -COPY --from=torch-builder /tmp/control /dev/null -COPY --from=tiktoken-builder /tmp/control /dev/null -COPY --from=onnxruntime-builder /tmp/control /dev/null -COPY --from=hf-xet-builder /tmp/control /dev/null - -RUN --mount=type=cache,from=torch-builder,source=/torchwheels/,target=/tmp/torchwheels/,ro \ - --mount=type=cache,from=tiktoken-builder,source=/tiktokenwheels/,target=/tmp/tiktokenwheels/,ro \ - --mount=type=cache,from=onnxruntime-builder,source=/onnxruntime_wheels/,target=/tmp/onnxruntime_wheels/,ro \ - --mount=type=cache,from=hf-xet-builder,source=/hf_xet_wheels/,target=/tmp/hf_xet_wheels/,ro \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - /app/.venv/bin/pip install \ - /tmp/torchwheels/*.whl \ - /tmp/tiktokenwheels/*.whl \ - /tmp/onnxruntime_wheels/*.whl \ - /tmp/hf_xet_wheels/*.whl && \ - PREFIX=/app/.openblas make -C /tmp/openblas install && rm -rf /tmp/openblas ; \ - fi - -# Temporary workaround for ppc64le with the pinned pandas version. Remove after upgrading pandas with v3.x -RUN if [ "$TARGETARCH" == "ppc64le" ]; then \ - export PANDAS_VERSION=$(sed -n "s/^pandas==//p" /app/requirements.txt) && \ - /app/.venv/bin/pip install --no-cache-dir "meson<1.10" meson-python ninja cython numpy versioneer[toml] packaging && \ - /app/.venv/bin/pip install --no-cache-dir --no-build-isolation pandas==${PANDAS_VERSION} ; \ - fi - RUN /app/.venv/bin/pip install --no-cache-dir -r requirements.txt && \ /app/.venv/bin/pip install --no-cache-dir --no-deps . && \ rm -rf /root/.cache/pip /tmp/* /var/tmp/* diff --git a/ppc64le-requirements/requirements.txt b/ppc64le-requirements/requirements.txt index ed7ecbc121..455d116f06 100644 --- a/ppc64le-requirements/requirements.txt +++ b/ppc64le-requirements/requirements.txt @@ -35,7 +35,7 @@ httpx-sse==0.4.1 humanfriendly==10.0 idna==3.10 importlib_metadata==8.7.0 -jiter==0.10.0 +jiter==0.10.0 --only-binary jiter joblib==1.5.2 jsonpatch==1.33 jsonpointer==3.0.0 From 06552a757d2e0d542c69de732f187d0c22eae0c4 Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 28 Apr 2026 13:22:16 +0530 Subject: [PATCH 06/17] test Signed-off-by: Varad --- .tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index fdc1491411..20db9f2678 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -56,8 +56,7 @@ spec: "requirements_build_files": [ "ppc64le-requirements/requirements-sdist-build.txt" ], - "allow_binary": "true", - "skip_cargo_vendor": "true" + "allow_binary": "true" }, { "type": "rpm", From fcb4cb999eb07fd08b34e87f5e711525930f0373 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 13:45:30 +0530 Subject: [PATCH 07/17] test Signed-off-by: Varad --- ...i-nemo-guardrails-server-pull-request.yaml | 122 +++++++-------- .../requirements-sdist-build.txt | 145 +++++++++++++++--- ppc64le-requirements/requirements.txt | 145 +++--------------- 3 files changed, 206 insertions(+), 206 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index 20db9f2678..aff1001432 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -21,74 +21,74 @@ metadata: namespace: rhoai-tenant spec: params: - - name: git-url - value: '{{source_url}}' - - name: revision - value: '{{revision}}' - - name: output-image - value: quay.io/rhoai/pull-request-pipelines:odh-trustyai-nemo-guardrails-server-rhel9-{{revision}} - - name: additional-tags - value: - - 'pr-{{pull_request_number}}-into-{{target_branch}}' - - name: additional-labels - value: - - version=on-pr-{{revision}} - - io.openshift.tags=odh-trustyai-nemo-guardrails-server - - name: image-expires-after - value: 5d - - name: dockerfile - value: Dockerfile.konflux - - name: build-platforms - value: - - linux/x86_64 - - linux-m2xlarge/arm64 - - linux/ppc64le - - name: prefetch-input - value: | - [ - { - "type": "pip", - "path": ".", - "requirements_files": [ - "ppc64le-requirements/requirements-rhoai-3.4-index.txt", - "ppc64le-requirements/requirements.txt" - ], - "requirements_build_files": [ - "ppc64le-requirements/requirements-sdist-build.txt" - ], - "allow_binary": "true" - }, - { - "type": "rpm", - "path": "." - }, - { - "type": "generic", - "path": "." - } - ] - - name: hermetic - value: true - - name: enable-slack-failure-notification - value: "false" - - name: path-context - value: . + - name: git-url + value: "{{source_url}}" + - name: revision + value: "{{revision}}" + - name: output-image + value: quay.io/rhoai/pull-request-pipelines:odh-trustyai-nemo-guardrails-server-rhel9-{{revision}} + - name: additional-tags + value: + - "pr-{{pull_request_number}}-into-{{target_branch}}" + - name: additional-labels + value: + - version=on-pr-{{revision}} + - io.openshift.tags=odh-trustyai-nemo-guardrails-server + - name: image-expires-after + value: 5d + - name: dockerfile + value: Dockerfile.konflux + - name: build-platforms + value: + - linux/x86_64 + - linux-m2xlarge/arm64 + - linux/ppc64le + - name: prefetch-input + value: | + [ + { + "type": "pip", + "path": ".", + "requirements_files": [ + "ppc64le-requirements/requirements.txt" + ], + "requirements_build_files": [ + "ppc64le-requirements/requirements-sdist-build.txt", + "ppc64le-requirements/requirements-rhoai-3.4-index.txt" + ], + "allow_binary": "true" + }, + { + "type": "rpm", + "path": "." + }, + { + "type": "generic", + "path": "." + } + ] + - name: hermetic + value: true + - name: enable-slack-failure-notification + value: "false" + - name: path-context + value: . timeouts: pipeline: 4h tasks: 2h pipelineRef: resolver: git params: - - name: url - value: https://github.com/red-hat-data-services/konflux-central.git - - name: revision - value: '{{ target_branch }}' - - name: pathInRepo - value: pipelines/multi-arch-container-build.yaml + - name: url + value: https://github.com/red-hat-data-services/konflux-central.git + - name: revision + value: "{{ target_branch }}" + - name: pathInRepo + value: pipelines/multi-arch-container-build.yaml taskRunTemplate: serviceAccountName: build-pipeline-pull-request-pipelines workspaces: - - name: git-auth - secret: - secretName: '{{ git_auth_secret }}' + - name: git-auth + secret: + secretName: "{{ git_auth_secret }}" status: {} diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt index cb253dd3f5..ed7ecbc121 100644 --- a/ppc64le-requirements/requirements-sdist-build.txt +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -1,22 +1,123 @@ -cryptography==44.0.3 -cymem==2.0.11 -huggingface-hub==0.35.1 -langchain-community==0.3.29 -langcodes==3.5.0 -language_data==1.3.0 -marisa-trie==1.3.1 -MarkupSafe==3.0.2 -murmurhash==1.0.13 -numpy==2.3.3 -pandas==2.3.1 -preshed==3.0.10 -presidio_anonymizer==2.2.359 -PyYAML==6.0.2 -srsly==2.5.1 -tokenizers==0.22.1 -transformers==4.57.1 -weasel==0.4.1 -opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 -opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 -#sentence-transformers==5.1.2. # requires torch==1.80.0 -# presidio_analyzer==2.2.359 +aiofiles==25.1.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-retry==2.9.1 +aiosignal==1.4.0 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.11.0 +asgiref==3.11.1 +attrs==25.3.0 +catalogue==2.0.10 +certifi==2025.8.3 +cffi==1.17.1 +charset-normalizer==3.4.3 +click==8.1.8 +cloudpathlib==0.22.0 +coloredlogs==15.0.1 +colorlog==6.10.1 +Cython==3.2.4 +dataclasses-json==0.6.7 +distro==1.9.0 +einops==0.8.1 +fastapi==0.122.0 +filelock==3.19.1 +filetype==1.2.0 +flatbuffers==25.2.10 +frozenlist==1.7.0 +fsspec==2025.9.0 +googleapis-common-protos==1.74.0 +greenlet==3.4.0 +h11==0.16.0 +httpcore==1.0.9 +httpx==0.28.1 +httpx-sse==0.4.1 +humanfriendly==10.0 +idna==3.10 +importlib_metadata==8.7.0 +jiter==0.10.0 +joblib==1.5.2 +jsonpatch==1.33 +jsonpointer==3.0.0 +langsmith==0.4.30 +lark==1.3.0 +loguru==0.7.3 +markdown-it-py==3.0.0 +marshmallow==3.26.1 +mdurl==0.1.2 +meson==1.9.2 +meson-python==0.19.0 +mmh3==5.2.0 +mpmath==1.3.0 +multidict==6.6.4 +mypy_extensions==1.1.0 +nest-asyncio==1.6.0 +networkx==3.5 +ninja==1.13.0 +nltk==3.9.2 +openai==2.21.0 +opentelemetry-api==1.38.0 +opentelemetry-distro==0.59b0 +opentelemetry-exporter-otlp-proto-common==1.38.0 +opentelemetry-exporter-otlp-proto-http==1.38.0 +opentelemetry-instrumentation==0.59b0 +opentelemetry-instrumentation-asgi==0.59b0 +opentelemetry-instrumentation-fastapi==0.59b0 +opentelemetry-instrumentation-httpx==0.59b0 +opentelemetry-proto==1.38.0 +opentelemetry-sdk==1.38.0 +opentelemetry-semantic-conventions==0.59b0 +opentelemetry-util-http==0.59b0 +orjson==3.11.3 +packaging==25.0 +phonenumbers==9.0.10 +prompt_toolkit==3.0.52 +propcache==0.3.2 +protobuf==6.32.1 +pycparser==2.22 +pydantic==2.11.9 +pydantic-settings==2.10.1 +pydantic_core==2.33.2 +Pygments==2.19.2 +pyproject-metadata==0.11.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.1.1 +pytz==2025.2 +regex==2025.9.18 +requests==2.32.5 +requests-file==2.1.0 +requests-toolbelt==1.0.0 +rich==14.1.0 +robust-downloader==0.0.2 +safetensors==0.6.2 +setuptools==80.9.0 +shellingham==1.5.4 +simpleeval==1.0.3 +six==1.17.0 +smart_open==7.3.1 +sniffio==1.3.1 +spacy-legacy==3.0.12 +spacy-loggers==1.0.5 +SQLAlchemy==2.0.43 +starlette==0.50.0 +sympy==1.14.0 +tenacity==9.1.2 +threadpoolctl==3.6.0 +tldextract==5.3.0 +tqdm==4.67.1 +typer==0.19.2 +typing-inspect==0.9.0 +typing-inspection==0.4.1 +typing_extensions==4.15.0 +tzdata==2025.2 +urllib3==2.5.0 +uuid_utils==0.14.0 +uvicorn==0.37.0 +versioneer==0.29 +wasabi==1.1.3 +watchdog==6.0.0 +wcwidth==0.2.14 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 +zstandard==0.25.0 diff --git a/ppc64le-requirements/requirements.txt b/ppc64le-requirements/requirements.txt index 455d116f06..c5478aa5c9 100644 --- a/ppc64le-requirements/requirements.txt +++ b/ppc64le-requirements/requirements.txt @@ -1,123 +1,22 @@ -aiofiles==25.1.0 -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-retry==2.9.1 -aiosignal==1.4.0 -annotated-doc==0.0.4 -annotated-types==0.7.0 -anyio==4.11.0 -asgiref==3.11.1 -attrs==25.3.0 -catalogue==2.0.10 -certifi==2025.8.3 -cffi==1.17.1 -charset-normalizer==3.4.3 -click==8.1.8 -cloudpathlib==0.22.0 -coloredlogs==15.0.1 -colorlog==6.10.1 -Cython==3.2.4 -dataclasses-json==0.6.7 -distro==1.9.0 -einops==0.8.1 -fastapi==0.122.0 -filelock==3.19.1 -filetype==1.2.0 -flatbuffers==25.2.10 -frozenlist==1.7.0 -fsspec==2025.9.0 -googleapis-common-protos==1.74.0 -greenlet==3.4.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.28.1 -httpx-sse==0.4.1 -humanfriendly==10.0 -idna==3.10 -importlib_metadata==8.7.0 -jiter==0.10.0 --only-binary jiter -joblib==1.5.2 -jsonpatch==1.33 -jsonpointer==3.0.0 -langsmith==0.4.30 -lark==1.3.0 -loguru==0.7.3 -markdown-it-py==3.0.0 -marshmallow==3.26.1 -mdurl==0.1.2 -meson==1.9.2 -meson-python==0.19.0 -mmh3==5.2.0 -mpmath==1.3.0 -multidict==6.6.4 -mypy_extensions==1.1.0 -nest-asyncio==1.6.0 -networkx==3.5 -ninja==1.13.0 -nltk==3.9.2 -openai==2.21.0 -opentelemetry-api==1.38.0 -opentelemetry-distro==0.59b0 -opentelemetry-exporter-otlp-proto-common==1.38.0 -opentelemetry-exporter-otlp-proto-http==1.38.0 -opentelemetry-instrumentation==0.59b0 -opentelemetry-instrumentation-asgi==0.59b0 -opentelemetry-instrumentation-fastapi==0.59b0 -opentelemetry-instrumentation-httpx==0.59b0 -opentelemetry-proto==1.38.0 -opentelemetry-sdk==1.38.0 -opentelemetry-semantic-conventions==0.59b0 -opentelemetry-util-http==0.59b0 -orjson==3.11.3 -packaging==25.0 -phonenumbers==9.0.10 -prompt_toolkit==3.0.52 -propcache==0.3.2 -protobuf==6.32.1 -pycparser==2.22 -pydantic==2.11.9 -pydantic-settings==2.10.1 -pydantic_core==2.33.2 -Pygments==2.19.2 -pyproject-metadata==0.11.0 -python-dateutil==2.9.0.post0 -python-dotenv==1.1.1 -pytz==2025.2 -regex==2025.9.18 -requests==2.32.5 -requests-file==2.1.0 -requests-toolbelt==1.0.0 -rich==14.1.0 -robust-downloader==0.0.2 -safetensors==0.6.2 -setuptools==80.9.0 -shellingham==1.5.4 -simpleeval==1.0.3 -six==1.17.0 -smart_open==7.3.1 -sniffio==1.3.1 -spacy-legacy==3.0.12 -spacy-loggers==1.0.5 -SQLAlchemy==2.0.43 -starlette==0.50.0 -sympy==1.14.0 -tenacity==9.1.2 -threadpoolctl==3.6.0 -tldextract==5.3.0 -tqdm==4.67.1 -typer==0.19.2 -typing-inspect==0.9.0 -typing-inspection==0.4.1 -typing_extensions==4.15.0 -tzdata==2025.2 -urllib3==2.5.0 -uuid_utils==0.14.0 -uvicorn==0.37.0 -versioneer==0.29 -wasabi==1.1.3 -watchdog==6.0.0 -wcwidth==0.2.14 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 -zstandard==0.25.0 +cryptography==44.0.3 +cymem==2.0.11 +huggingface-hub==0.35.1 +langchain-community==0.3.29 +langcodes==3.5.0 +language_data==1.3.0 +marisa-trie==1.3.1 +MarkupSafe==3.0.2 +murmurhash==1.0.13 +numpy==2.3.3 +pandas==2.3.1 +preshed==3.0.10 +presidio_anonymizer==2.2.359 +PyYAML==6.0.2 +srsly==2.5.1 +tokenizers==0.22.1 +transformers==4.57.1 +weasel==0.4.1 +opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 +opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 +#sentence-transformers==5.1.2. # requires torch==2.9.0 +# presidio_analyzer==2.2.359 From 6b9706a5c79756b4432738a9c4f2d19fbe5aa38a Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 13:46:53 +0530 Subject: [PATCH 08/17] temp dockerfile Signed-off-by: Varad --- Dockerfile.konflux | 186 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 184 insertions(+), 2 deletions(-) diff --git a/Dockerfile.konflux b/Dockerfile.konflux index c136fd3076..daf4fa9eff 100644 --- a/Dockerfile.konflux +++ b/Dockerfile.konflux @@ -1,12 +1,165 @@ -FROM registry.access.redhat.com/ubi9/python-312@sha256:0abad955c2c2e4575dc8987d76b8c49a7dd8e0679063e3118dab03c54528232f as build +############################################################### +# Stage 1 Base builder image with common tooling +############################################################### +FROM registry.access.redhat.com/ubi9/python-312@sha256:cb818db6c1dc82c70aeaa1139e33f3371f47b97b60ae6f9f23381319746f6f1d as packages-build -USER 0 +USER root WORKDIR /app +ENV PATH="$HOME/.cargo/bin:$PATH" +ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ +ARG TARGETARCH + +# Install dependencies +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + dnf install -y \ + make libtool wget patch ninja-build cmake xz bzip2-devel libffi-devel zlib-devel openssl-devel libevent-devel \ + python3.12 python3.12-devel python3.12-pip clang \ + gcc-toolset-14-gcc gcc-toolset-14-gcc-c++ gcc-toolset-14-gcc-gfortran skopeo && \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ + dnf clean all && \ + pip install --upgrade setuptools-rust pip 'cmake<4' setuptools wheel maturin ; \ + fi + COPY requirements* /app/ +# Create a dummy file to trigger build dependency +RUN touch /tmp/control + +############################################################### +# Stage 2 to build OpenBLAS +############################################################### + +FROM packages-build AS openblas-builder +ENV OPENBLAS_VERSION=0.3.30 +ARG TARGETARCH + +WORKDIR /app + +# Creating a directory for OpenBlas +RUN mkdir /tmp/openblas + +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + source /opt/rh/gcc-toolset-14/enable && \ + wget https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip && \ + unzip OpenBLAS-${OPENBLAS_VERSION}.zip -d /tmp/ && mv -T /tmp/OpenBLAS-${OPENBLAS_VERSION} /tmp/openblas && \ + cd /tmp/openblas && \ + make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0 ; \ + fi + +############################################################### +# Stage 3 to build pyTorch +############################################################### + +FROM packages-build AS torch-builder +USER root + +WORKDIR /app + +ARG MAX_JOBS +ARG _GLIBCXX_USE_CXX11_ABI=1 +ARG TARGETARCH + +RUN mkdir -p /torchwheels + +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + export TORCH_VERSION=$(sed -n "s/^torch==//p" /app/requirements-torch.in) && \ + source /opt/rh/gcc-toolset-14/enable && \ + git clone --recursive https://github.com/pytorch/pytorch.git -b v${TORCH_VERSION} && \ + cd pytorch && pip install -r requirements.txt && \ + rm -f dist/torch*+git*whl && \ + # Set MAX_JOBS to 2 or 4 to prevent OOM + # MAX_JOBS=4 \ + USE_NCCL=0 \ + BUILD_TEST=0 \ + PYTORCH_BUILD_VERSION=${TORCH_VERSION} \ + PYTORCH_BUILD_NUMBER=1 \ + pip wheel . --no-build-isolation --wheel-dir /torchwheels/ \ +; fi + +############################################################### +# Stage 4 to build Tiktoken +############################################################### + +FROM packages-build as tiktoken-builder +ARG TARGETARCH +WORKDIR /app + +RUN mkdir -p /tiktokenwheels + +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + export TIKTOKEN_VERSION=$(sed -n "s/^tiktoken==//p" /app/requirements.txt) && \ + source /opt/rh/gcc-toolset-14/enable && \ + git clone https://github.com/openai/tiktoken.git && \ + cd tiktoken && \ + git checkout ${TIKTOKEN_VERSION} && \ + pip wheel . --wheel-dir /tiktokenwheels ; \ + fi + +############################################################### +# Stage 5 to build onnxruntime +############################################################### +FROM packages-build AS onnxruntime-builder +ARG TARGETARCH +USER root + +WORKDIR /app + +ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib + +# copy built OpenBLAS sources +COPY --from=openblas-builder /tmp/openblas/ /build/openblas + +# Install OpenBLAS +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + PREFIX=/app/.openblas make -C /build/openblas install && \ + ln -sf /app/.openblas/lib/libopenblasp-r0.3.30.so /app/.openblas/lib/libopenblasp.so.0 ; \ + fi + +COPY scripts/build_onnxruntime.sh /build/build_onnxruntime.sh + +RUN mkdir -p /onnxruntime_wheels + +# Build onnxruntime +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + export ONNXRUNTIME_VERSION=$(sed -n "s/^onnxruntime==//p" /app/requirements.txt) && \ + sh /build/build_onnxruntime.sh ; \ + fi + +############################################################### +# Stage 6 Install hf_xet from source ppc64le +############################################################### +FROM packages-build AS hf-xet-builder +ARG TARGETARCH +USER root + +WORKDIR /app +RUN mkdir -p /hf_xet_wheels + +RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ + export HF_XET_VERSION=$(sed -n "s/^hf-xet==//p" /app/requirements.txt) && \ + git clone https://github.com/huggingface/xet-core.git && \ + cd xet-core/hf_xet && git checkout v${HF_XET_VERSION} && \ + sed -i '/python-source = "python"/d' pyproject.toml && \ + maturin build --release --out /hf_xet_wheels ; \ + fi + +############################################################### +# Stage 7 Install all the dependencies +############################################################### + +FROM registry.access.redhat.com/ubi9/python-312@sha256:cb818db6c1dc82c70aeaa1139e33f3371f47b97b60ae6f9f23381319746f6f1d as build + +USER 0 +WORKDIR /app + ARG TARGETARCH ARG GUARDRAILS_PROFILE=opensource +ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib +ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/app/.openblas/lib/pkgconfig +ENV PATH="$HOME/.cargo/bin:/app/.venv/bin:$PATH" +ENV BLIS_ARCH=generic +ENV GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 COPY requirements.txt requirements-torch.txt pyproject.toml README.md ./ COPY nemoguardrails/ ./nemoguardrails/ @@ -27,6 +180,35 @@ ENV HF_HOME=/app/.cache/huggingface \ RUN python3 -m venv /app/.venv +# Copy OpenBLAS +COPY --from=openblas-builder /tmp/openblas/ /tmp/openblas + +# Dummy file to trigger build dependency +COPY --from=torch-builder /tmp/control /dev/null +COPY --from=tiktoken-builder /tmp/control /dev/null +COPY --from=onnxruntime-builder /tmp/control /dev/null +COPY --from=hf-xet-builder /tmp/control /dev/null + +RUN --mount=type=cache,from=torch-builder,source=/torchwheels/,target=/tmp/torchwheels/,ro \ + --mount=type=cache,from=tiktoken-builder,source=/tiktokenwheels/,target=/tmp/tiktokenwheels/,ro \ + --mount=type=cache,from=onnxruntime-builder,source=/onnxruntime_wheels/,target=/tmp/onnxruntime_wheels/,ro \ + --mount=type=cache,from=hf-xet-builder,source=/hf_xet_wheels/,target=/tmp/hf_xet_wheels/,ro \ + if [ "$TARGETARCH" = "ppc64le" ]; then \ + /app/.venv/bin/pip install \ + /tmp/torchwheels/*.whl \ + /tmp/tiktokenwheels/*.whl \ + /tmp/onnxruntime_wheels/*.whl \ + /tmp/hf_xet_wheels/*.whl && \ + PREFIX=/app/.openblas make -C /tmp/openblas install && rm -rf /tmp/openblas ; \ + fi + +# Temporary workaround for ppc64le with the pinned pandas version. Remove after upgrading pandas with v3.x +RUN if [ "$TARGETARCH" == "ppc64le" ]; then \ + export PANDAS_VERSION=$(sed -n "s/^pandas==//p" /app/requirements.txt) && \ + /app/.venv/bin/pip install --no-cache-dir "meson<1.10" meson-python ninja cython numpy versioneer[toml] packaging && \ + /app/.venv/bin/pip install --no-cache-dir --no-build-isolation pandas==${PANDAS_VERSION} ; \ + fi + RUN /app/.venv/bin/pip install --no-cache-dir -r requirements.txt && \ /app/.venv/bin/pip install --no-cache-dir --no-deps . && \ rm -rf /root/.cache/pip /tmp/* /var/tmp/* From cbbdbf88d2f71b78ad0e98d4e0a5892307c28575 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 14:18:52 +0530 Subject: [PATCH 09/17] temp dockerfile Signed-off-by: Varad --- ppc64le-requirements/requirements-sdist-build.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt index ed7ecbc121..b585d3c975 100644 --- a/ppc64le-requirements/requirements-sdist-build.txt +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -35,7 +35,7 @@ httpx-sse==0.4.1 humanfriendly==10.0 idna==3.10 importlib_metadata==8.7.0 -jiter==0.10.0 +jiter>=0.12.0 joblib==1.5.2 jsonpatch==1.33 jsonpointer==3.0.0 From cb308701a55710412559269a67372a8499a789d5 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 14:25:44 +0530 Subject: [PATCH 10/17] test Signed-off-by: Varad --- ppc64le-requirements/requirements-sdist-build.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt index b585d3c975..7323bc9ca3 100644 --- a/ppc64le-requirements/requirements-sdist-build.txt +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -35,7 +35,7 @@ httpx-sse==0.4.1 humanfriendly==10.0 idna==3.10 importlib_metadata==8.7.0 -jiter>=0.12.0 +jiter==0.12.0 joblib==1.5.2 jsonpatch==1.33 jsonpointer==3.0.0 From c6173a6ccf712ea34a9153c2d579f02bfcc7aa43 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 14:48:56 +0530 Subject: [PATCH 11/17] test Signed-off-by: Varad --- ppc64le-requirements/requirements-sdist-build.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt index 7323bc9ca3..29bed1b572 100644 --- a/ppc64le-requirements/requirements-sdist-build.txt +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -35,7 +35,7 @@ httpx-sse==0.4.1 humanfriendly==10.0 idna==3.10 importlib_metadata==8.7.0 -jiter==0.12.0 +jiter==0.14.0 joblib==1.5.2 jsonpatch==1.33 jsonpointer==3.0.0 From 44a76cae96dd2bec092417474f6a269470e37845 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 17:32:40 +0530 Subject: [PATCH 12/17] test Signed-off-by: Varad --- rpms.lock.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rpms.lock.yaml b/rpms.lock.yaml index 148f75fd68..779e11a9a1 100644 --- a/rpms.lock.yaml +++ b/rpms.lock.yaml @@ -3,6 +3,11 @@ lockfileVersion: 1 lockfileVendor: redhat arches: - arch: ppc64le - packages: [] + packages: + - name: unzip + epoch: 0 + version: "6.0" + release: "57.el9" + arch: ppc64le source: [] module_metadata: [] From 593cc141c6ba3701f2fd119f82c81d3203182e2c Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 17:47:08 +0530 Subject: [PATCH 13/17] test Signed-off-by: Varad --- rpms.lock.yaml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/rpms.lock.yaml b/rpms.lock.yaml index 779e11a9a1..5bf856e5a0 100644 --- a/rpms.lock.yaml +++ b/rpms.lock.yaml @@ -2,12 +2,20 @@ lockfileVersion: 1 lockfileVendor: redhat arches: - - arch: ppc64le - packages: - - name: unzip - epoch: 0 - version: "6.0" - release: "57.el9" - arch: ppc64le - source: [] - module_metadata: [] +- arch: ppc64le + packages: + - url: https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/ppc64le/baseos/os/Packages/u/unzip-6.0-59.el9.ppc64le.rpm + repoid: ubi-9-for-ppc64le-baseos-rpms + size: 190400 + checksum: sha256:08da7102308f1ad028360ccdf78d0de9c3ff16c9cdb2aab71d7182f600f933be + name: unzip + evr: 6.0-59.el9 + sourcerpm: unzip-6.0-59.el9.src.rpm + source: + - url: https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi9/9/ppc64le/baseos/source/SRPMS/Packages/u/unzip-6.0-59.el9.src.rpm + repoid: ubi-9-for-ppc64le-baseos-source-rpms + size: 1433595 + checksum: sha256:299d7451195ccb37d8eb90f1870e00eb5ff4c12716c933d4c1657949f0d6aaf8 + name: unzip + evr: 6.0-59.el9 + module_metadata: [] From ae486521f88ce0a8548a5465627e55c167375db4 Mon Sep 17 00:00:00 2001 From: Varad Date: Wed, 29 Apr 2026 18:11:28 +0530 Subject: [PATCH 14/17] Dockerfile fix Signed-off-by: Varad --- Dockerfile.konflux | 186 +-------------------------------------------- 1 file changed, 2 insertions(+), 184 deletions(-) diff --git a/Dockerfile.konflux b/Dockerfile.konflux index daf4fa9eff..cce60855e2 100644 --- a/Dockerfile.konflux +++ b/Dockerfile.konflux @@ -1,151 +1,5 @@ ############################################################### -# Stage 1 Base builder image with common tooling -############################################################### -FROM registry.access.redhat.com/ubi9/python-312@sha256:cb818db6c1dc82c70aeaa1139e33f3371f47b97b60ae6f9f23381319746f6f1d as packages-build - -USER root -WORKDIR /app - -ENV PATH="$HOME/.cargo/bin:$PATH" -ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ -ARG TARGETARCH - -# Install dependencies -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - dnf install -y \ - make libtool wget patch ninja-build cmake xz bzip2-devel libffi-devel zlib-devel openssl-devel libevent-devel \ - python3.12 python3.12-devel python3.12-pip clang \ - gcc-toolset-14-gcc gcc-toolset-14-gcc-c++ gcc-toolset-14-gcc-gfortran skopeo && \ - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ - dnf clean all && \ - pip install --upgrade setuptools-rust pip 'cmake<4' setuptools wheel maturin ; \ - fi - -COPY requirements* /app/ - -# Create a dummy file to trigger build dependency -RUN touch /tmp/control - -############################################################### -# Stage 2 to build OpenBLAS -############################################################### - -FROM packages-build AS openblas-builder -ENV OPENBLAS_VERSION=0.3.30 -ARG TARGETARCH - -WORKDIR /app - -# Creating a directory for OpenBlas -RUN mkdir /tmp/openblas - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-14/enable && \ - wget https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip && \ - unzip OpenBLAS-${OPENBLAS_VERSION}.zip -d /tmp/ && mv -T /tmp/OpenBLAS-${OPENBLAS_VERSION} /tmp/openblas && \ - cd /tmp/openblas && \ - make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0 ; \ - fi - -############################################################### -# Stage 3 to build pyTorch -############################################################### - -FROM packages-build AS torch-builder -USER root - -WORKDIR /app - -ARG MAX_JOBS -ARG _GLIBCXX_USE_CXX11_ABI=1 -ARG TARGETARCH - -RUN mkdir -p /torchwheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export TORCH_VERSION=$(sed -n "s/^torch==//p" /app/requirements-torch.in) && \ - source /opt/rh/gcc-toolset-14/enable && \ - git clone --recursive https://github.com/pytorch/pytorch.git -b v${TORCH_VERSION} && \ - cd pytorch && pip install -r requirements.txt && \ - rm -f dist/torch*+git*whl && \ - # Set MAX_JOBS to 2 or 4 to prevent OOM - # MAX_JOBS=4 \ - USE_NCCL=0 \ - BUILD_TEST=0 \ - PYTORCH_BUILD_VERSION=${TORCH_VERSION} \ - PYTORCH_BUILD_NUMBER=1 \ - pip wheel . --no-build-isolation --wheel-dir /torchwheels/ \ -; fi - -############################################################### -# Stage 4 to build Tiktoken -############################################################### - -FROM packages-build as tiktoken-builder -ARG TARGETARCH -WORKDIR /app - -RUN mkdir -p /tiktokenwheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export TIKTOKEN_VERSION=$(sed -n "s/^tiktoken==//p" /app/requirements.txt) && \ - source /opt/rh/gcc-toolset-14/enable && \ - git clone https://github.com/openai/tiktoken.git && \ - cd tiktoken && \ - git checkout ${TIKTOKEN_VERSION} && \ - pip wheel . --wheel-dir /tiktokenwheels ; \ - fi - -############################################################### -# Stage 5 to build onnxruntime -############################################################### -FROM packages-build AS onnxruntime-builder -ARG TARGETARCH -USER root - -WORKDIR /app - -ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib - -# copy built OpenBLAS sources -COPY --from=openblas-builder /tmp/openblas/ /build/openblas - -# Install OpenBLAS -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - PREFIX=/app/.openblas make -C /build/openblas install && \ - ln -sf /app/.openblas/lib/libopenblasp-r0.3.30.so /app/.openblas/lib/libopenblasp.so.0 ; \ - fi - -COPY scripts/build_onnxruntime.sh /build/build_onnxruntime.sh - -RUN mkdir -p /onnxruntime_wheels - -# Build onnxruntime -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export ONNXRUNTIME_VERSION=$(sed -n "s/^onnxruntime==//p" /app/requirements.txt) && \ - sh /build/build_onnxruntime.sh ; \ - fi - -############################################################### -# Stage 6 Install hf_xet from source ppc64le -############################################################### -FROM packages-build AS hf-xet-builder -ARG TARGETARCH -USER root - -WORKDIR /app -RUN mkdir -p /hf_xet_wheels - -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - export HF_XET_VERSION=$(sed -n "s/^hf-xet==//p" /app/requirements.txt) && \ - git clone https://github.com/huggingface/xet-core.git && \ - cd xet-core/hf_xet && git checkout v${HF_XET_VERSION} && \ - sed -i '/python-source = "python"/d' pyproject.toml && \ - maturin build --release --out /hf_xet_wheels ; \ - fi - -############################################################### -# Stage 7 Install all the dependencies +# Stage 1 Install all the dependencies ############################################################### FROM registry.access.redhat.com/ubi9/python-312@sha256:cb818db6c1dc82c70aeaa1139e33f3371f47b97b60ae6f9f23381319746f6f1d as build @@ -155,11 +9,6 @@ WORKDIR /app ARG TARGETARCH ARG GUARDRAILS_PROFILE=opensource -ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/app/.openblas/lib -ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/app/.openblas/lib/pkgconfig -ENV PATH="$HOME/.cargo/bin:/app/.venv/bin:$PATH" -ENV BLIS_ARCH=generic -ENV GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 COPY requirements.txt requirements-torch.txt pyproject.toml README.md ./ COPY nemoguardrails/ ./nemoguardrails/ @@ -168,8 +17,6 @@ COPY examples/bots/ ./examples/bots/ RUN chmod +x ./scripts/entrypoint.sh -RUN python3 -m pip install --no-cache-dir pyyaml - RUN python3 ./scripts/filter_guardrails.py ./scripts/provider-list.yaml $GUARDRAILS_PROFILE ENV HF_HOME=/app/.cache/huggingface \ @@ -180,35 +27,6 @@ ENV HF_HOME=/app/.cache/huggingface \ RUN python3 -m venv /app/.venv -# Copy OpenBLAS -COPY --from=openblas-builder /tmp/openblas/ /tmp/openblas - -# Dummy file to trigger build dependency -COPY --from=torch-builder /tmp/control /dev/null -COPY --from=tiktoken-builder /tmp/control /dev/null -COPY --from=onnxruntime-builder /tmp/control /dev/null -COPY --from=hf-xet-builder /tmp/control /dev/null - -RUN --mount=type=cache,from=torch-builder,source=/torchwheels/,target=/tmp/torchwheels/,ro \ - --mount=type=cache,from=tiktoken-builder,source=/tiktokenwheels/,target=/tmp/tiktokenwheels/,ro \ - --mount=type=cache,from=onnxruntime-builder,source=/onnxruntime_wheels/,target=/tmp/onnxruntime_wheels/,ro \ - --mount=type=cache,from=hf-xet-builder,source=/hf_xet_wheels/,target=/tmp/hf_xet_wheels/,ro \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - /app/.venv/bin/pip install \ - /tmp/torchwheels/*.whl \ - /tmp/tiktokenwheels/*.whl \ - /tmp/onnxruntime_wheels/*.whl \ - /tmp/hf_xet_wheels/*.whl && \ - PREFIX=/app/.openblas make -C /tmp/openblas install && rm -rf /tmp/openblas ; \ - fi - -# Temporary workaround for ppc64le with the pinned pandas version. Remove after upgrading pandas with v3.x -RUN if [ "$TARGETARCH" == "ppc64le" ]; then \ - export PANDAS_VERSION=$(sed -n "s/^pandas==//p" /app/requirements.txt) && \ - /app/.venv/bin/pip install --no-cache-dir "meson<1.10" meson-python ninja cython numpy versioneer[toml] packaging && \ - /app/.venv/bin/pip install --no-cache-dir --no-build-isolation pandas==${PANDAS_VERSION} ; \ - fi - RUN /app/.venv/bin/pip install --no-cache-dir -r requirements.txt && \ /app/.venv/bin/pip install --no-cache-dir --no-deps . && \ rm -rf /root/.cache/pip /tmp/* /var/tmp/* @@ -227,7 +45,7 @@ RUN set -ex && \ rm -rf /app/.cache/huggingface/xet /root/.cache /tmp/* /var/tmp/* ############################################################### -# Stage 8 Final Build +# Stage 2 Final Build ############################################################### FROM registry.access.redhat.com/ubi9/python-312:latest as runtime From fcbfbeeeeef4190007d3e25d891707ce21e65d5d Mon Sep 17 00:00:00 2001 From: Varad Date: Tue, 5 May 2026 13:33:03 +0530 Subject: [PATCH 15/17] requ Signed-off-by: Varad --- ...i-nemo-guardrails-server-pull-request.yaml | 8 +- Dockerfile.konflux | 6 +- ppc64le-requirements/1/1-requirements.txt | 159 ++++++++++++++++++ ppc64le-requirements/1/2-rh.txt | 19 +++ ppc64le-requirements/1/3.txt | 3 + ppc64le-requirements/1/4.txt | 3 + ppc64le-requirements/2/2.txt | 4 + .../2/requirements-devpi-index-2.txt | 5 + .../requirements-devpi-index-2.txt | 7 + .../requirements-devpi-index.txt | 23 ++- .../requirements-sdist-build.txt | 143 +++------------- ppc64le-requirements/requirements.txt | 127 +++++++++++++- requirements-ppc.txt | 1 + 13 files changed, 369 insertions(+), 139 deletions(-) create mode 100644 ppc64le-requirements/1/1-requirements.txt create mode 100644 ppc64le-requirements/1/2-rh.txt create mode 100644 ppc64le-requirements/1/3.txt create mode 100644 ppc64le-requirements/1/4.txt create mode 100644 ppc64le-requirements/2/2.txt create mode 100644 ppc64le-requirements/2/requirements-devpi-index-2.txt create mode 100644 ppc64le-requirements/requirements-devpi-index-2.txt create mode 100644 requirements-ppc.txt diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index aff1001432..e12a5aade6 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -50,11 +50,13 @@ spec: "type": "pip", "path": ".", "requirements_files": [ - "ppc64le-requirements/requirements.txt" + "ppc64le-requirements/2/2.txt", + "ppc64le-requirements/2/requirements-devpi-index-2.txt" ], "requirements_build_files": [ - "ppc64le-requirements/requirements-sdist-build.txt", - "ppc64le-requirements/requirements-rhoai-3.4-index.txt" + "ppc64le-requirements/1/1-requirements.txt", + "ppc64le-requirements/1/2-rh.txt", + "ppc64le-requirements/1/3.txt" ], "allow_binary": "true" }, diff --git a/Dockerfile.konflux b/Dockerfile.konflux index cce60855e2..aca47d3bd4 100644 --- a/Dockerfile.konflux +++ b/Dockerfile.konflux @@ -10,13 +10,15 @@ WORKDIR /app ARG TARGETARCH ARG GUARDRAILS_PROFILE=opensource -COPY requirements.txt requirements-torch.txt pyproject.toml README.md ./ +COPY requirements.txt requirements-ppc.txt requirements-torch.txt pyproject.toml README.md ./ COPY nemoguardrails/ ./nemoguardrails/ COPY scripts/ ./scripts/ COPY examples/bots/ ./examples/bots/ RUN chmod +x ./scripts/entrypoint.sh +RUN python3 -m pip install --no-cache-dir pyyaml + RUN python3 ./scripts/filter_guardrails.py ./scripts/provider-list.yaml $GUARDRAILS_PROFILE ENV HF_HOME=/app/.cache/huggingface \ @@ -27,7 +29,7 @@ ENV HF_HOME=/app/.cache/huggingface \ RUN python3 -m venv /app/.venv -RUN /app/.venv/bin/pip install --no-cache-dir -r requirements.txt && \ +RUN /app/.venv/bin/pip install --no-cache-dir -r requirements-ppc.txt && \ /app/.venv/bin/pip install --no-cache-dir --no-deps . && \ rm -rf /root/.cache/pip /tmp/* /var/tmp/* diff --git a/ppc64le-requirements/1/1-requirements.txt b/ppc64le-requirements/1/1-requirements.txt new file mode 100644 index 0000000000..e054149618 --- /dev/null +++ b/ppc64le-requirements/1/1-requirements.txt @@ -0,0 +1,159 @@ +aiofiles==25.1.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-retry==2.9.1 +aiosignal==1.4.0 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.11.0 +asgiref==3.11.1 +attrs==25.3.0 +catalogue==2.0.10 +certifi==2025.8.3 +cffi==1.17.1 +charset-normalizer==3.4.3 +click==8.1.8 +cloudpathlib==0.22.0 +coloredlogs==15.0.1 +colorlog==6.10.1 +Cython==3.2.4 +dataclasses-json==0.6.7 +distro==1.9.0 +einops==0.8.1 +fastapi==0.122.0 +filelock==3.19.1 +filetype==1.2.0 +flatbuffers==25.2.10 +frozenlist==1.7.0 +fsspec==2025.9.0 +googleapis-common-protos==1.74.0 +greenlet==3.4.0 +h11==0.16.0 +httpcore==1.0.9 +httpx==0.28.1 +httpx-sse==0.4.1 +humanfriendly==10.0 +idna==3.10 +importlib_metadata==8.7.0 +jiter==0.14.0 +joblib==1.5.2 +jsonpatch==1.33 +jsonpointer==3.0.0 +langsmith==0.4.30 +lark==1.3.0 +loguru==0.7.3 +markdown-it-py==3.0.0 +marshmallow==3.26.1 +mdurl==0.1.2 +meson==1.9.2 +meson-python==0.19.0 +mmh3==5.2.0 +mpmath==1.3.0 +multidict==6.6.4 +mypy_extensions==1.1.0 +nest-asyncio==1.6.0 +networkx==3.5 +ninja==1.13.0 +nltk==3.9.2 +openai==2.21.0 +opentelemetry-api==1.38.0 +opentelemetry-distro==0.59b0 +opentelemetry-exporter-otlp-proto-common==1.38.0 +opentelemetry-exporter-otlp-proto-http==1.38.0 +opentelemetry-instrumentation==0.59b0 +opentelemetry-instrumentation-asgi==0.59b0 +opentelemetry-instrumentation-fastapi==0.59b0 +opentelemetry-instrumentation-httpx==0.59b0 +opentelemetry-proto==1.38.0 +opentelemetry-sdk==1.38.0 +opentelemetry-semantic-conventions==0.59b0 +opentelemetry-util-http==0.59b0 +orjson==3.11.3 +packaging==25.0 +phonenumbers==9.0.10 +prompt_toolkit==3.0.52 +propcache==0.3.2 +protobuf==6.32.1 +pycparser==2.22 +pydantic==2.11.9 +pydantic-settings==2.10.1 +pydantic_core==2.33.2 +Pygments==2.19.2 +pyproject-metadata==0.11.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.1.1 +pytz==2025.2 +regex==2025.9.18 +requests==2.32.5 +requests-file==2.1.0 +requests-toolbelt==1.0.0 +rich==14.1.0 +robust-downloader==0.0.2 +safetensors==0.6.2 +setuptools==80.9.0 +shellingham==1.5.4 +simpleeval==1.0.3 +six==1.17.0 +smart_open==7.3.1 +sniffio==1.3.1 +spacy-legacy==3.0.12 +spacy-loggers==1.0.5 +SQLAlchemy==2.0.43 +starlette==0.50.0 +sympy==1.14.0 +tenacity==9.1.2 +threadpoolctl==3.6.0 +tldextract==5.3.0 +tqdm==4.67.1 +typer==0.19.2 +typing-inspect==0.9.0 +typing-inspection==0.4.1 +typing_extensions==4.15.0 +tzdata==2025.2 +urllib3==2.5.0 +uuid_utils==0.14.0 +uvicorn==0.37.0 +versioneer==0.29 +wasabi==1.1.3 +watchdog==6.0.0 +wcwidth==0.2.14 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 +zstandard==0.25.0 +cryptography==44.0.3 +cymem==2.0.11 +huggingface-hub==0.35.1 +langchain-community==0.3.29 +langcodes==3.5.0 +language_data==1.3.0 +marisa-trie==1.3.1 +MarkupSafe==3.0.2 +murmurhash==1.0.13 +numpy==2.3.3 +pandas==2.3.1 +preshed==3.0.10 +presidio_anonymizer==2.2.359 +PyYAML==6.0.2 +srsly==2.5.1 +tokenizers==0.22.1 +transformers==4.57.1 +weasel==0.4.1 +cryptography==44.0.3 +cymem==2.0.11 +huggingface-hub==0.35.1 +langchain-community==0.3.29 +langcodes==3.5.0 +language_data==1.3.0 +marisa-trie==1.3.1 +MarkupSafe==3.0.2 +murmurhash==1.0.13 +numpy==2.3.3 +pandas==2.3.1 +preshed==3.0.10 +presidio_anonymizer==2.2.359 +PyYAML==6.0.2 +srsly==2.5.1 +tokenizers==0.22.1 +transformers==4.57.1 +weasel==0.4.1 diff --git a/ppc64le-requirements/1/2-rh.txt b/ppc64le-requirements/1/2-rh.txt new file mode 100644 index 0000000000..e4eb106b5c --- /dev/null +++ b/ppc64le-requirements/1/2-rh.txt @@ -0,0 +1,19 @@ +--index-url https://console.redhat.com/api/pypi/public-rhai/rhoai/3.4/cpu-ubi9/simple + +annoy==1.17.3 +fastembed==0.6.0 +grpcio==1.80.0 +langchain-openai==0.3.35 +scikit-learn==1.7.2 +scipy==1.16.3 +tiktoken==0.12.0 +confection==0.1.5 +fasttext-predict==0.9.2.4 +Jinja2==3.1.6 +langchain==0.3.27 +langchain-core==0.3.83 +langchain-nvidia-ai-endpoints==0.3.19 +langchain-text-splitters==0.3.11 +pillow==11.3.0 +py_rust_stemmers==0.1.5 +yara-python==4.5.4 diff --git a/ppc64le-requirements/1/3.txt b/ppc64le-requirements/1/3.txt new file mode 100644 index 0000000000..43ac6b2931 --- /dev/null +++ b/ppc64le-requirements/1/3.txt @@ -0,0 +1,3 @@ +--index-url https://wheels-staging.developerfirst.ibm.com/ppc64le/linux/ --trusted-host wheels-staging.developerfirst.ibm.com + +torch==2.9.0 diff --git a/ppc64le-requirements/1/4.txt b/ppc64le-requirements/1/4.txt new file mode 100644 index 0000000000..d65e574688 --- /dev/null +++ b/ppc64le-requirements/1/4.txt @@ -0,0 +1,3 @@ +--index-url https://wheels.developerfirst.ibm.com/ppc64le/linux +hf-xet==1.2.0 +onnxruntime==1.22.0 #updated diff --git a/ppc64le-requirements/2/2.txt b/ppc64le-requirements/2/2.txt new file mode 100644 index 0000000000..002c4fe73c --- /dev/null +++ b/ppc64le-requirements/2/2.txt @@ -0,0 +1,4 @@ +opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 +opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 +sentence-transformers==5.1.2 +presidio_analyzer==2.2.359 diff --git a/ppc64le-requirements/2/requirements-devpi-index-2.txt b/ppc64le-requirements/2/requirements-devpi-index-2.txt new file mode 100644 index 0000000000..fb468ac2dc --- /dev/null +++ b/ppc64le-requirements/2/requirements-devpi-index-2.txt @@ -0,0 +1,5 @@ +--index-url https://wheels-staging.developerfirst.ibm.com/ppc64le/linux/ --trusted-host wheels-staging.developerfirst.ibm.com + +blis==1.3.0 +spacy==3.8.7 +thinc==8.3.6 diff --git a/ppc64le-requirements/requirements-devpi-index-2.txt b/ppc64le-requirements/requirements-devpi-index-2.txt new file mode 100644 index 0000000000..ad902066bc --- /dev/null +++ b/ppc64le-requirements/requirements-devpi-index-2.txt @@ -0,0 +1,7 @@ +--index-url https://wheels-staging.developerfirst.ibm.com/ppc64le/linux/ --trusted-host wheels-staging.developerfirst.ibm.com +blis==1.3.0 +spacy==3.8.7 +thinc==8.3.6 +hf-xet==1.2.0 +onnxruntime==1.22.1 +torch==2.9.0 diff --git a/ppc64le-requirements/requirements-devpi-index.txt b/ppc64le-requirements/requirements-devpi-index.txt index 252eb03881..b0db63f6ad 100644 --- a/ppc64le-requirements/requirements-devpi-index.txt +++ b/ppc64le-requirements/requirements-devpi-index.txt @@ -1,7 +1,16 @@ -# blis==1.3.0 -# presidio_analyzer==2.2.359 -# spacy==3.8.7 -# thinc==8.3.6 -# hf-xet==1.1.10 -# onnxruntime==1.22.1 -# torch==2.9.0 +--index-url https://wheels-staging.developerfirst.ibm.com/ppc64le/linux/ --trusted-host wheels-staging.developerfirst.ibm.com + +blis==1.3.0 +spacy==3.8.7 +thinc==8.3.6 +hf-xet==1.4.2 # updated +onnxruntime==1.22.1 +torch==2.9.0 +grpcio==1.80.0 +scikit-learn==1.7.2 +scipy==1.16.3 +tiktoken==0.12.0 +langchain==0.3.27 +pillow==11.3.0 + +#cryptography==44.0.3 diff --git a/ppc64le-requirements/requirements-sdist-build.txt b/ppc64le-requirements/requirements-sdist-build.txt index 29bed1b572..ae14fff6db 100644 --- a/ppc64le-requirements/requirements-sdist-build.txt +++ b/ppc64le-requirements/requirements-sdist-build.txt @@ -1,123 +1,20 @@ -aiofiles==25.1.0 -aiohappyeyeballs==2.6.1 -aiohttp==3.12.15 -aiohttp-retry==2.9.1 -aiosignal==1.4.0 -annotated-doc==0.0.4 -annotated-types==0.7.0 -anyio==4.11.0 -asgiref==3.11.1 -attrs==25.3.0 -catalogue==2.0.10 -certifi==2025.8.3 -cffi==1.17.1 -charset-normalizer==3.4.3 -click==8.1.8 -cloudpathlib==0.22.0 -coloredlogs==15.0.1 -colorlog==6.10.1 -Cython==3.2.4 -dataclasses-json==0.6.7 -distro==1.9.0 -einops==0.8.1 -fastapi==0.122.0 -filelock==3.19.1 -filetype==1.2.0 -flatbuffers==25.2.10 -frozenlist==1.7.0 -fsspec==2025.9.0 -googleapis-common-protos==1.74.0 -greenlet==3.4.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.28.1 -httpx-sse==0.4.1 -humanfriendly==10.0 -idna==3.10 -importlib_metadata==8.7.0 -jiter==0.14.0 -joblib==1.5.2 -jsonpatch==1.33 -jsonpointer==3.0.0 -langsmith==0.4.30 -lark==1.3.0 -loguru==0.7.3 -markdown-it-py==3.0.0 -marshmallow==3.26.1 -mdurl==0.1.2 -meson==1.9.2 -meson-python==0.19.0 -mmh3==5.2.0 -mpmath==1.3.0 -multidict==6.6.4 -mypy_extensions==1.1.0 -nest-asyncio==1.6.0 -networkx==3.5 -ninja==1.13.0 -nltk==3.9.2 -openai==2.21.0 -opentelemetry-api==1.38.0 -opentelemetry-distro==0.59b0 -opentelemetry-exporter-otlp-proto-common==1.38.0 -opentelemetry-exporter-otlp-proto-http==1.38.0 -opentelemetry-instrumentation==0.59b0 -opentelemetry-instrumentation-asgi==0.59b0 -opentelemetry-instrumentation-fastapi==0.59b0 -opentelemetry-instrumentation-httpx==0.59b0 -opentelemetry-proto==1.38.0 -opentelemetry-sdk==1.38.0 -opentelemetry-semantic-conventions==0.59b0 -opentelemetry-util-http==0.59b0 -orjson==3.11.3 -packaging==25.0 -phonenumbers==9.0.10 -prompt_toolkit==3.0.52 -propcache==0.3.2 -protobuf==6.32.1 -pycparser==2.22 -pydantic==2.11.9 -pydantic-settings==2.10.1 -pydantic_core==2.33.2 -Pygments==2.19.2 -pyproject-metadata==0.11.0 -python-dateutil==2.9.0.post0 -python-dotenv==1.1.1 -pytz==2025.2 -regex==2025.9.18 -requests==2.32.5 -requests-file==2.1.0 -requests-toolbelt==1.0.0 -rich==14.1.0 -robust-downloader==0.0.2 -safetensors==0.6.2 -setuptools==80.9.0 -shellingham==1.5.4 -simpleeval==1.0.3 -six==1.17.0 -smart_open==7.3.1 -sniffio==1.3.1 -spacy-legacy==3.0.12 -spacy-loggers==1.0.5 -SQLAlchemy==2.0.43 -starlette==0.50.0 -sympy==1.14.0 -tenacity==9.1.2 -threadpoolctl==3.6.0 -tldextract==5.3.0 -tqdm==4.67.1 -typer==0.19.2 -typing-inspect==0.9.0 -typing-inspection==0.4.1 -typing_extensions==4.15.0 -tzdata==2025.2 -urllib3==2.5.0 -uuid_utils==0.14.0 -uvicorn==0.37.0 -versioneer==0.29 -wasabi==1.1.3 -watchdog==6.0.0 -wcwidth==0.2.14 -wrapt==1.17.3 -yarl==1.20.1 -zipp==3.23.0 -zstandard==0.25.0 +cryptography==44.0.3 +cymem==2.0.11 +huggingface-hub==0.35.1 +langchain-community==0.3.29 +langcodes==3.5.0 +language_data==1.3.0 +marisa-trie==1.3.1 +MarkupSafe==3.0.2 +murmurhash==1.0.13 +numpy==2.3.3 +pandas==2.3.1 +preshed==3.0.10 +presidio_anonymizer==2.2.359 +PyYAML==6.0.2 +srsly==2.5.1 +tokenizers==0.22.1 +transformers==4.57.1 +weasel==0.4.1 +opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 +opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 diff --git a/ppc64le-requirements/requirements.txt b/ppc64le-requirements/requirements.txt index c5478aa5c9..d075a5aae6 100644 --- a/ppc64le-requirements/requirements.txt +++ b/ppc64le-requirements/requirements.txt @@ -1,3 +1,126 @@ +aiofiles==25.1.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.12.15 +aiohttp-retry==2.9.1 +aiosignal==1.4.0 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anyio==4.11.0 +asgiref==3.11.1 +attrs==25.3.0 +catalogue==2.0.10 +certifi==2025.8.3 +cffi==1.17.1 +charset-normalizer==3.4.3 +click==8.1.8 +cloudpathlib==0.22.0 +coloredlogs==15.0.1 +colorlog==6.10.1 +Cython==3.2.4 +dataclasses-json==0.6.7 +distro==1.9.0 +einops==0.8.1 +fastapi==0.122.0 +filelock==3.19.1 +filetype==1.2.0 +flatbuffers==25.2.10 +frozenlist==1.7.0 +fsspec==2025.9.0 +googleapis-common-protos==1.74.0 +greenlet==3.4.0 +h11==0.16.0 +httpcore==1.0.9 +httpx==0.28.1 +httpx-sse==0.4.1 +humanfriendly==10.0 +idna==3.10 +importlib_metadata==8.7.0 +jiter==0.14.0 +joblib==1.5.2 +jsonpatch==1.33 +jsonpointer==3.0.0 +langsmith==0.4.30 +lark==1.3.0 +loguru==0.7.3 +markdown-it-py==3.0.0 +marshmallow==3.26.1 +mdurl==0.1.2 +meson==1.9.2 +meson-python==0.19.0 +mmh3==5.2.0 +mpmath==1.3.0 +multidict==6.6.4 +mypy_extensions==1.1.0 +nest-asyncio==1.6.0 +networkx==3.5 +ninja==1.13.0 +nltk==3.9.2 +openai==2.21.0 +opentelemetry-api==1.38.0 +opentelemetry-distro==0.59b0 +opentelemetry-exporter-otlp-proto-common==1.38.0 +opentelemetry-exporter-otlp-proto-http==1.38.0 +opentelemetry-instrumentation==0.59b0 +opentelemetry-instrumentation-asgi==0.59b0 +opentelemetry-instrumentation-fastapi==0.59b0 +opentelemetry-instrumentation-httpx==0.59b0 +opentelemetry-proto==1.38.0 +opentelemetry-sdk==1.38.0 +opentelemetry-semantic-conventions==0.59b0 +opentelemetry-util-http==0.59b0 +orjson==3.11.3 +packaging==25.0 +phonenumbers==9.0.10 +prompt_toolkit==3.0.52 +propcache==0.3.2 +protobuf==6.32.1 +pycparser==2.22 +pydantic==2.11.9 +pydantic-settings==2.10.1 +pydantic_core==2.33.2 +Pygments==2.19.2 +pyproject-metadata==0.11.0 +python-dateutil==2.9.0.post0 +python-dotenv==1.1.1 +pytz==2025.2 +regex==2025.9.18 +requests==2.32.5 +requests-file==2.1.0 +requests-toolbelt==1.0.0 +rich==14.1.0 +robust-downloader==0.0.2 +safetensors==0.6.2 +setuptools==80.9.0 +shellingham==1.5.4 +simpleeval==1.0.3 +six==1.17.0 +smart_open==7.3.1 +sniffio==1.3.1 +spacy-legacy==3.0.12 +spacy-loggers==1.0.5 +SQLAlchemy==2.0.43 +starlette==0.50.0 +sympy==1.14.0 +tenacity==9.1.2 +threadpoolctl==3.6.0 +tldextract==5.3.0 +tqdm==4.67.1 +typer==0.19.2 +typing-inspect==0.9.0 +typing-inspection==0.4.1 +typing_extensions==4.15.0 +tzdata==2025.2 +urllib3==2.5.0 +uuid_utils==0.14.0 +uvicorn==0.37.0 +versioneer==0.29 +wasabi==1.1.3 +watchdog==6.0.0 +wcwidth==0.2.14 +wrapt==1.17.3 +yarl==1.20.1 +zipp==3.23.0 +zstandard==0.25.0 cryptography==44.0.3 cymem==2.0.11 huggingface-hub==0.35.1 @@ -16,7 +139,3 @@ srsly==2.5.1 tokenizers==0.22.1 transformers==4.57.1 weasel==0.4.1 -opentelemetry-exporter-otlp==1.38.0 # requires grpcio==1.80.0 -opentelemetry-exporter-otlp-proto-grpc==1.38.0 # requires grpcio==1.80.0 -#sentence-transformers==5.1.2. # requires torch==2.9.0 -# presidio_analyzer==2.2.359 diff --git a/requirements-ppc.txt b/requirements-ppc.txt new file mode 100644 index 0000000000..c980bc32eb --- /dev/null +++ b/requirements-ppc.txt @@ -0,0 +1 @@ +nemoguardrails From 31b1d900c771f4babd865a8278f8db04932b9a5e Mon Sep 17 00:00:00 2001 From: Varad Date: Fri, 8 May 2026 11:39:11 +0530 Subject: [PATCH 16/17] test Signed-off-by: Varad --- .../odh-trustyai-nemo-guardrails-server-pull-request.yaml | 8 ++++---- .tekton/odh-trustyai-nemo-guardrails-server-push.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index e12a5aade6..c3f6e8365e 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -49,15 +49,15 @@ spec: { "type": "pip", "path": ".", - "requirements_files": [ - "ppc64le-requirements/2/2.txt", - "ppc64le-requirements/2/requirements-devpi-index-2.txt" - ], "requirements_build_files": [ "ppc64le-requirements/1/1-requirements.txt", "ppc64le-requirements/1/2-rh.txt", "ppc64le-requirements/1/3.txt" ], + "requirements_files": [ + "ppc64le-requirements/2/2.txt", + "ppc64le-requirements/2/requirements-devpi-index-2.txt" + ], "allow_binary": "true" }, { diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-push.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-push.yaml index 1016a6c6f2..eb9feec4f8 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-push.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-push.yaml @@ -47,4 +47,4 @@ spec: - name: git-auth secret: secretName: '{{ git_auth_secret }}' -status: {} \ No newline at end of file +status: {} From b7756d34df46863a60a0ab2763cb6cd287b610d9 Mon Sep 17 00:00:00 2001 From: Varad Date: Fri, 8 May 2026 11:57:58 +0530 Subject: [PATCH 17/17] test Signed-off-by: Varad --- .tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml index c3f6e8365e..9931c413c3 100644 --- a/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml +++ b/.tekton/odh-trustyai-nemo-guardrails-server-pull-request.yaml @@ -49,12 +49,12 @@ spec: { "type": "pip", "path": ".", - "requirements_build_files": [ + "requirements_files": [ "ppc64le-requirements/1/1-requirements.txt", "ppc64le-requirements/1/2-rh.txt", "ppc64le-requirements/1/3.txt" ], - "requirements_files": [ + "requirements_build_files": [ "ppc64le-requirements/2/2.txt", "ppc64le-requirements/2/requirements-devpi-index-2.txt" ],