From 112678f54d6e762693b3703b58bb665afe759ea2 Mon Sep 17 00:00:00 2001 From: Ryan S <267728323+ironcommit@users.noreply.github.com> Date: Fri, 31 Jul 2026 15:11:34 -0700 Subject: [PATCH] fix(ci): update wheel constraints Signed-off-by: Ryan S <267728323+ironcommit@users.noreply.github.com> --- .../nemo-platform-plugin.txt | 16 ++++---- .../nemo-platform-services.txt | 29 ++++++++------- .github/workflows/ci.yaml | 37 +++++++++++++++++++ script/compile-wheel-constraints.sh | 8 ++-- 4 files changed, 66 insertions(+), 24 deletions(-) diff --git a/.github/wheel-constraints/nemo-platform-plugin.txt b/.github/wheel-constraints/nemo-platform-plugin.txt index 15dae7ecc0..99d93c8a19 100644 --- a/.github/wheel-constraints/nemo-platform-plugin.txt +++ b/.github/wheel-constraints/nemo-platform-plugin.txt @@ -1,21 +1,22 @@ # Partial dependency constraints for the CI wheel install-smoke-test. # Pins the DIRECT external deps of the built nemo-platform-plugin wheel to vetted versions for -# reproducibility; deep transitives resolve normally and cannot self-conflict. +# reproducibility; deep transitives resolve normally (so they stay py3.14-compatible and +# cannot self-conflict). litellm is capped <1.92 — its 1.92.0 native build has no py3.14 wheel. # Regenerate with: script/compile-wheel-constraints.sh # -anthropic==0.118.0 +anthropic==0.120.2 anyio==4.14.2 distro==1.9.0 docker==7.2.0 -fastapi==0.139.2 -fsspec==2026.6.0 +fastapi==0.141.1 +fsspec==2026.7.0 httpx==0.28.1 jsonschema==4.26.0 lark==1.3.1 -ngcsdk==4.21.0 +ngcsdk==4.34.7 nvidia-ml-py==13.610.43 -openai==2.47.0 -prompt-toolkit==3.0.52 +openai==2.52.0 +prompt-toolkit==3.0.53 psutil==7.2.2 pydantic-settings==2.14.2 pydantic==2.13.4 @@ -25,3 +26,4 @@ rich==15.0.0 sniffio==1.3.1 typer==0.25.1 typing-extensions==4.16.0 +litellm<1.92 # 1.92.0 native build has no py3.14 wheel diff --git a/.github/wheel-constraints/nemo-platform-services.txt b/.github/wheel-constraints/nemo-platform-services.txt index ef9e7be776..ab05954aa6 100644 --- a/.github/wheel-constraints/nemo-platform-services.txt +++ b/.github/wheel-constraints/nemo-platform-services.txt @@ -1,6 +1,7 @@ # Partial dependency constraints for the CI wheel install-smoke-test. # Pins the DIRECT external deps of the built nemo-platform[services] wheel to vetted versions for -# reproducibility; deep transitives resolve normally and cannot self-conflict. +# reproducibility; deep transitives resolve normally (so they stay py3.14-compatible and +# cannot self-conflict). litellm is capped <1.92 — its 1.92.0 native build has no py3.14 wheel. # Regenerate with: script/compile-wheel-constraints.sh # aioboto3==15.5.0 @@ -8,7 +9,7 @@ aiofiles==25.1.0 aiohttp==3.14.3 aiosqlite==0.22.1 alembic==1.18.5 -anthropic==0.118.0 +anthropic==0.120.2 anyio==4.14.2 asyncpg==0.31.0 base58==2.1.1 @@ -21,13 +22,13 @@ datasets==4.3.0 distro==1.9.0 docker==7.2.0 duckdb==1.5.5 -fastapi==0.139.2 -fastmcp==3.4.4 +fastapi==0.141.1 +fastmcp==3.4.5 fsspec==2025.9.0 greenlet==3.5.4 gunicorn==26.0.0 httpx==0.28.1 -huggingface-hub==1.24.0 +huggingface-hub==1.26.0 hvac==2.4.0 jinja2==3.1.6 jsonpath-ng==1.8.0 @@ -35,22 +36,23 @@ jsonschema==4.26.0 kubernetes==36.0.3 langchain-aws==1.1.0 langchain-community==0.3.31 -langchain-core==1.5.0 +langchain-core==1.5.3 langchain-nvidia-ai-endpoints==1.4.3 -langchain-openai==1.4.0 +langchain-openai==1.4.1 langchain==1.3.14 lark==1.3.1 nemo-anonymizer==0.3.1 +nemo-fabric-adapters-hermes==0.1.0 nemo-fabric==0.1.0 nemo-relay==0.6.0 nemo-safe-synthesizer==0.1.7 nemoguardrails==0.23.0 -ngcsdk==4.21.0 +ngcsdk==4.34.7 nvidia-ml-py==13.610.43 nvidia-nat-config-optimizer==1.8.0 nvidia-nat-core==1.8.0 nvidia-nat-langchain==1.8.0 -openai==2.47.0 +openai==2.52.0 opentelemetry-distro==0.64b0 opentelemetry-exporter-otlp-proto-grpc==1.43.0 opentelemetry-exporter-otlp-proto-http==1.43.0 @@ -65,9 +67,9 @@ opentelemetry-processor-baggage==0.65b0 opentelemetry-proto==1.43.0 opentelemetry-sdk==1.43.0 pandas==2.3.3 -prometheus-client==0.25.0 -prometheus-fastapi-instrumentator==8.0.2 -prompt-toolkit==3.0.52 +prometheus-client==0.26.0 +prometheus-fastapi-instrumentator==8.1.0 +prompt-toolkit==3.0.53 psutil==7.2.2 psycopg2-binary==2.9.12 pyarrow==24.0.0 @@ -92,7 +94,8 @@ typer==0.25.1 types-aioboto3==15.5.0 typing-extensions==4.16.0 urllib3==2.7.0 -uvicorn==0.51.0 +uvicorn==0.52.0 wasmtime==47.0.1 xdg-base-dirs==6.0.2 yara-python==4.5.1 +litellm<1.92 # 1.92.0 native build has no py3.14 wheel diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4f81a3f7bd..1857e7323a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1213,6 +1213,42 @@ jobs: retention-days: 7 if-no-files-found: error + wheel-constraints-lint: + name: Wheel constraints lint + needs: [wheel-build] + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: read + steps: + - name: Checkout code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + - name: Install uv + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 + with: + python-version: "3.12" + enable-cache: true + cache-dependency-glob: uv.lock + - name: Download nemo-platform wheel + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: nemo-platform-wheel-py3.12 + path: ${{ runner.temp }}/wheel-constraints/nemo-platform-wheel-py3.12 + - name: Download nemo-platform-plugin wheel + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: nemo-platform-plugin-wheel-py3.12 + path: ${{ runner.temp }}/wheel-constraints/nemo-platform-plugin-wheel-py3.12 + - name: Check generated wheel constraints + shell: bash + run: | + set -euo pipefail + bash -n script/compile-wheel-constraints.sh + script/compile-wheel-constraints.sh "${RUNNER_TEMP}/wheel-constraints" + git diff --exit-code + # Test each wheel: install from the artifact and run basic CLI / # import checks. wheel-test: @@ -1938,6 +1974,7 @@ jobs: # - python-integration-test - require-nvskills - wheel-build + - wheel-constraints-lint - wheel-test - python-e2e-test - web-typecheck diff --git a/script/compile-wheel-constraints.sh b/script/compile-wheel-constraints.sh index 3bd03a57f5..d4233fb02c 100755 --- a/script/compile-wheel-constraints.sh +++ b/script/compile-wheel-constraints.sh @@ -21,8 +21,8 @@ # script/compile-wheel-constraints.sh # # Wheels come from `uv build --package nemo-platform[-plugin]` (nemo-platform -# needs the Studio/node toolchain) or a CI "-wheel-py3.11" artifact -# (`gh run download -n nemo-platform-wheel-py3.11 -D `). +# needs the Studio/node toolchain) or a CI "-wheel-py3.12" artifact +# (`gh run download -n nemo-platform-wheel-py3.12 -D `). set -euo pipefail WHEEL_DIR="${1:?usage: script/compile-wheel-constraints.sh }" @@ -35,7 +35,7 @@ emit_constraints() { local wheel="$1" spec="$2" label="$3" out="$4" venv meta venv="$(mktemp -d)" meta="$(mktemp -d)" - uv venv "${venv}" --python 3.11 --quiet + uv venv "${venv}" --python 3.12 --quiet # Resolve+install once with the cap so we snapshot consistent, py3.14-safe versions. printf '%s\n' "${LITELLM_CAP%% *}" >"${meta}/cap.txt" uv pip install --python "${venv}/bin/python" --constraint "${meta}/cap.txt" "${spec}" >/dev/null @@ -61,7 +61,7 @@ PY printf '# Regenerate with: script/compile-wheel-constraints.sh \n#\n' while read -r name; do [[ -n "${name}" ]] || continue - ver="$("${venv}/bin/python" -c "import importlib.metadata as m; print(m.version('${name}'))" 2>/dev/null || true) + ver="$("${venv}/bin/python" -c "import importlib.metadata as m; print(m.version('${name}'))" 2>/dev/null || true)" [[ -n "${ver}" ]] && printf '%s==%s\n' "${name}" "${ver}" done <"${meta}/names.txt" | sort printf '%s\n' "${LITELLM_CAP}"