diff --git a/docker-bake.hcl b/docker-bake.hcl index 5ecc471906..6343ea078d 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -52,6 +52,10 @@ variable "MAMBA_SSM_WHEEL_CONTEXT" { default = "" } +variable "FFMPEG_VLM_WHEEL_CONTEXT" { + default = "" +} + variable "DISTROLESS_BASE" { default = "nvcr.io/nvidia/distroless/python:3.11-v4.0.8" } @@ -75,12 +79,12 @@ variable "BASE_TAG_PYTHON" { # Pin for nmp-automodel-base. variable "BASE_TAG_AUTOMODEL" { - default = "f8239353044d71cbd53e209b60c0600ead484b58" + default = "f0756dd64eaf2ddb9c5c962e18216b2e70ba4b64" } # The tag for base images if needed variable "WHEELS_TAG" { - default = "65632527b258367fb8855ef431f596abb8538577" + default = "f0756dd64eaf2ddb9c5c962e18216b2e70ba4b64" } variable "BAKE_CACHE_SOURCE_BRANCH" { @@ -138,6 +142,11 @@ function "get_mamba_ssm_wheel_image" { result = "${WHEELS_REGISTRY}/mamba-ssm-wheel:${WHEELS_TAG}" } +function "get_ffmpeg_vlm_wheel_image" { + params = [] + result = "${WHEELS_REGISTRY}/ffmpeg-vlm-wheel:${WHEELS_TAG}" +} + function "get_arch_tag" { params = [] result = BUILD_ARCH == "linux/arm64" ? "linux-arm64" : "linux-amd64" @@ -175,6 +184,11 @@ function "mamba_ssm_wheel_context" { result = notequal(MAMBA_SSM_WHEEL_CONTEXT, "") ? MAMBA_SSM_WHEEL_CONTEXT : notequal(USE_LOCAL_WHEELS, "") ? "target:mamba-ssm-wheel" : "docker-image://${get_mamba_ssm_wheel_image()}" } +function "ffmpeg_vlm_wheel_context" { + params = [] + result = notequal(FFMPEG_VLM_WHEEL_CONTEXT, "") ? FFMPEG_VLM_WHEEL_CONTEXT : notequal(USE_LOCAL_WHEELS, "") ? "target:ffmpeg-vlm-wheel" : "docker-image://${get_ffmpeg_vlm_wheel_image()}" +} + function "wheel_tags" { params = [name] result = [ @@ -293,6 +307,7 @@ group "nmp-automodel-gpu-wheels" { targets = [ "causal-conv1d-wheel", "mamba-ssm-wheel", + "ffmpeg-vlm-wheel", ] } @@ -500,15 +515,14 @@ target "nmp-cpu-tasks-docker" { platforms = get_platforms() } -# Mamba Wheel Builders -# Builds Python wheels for mamba-ssm and causal-conv1d in parallel. -# Both only ship source distributions on PyPI; this pre-builds them for -# amd64 and arm64. The wheels live at /wheels/*.whl inside the image. +# Python wheel builders (causal-conv1d, mamba-ssm, av, opencv-python-headless). +# CUDA extensions only ship source on PyPI; av/opencv bundle FFmpeg. Pre-built for +# amd64 and arm64. Wheels live at /wheels/*.whl inside each image. target "causal-conv1d-wheel" { target = "causal-conv1d-wheel" context = "." - dockerfile = "docker/base/Dockerfile.mamba-wheel" + dockerfile = "docker/base/Dockerfile.python-wheels" cache-to = maybe_registry_cache_to("causal-conv1d-wheel") cache-from = maybe_registry_cache_from("causal-conv1d-wheel") tags = wheel_tags("causal-conv1d-wheel") @@ -523,7 +537,7 @@ target "causal-conv1d-wheel" { target "mamba-ssm-wheel" { target = "mamba-ssm-wheel" context = "." - dockerfile = "docker/base/Dockerfile.mamba-wheel" + dockerfile = "docker/base/Dockerfile.python-wheels" cache-to = maybe_registry_cache_to("mamba-ssm-wheel") cache-from = maybe_registry_cache_from("mamba-ssm-wheel") tags = wheel_tags("mamba-ssm-wheel") @@ -536,6 +550,17 @@ target "mamba-ssm-wheel" { platforms = get_platforms() } +target "ffmpeg-vlm-wheel" { + target = "ffmpeg-vlm-wheel" + context = "." + dockerfile = "docker/base/Dockerfile.python-wheels" + cache-to = maybe_registry_cache_to("ffmpeg-vlm-wheel") + cache-from = maybe_registry_cache_from("ffmpeg-vlm-wheel") + tags = wheel_tags("ffmpeg-vlm-wheel") + output = image_output() + platforms = get_platforms() +} + target "safe-synthesizer-tasks-docker" { target = "runtime" @@ -698,7 +723,7 @@ target "automodel-platform-workspace" { target "nmp-automodel-base-builder" { target = "nmp-automodel-base" context = "." - dockerfile = "docker/Dockerfile.nmp-automodel-base" + dockerfile = "docker/automodel/Dockerfile.nmp-automodel-base" no-cache-filter = ["automodel-clone"] cache-to = maybe_registry_cache_to("nmp-automodel-base") cache-from = maybe_registry_cache_from("nmp-automodel-base") @@ -707,6 +732,7 @@ target "nmp-automodel-base-builder" { contexts = { causal-conv1d-wheel-image = causal_conv1d_wheel_context() mamba-ssm-wheel-image = mamba_ssm_wheel_context() + ffmpeg-vlm-wheel-image = ffmpeg_vlm_wheel_context() } platforms = get_platforms() } @@ -714,7 +740,7 @@ target "nmp-automodel-base-builder" { target "nmp-automodel-tasks-docker" { target = "runtime" context = "." - dockerfile = "docker/Dockerfile.nmp-automodel-tasks" + dockerfile = "docker/automodel/Dockerfile.nmp-automodel-tasks" contexts = { platform-workspace = "target:automodel-platform-workspace" nmp-automodel-base = automodel_base_context() @@ -729,7 +755,7 @@ target "nmp-automodel-tasks-docker" { target "nmp-automodel-training-docker" { target = "runtime" context = "." - dockerfile = "docker/Dockerfile.nmp-automodel-training" + dockerfile = "docker/automodel/Dockerfile.nmp-automodel-training" contexts = { platform-workspace = "target:automodel-platform-workspace" nmp-automodel-base = automodel_base_context() @@ -744,7 +770,7 @@ target "nmp-automodel-training-docker" { target "nmp-automodel-tasks-smoke-test" { target = "smoke-test" context = "." - dockerfile = "docker/Dockerfile.nmp-automodel-tasks" + dockerfile = "docker/automodel/Dockerfile.nmp-automodel-tasks" contexts = { platform-workspace = "target:automodel-platform-workspace" nmp-automodel-base = automodel_base_context() @@ -760,7 +786,7 @@ target "nmp-automodel-tasks-smoke-test" { target "nmp-automodel-training-smoke-test" { target = "smoke-test" context = "." - dockerfile = "docker/Dockerfile.nmp-automodel-training" + dockerfile = "docker/automodel/Dockerfile.nmp-automodel-training" contexts = { platform-workspace = "target:automodel-platform-workspace" nmp-automodel-base = automodel_base_context() diff --git a/docker/Dockerfile.nmp-unsloth-training b/docker/Dockerfile.nmp-unsloth-training index 8c5d31ae03..cf3a384756 100644 --- a/docker/Dockerfile.nmp-unsloth-training +++ b/docker/Dockerfile.nmp-unsloth-training @@ -13,10 +13,10 @@ # blocks uv from installing/upgrading torch into the venv so the NGC # base's PyTorch + CUDA remain the runtime stack. # 1b. bitsandbytes — compiled from source against NGC CUDA 13.2 (same pattern -# as docker/Dockerfile.nmp-automodel-base). PyPI wheels only ship through +# as docker/automodel/Dockerfile.nmp-automodel-base). PyPI wheels only ship through # cuda130; source build replaces the wheel from step 1. # 1c. mamba-ssm + causal-conv1d — prebuilt cu13.2 / cp312 wheels (shared with -# docker/Dockerfile.nmp-automodel-base). +# docker/automodel/Dockerfile.nmp-automodel-base). # 1d. flash-attn — optional for unsloth and currently NOT installed (see the # commented TODO below). Without it Unsloth falls back when xformers is # also missing (common on newer CUDA stacks), logging "FA2 = False / @@ -28,14 +28,14 @@ # Default tag: `local` (override via BAKE_TAG at build time). # NGC PyTorch base. 26.05-py3 ships PyTorch 2.12 + CUDA 13.2 + Python 3.12 (aligned with -# docker/Dockerfile.nmp-automodel-base). Override at build time: +# docker/automodel/Dockerfile.nmp-automodel-base). Override at build time: # --set nmp-unsloth-training.args.PYTORCH_BASE=... ARG PYTORCH_BASE=nvcr.io/nvidia/pytorch:26.05-py3 # Prebuilt CUDA-extension wheels (mamba-ssm + causal-conv1d), shared with -# docker/Dockerfile.nmp-automodel-base. The bake `nmp-unsloth-training` target +# docker/automodel/Dockerfile.nmp-automodel-base. The bake `nmp-unsloth-training` target # resolves these contexts to the causal-conv1d-wheel / mamba-ssm-wheel images -# (see docker-bake.hcl + docker/base/Dockerfile.mamba-wheel). Local builds need +# (see docker-bake.hcl + docker/base/Dockerfile.python-wheels). Local builds need # `USE_LOCAL_WHEELS=1` (build the wheel targets) or a reachable WHEELS_REGISTRY. FROM causal-conv1d-wheel-image AS causal-conv1d-wheel-src FROM mamba-ssm-wheel-image AS mamba-ssm-wheel-src @@ -153,7 +153,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ -e /app/packages/nemo_platform_plugin \ -e /app/packages/nmp_common \ -e /app/packages/nmp_customization_common \ - -e "/app/services/unsloth[integrations]" + -e "/app/services/unsloth" # hf-transfer can pull huggingface-hub 1.x — install then re-pin hub + transformers. RUN --mount=type=cache,target=/root/.cache/uv \ @@ -179,6 +179,10 @@ RUN --mount=type=cache,target=/root/.cache/uv \ "mlflow-skinny>=3.11.1,<3.12.0" # Stale NGC system site-packages (verified on nvcr.io/nvidia/pytorch:26.05-py3). +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --only-upgrade openssl libssl3t64 && \ + rm -rf /var/lib/apt/lists/* + RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/aiohttp \ /usr/local/lib/python3.12/dist-packages/aiohttp-*.dist-info \ @@ -199,7 +203,13 @@ RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/wandb-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mlflow \ /usr/local/lib/python3.12/dist-packages/mlflow-*.dist-info \ - /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info + /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info \ + /usr/local/lib/python3.12/dist-packages/jupyter_server \ + /usr/local/lib/python3.12/dist-packages/jupyter_server-*.dist-info \ + /usr/local/cuda/NsightSystems-cli-* \ + /usr/local/bin/nsys \ + /usr/local/cuda/bin/nsys + ENTRYPOINT ["/opt/venv/bin/python"] CMD ["-m", "nmp.unsloth.tasks.training", "--help"] diff --git a/docker/Dockerfile.nmp-automodel-base b/docker/automodel/Dockerfile.nmp-automodel-base similarity index 80% rename from docker/Dockerfile.nmp-automodel-base rename to docker/automodel/Dockerfile.nmp-automodel-base index d9180a60a4..39e83e6f69 100644 --- a/docker/Dockerfile.nmp-automodel-base +++ b/docker/automodel/Dockerfile.nmp-automodel-base @@ -11,6 +11,7 @@ ARG PYTORCH_BASE=nvcr.io/nvidia/pytorch:26.05-py3 FROM causal-conv1d-wheel-image AS causal-conv1d-wheel-src FROM mamba-ssm-wheel-image AS mamba-ssm-wheel-src +FROM ffmpeg-vlm-wheel-image AS ffmpeg-vlm-wheel-src FROM alpine/git AS automodel-clone ARG AUTOMODEL_COMMIT @@ -95,18 +96,36 @@ RUN --mount=type=cache,target=/root/.cache/uv \ "black>=26.3.1,<27" \ "GitPython>=3.1.50,<4" \ "jaraco-context>=6.1.0,<7" \ - "jupyter-server>=2.18.0,<3" \ + "jupyter-server>=2.20.0,<3" \ "jupyterlab>=4.5.7,<5" \ "mistune>=3.2.1,<4" \ "notebook>=7.5.6,<8" \ "onnx>=1.21.0,<2" \ "pillow>=12.2.0,<13" \ "pyasn1>=0.6.3,<1" \ + "pyarrow>=23.0.1,<24" \ + "msgpack>=1.2.1,<2" \ + "cryptography>=48.0.1,<49" \ "tornado>=6.5.5,<7" \ "urllib3>=2.7.0,<3" \ "mlflow-skinny>=3.11.1,<3.12.0" \ "grpcio>=1.81.1,<2" \ - "wandb==0.27.2" + "wandb>=0.28.0,<1" + +# Replace PyPI av/opencv (bundled FFmpeg < 8.1.2) with custom wheels from ffmpeg-vlm-wheel. +# vlm sync pulls PyPI copies transitively; drop them before installing our manylinux wheels. +# PyAV 17.x uses cp311-abi3 (stable ABI) — compatible with cp312, not cp312-cp312 tagged. +RUN --mount=from=ffmpeg-vlm-wheel-src,target=/tmp/ffmpeg-vlm-wheel-src,readonly \ + rm -rf \ + /opt/venv/lib/python*/site-packages/av \ + /opt/venv/lib/python*/site-packages/av-*.dist-info \ + /opt/venv/lib/python*/site-packages/av.libs \ + /opt/venv/lib/python*/site-packages/cv2 \ + /opt/venv/lib/python*/site-packages/opencv_python_headless.libs \ + /opt/venv/lib/python*/site-packages/opencv_python_headless-*.dist-info && \ + uv pip install --no-cache-dir --no-deps \ + /tmp/ffmpeg-vlm-wheel-src/wheels/av-*-abi3-manylinux_2_28_*.whl \ + /tmp/ffmpeg-vlm-wheel-src/wheels/opencv_python_headless-*cp312*.whl # Published base image (same filesystem as builder). FROM ${PYTORCH_BASE} AS nmp-automodel-base @@ -119,6 +138,12 @@ COPY --from=ghcr.io/astral-sh/uv:0.9.14 /uv /bin/uv # Stale copies under NGC system site-packages (verified on nvcr.io/nvidia/pytorch:26.05-py3). # CVE scanners read dist-packages even when --system-site-packages resolves imports from /opt/venv. # rm -rf (not pip uninstall) avoids corrupted dist-info RECORDs on the NGC base image. +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --only-upgrade openssl libssl3t64 && \ + rm -rf /var/lib/apt/lists/* + +# NGC ships Nsight Systems (~585 MB); not used by nmp-automodel training. +# Cleanup stale NGC image packages. RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/aiohttp \ /usr/local/lib/python3.12/dist-packages/aiohttp-*.dist-info \ @@ -141,7 +166,12 @@ RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/wandb-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mlflow \ /usr/local/lib/python3.12/dist-packages/mlflow-*.dist-info \ - /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info + /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info \ + /usr/local/lib/python3.12/dist-packages/jupyter_server \ + /usr/local/lib/python3.12/dist-packages/jupyter_server-*.dist-info \ + /usr/local/cuda/NsightSystems-cli-* \ + /usr/local/bin/nsys \ + /usr/local/cuda/bin/nsys ENV VIRTUAL_ENV=/opt/venv \ UV_PROJECT_ENVIRONMENT=/opt/venv \ diff --git a/docker/Dockerfile.nmp-automodel-tasks b/docker/automodel/Dockerfile.nmp-automodel-tasks similarity index 100% rename from docker/Dockerfile.nmp-automodel-tasks rename to docker/automodel/Dockerfile.nmp-automodel-tasks diff --git a/docker/Dockerfile.nmp-automodel-training b/docker/automodel/Dockerfile.nmp-automodel-training similarity index 99% rename from docker/Dockerfile.nmp-automodel-training rename to docker/automodel/Dockerfile.nmp-automodel-training index 81d21df1c1..f5a08cbe9d 100644 --- a/docker/Dockerfile.nmp-automodel-training +++ b/docker/automodel/Dockerfile.nmp-automodel-training @@ -40,7 +40,6 @@ RUN --mount=type=cache,target=/root/.cache/uv \ uv pip install --python ${VIRTUAL_ENV}/bin/python --no-cache --no-deps \ -e /opt/Automodel - ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" ENTRYPOINT ["/opt/venv/bin/python"] CMD ["-m", "nmp.automodel.tasks.training", "--help"] diff --git a/docker/automodel/README.md b/docker/automodel/README.md index 8803a6412a..a31e370aa3 100644 --- a/docker/automodel/README.md +++ b/docker/automodel/README.md @@ -1,12 +1,14 @@ # nmp-automodel container images +All Automodel Docker build files live under **`docker/automodel/`** (wheel vendor script: `docker/base/build-ffmpeg-vendor.sh`). + Three images for the **nmp-automodel** customization backend. Published as flat repo names under **`my-registry/nemo-platform-dev/nmp-automodel-*`** (no nested `nmp/...` path — some registries reject that on push). | Image | Dockerfile | Role | |-------|------------|------| -| `nmp-automodel-base` | `Dockerfile.nmp-automodel-base` | PyTorch 26.05 + Automodel + `mamba-ssm` / `causal-conv1d` wheels | -| `nmp-automodel-tasks` | `Dockerfile.nmp-automodel-tasks` | Platform task glue (`file_io`, `model_entity`, `model_spec`); GPU-capable base | -| `nmp-automodel-training` | `Dockerfile.nmp-automodel-training` | Training step (`nmp.automodel.tasks.training`) | +| `nmp-automodel-base` | `docker/automodel/Dockerfile.nmp-automodel-base` | PyTorch 26.05 + Automodel + `mamba-ssm` / `causal-conv1d` wheels | +| `nmp-automodel-tasks` | `docker/automodel/Dockerfile.nmp-automodel-tasks` | Platform task glue (`file_io`, `model_entity`, `model_spec`); GPU-capable base | +| `nmp-automodel-training` | `docker/automodel/Dockerfile.nmp-automodel-training` | Training step (`nmp.automodel.tasks.training`) | Full references (default tag `local`): diff --git a/docker/automodel/no_override_requirements.txt b/docker/automodel/no_override_requirements.txt index bbcc805c18..037bf8dfdc 100644 --- a/docker/automodel/no_override_requirements.txt +++ b/docker/automodel/no_override_requirements.txt @@ -10,4 +10,4 @@ safetensors; sys_platform == 'never' numpy; sys_platform == 'never' # Keep W&B's bundled wandb-core binary on a build with patched go-git/go-billy. -wandb==0.27.2 +wandb==0.28.0 diff --git a/docker/automodel/pyproject.workspace.toml b/docker/automodel/pyproject.workspace.toml index 6018968fda..f576d9da0b 100644 --- a/docker/automodel/pyproject.workspace.toml +++ b/docker/automodel/pyproject.workspace.toml @@ -8,6 +8,8 @@ requires-python = ">=3.11,<3.14" [tool.uv] required-version = ">=0.9.14,<0.10.0" +# greenlet 3.5.x ships x86_64-only wheels today; cap until aarch64 wheels land. +constraint-dependencies = ["greenlet>=3.0.0,<3.5"] [tool.uv.workspace] members = [ diff --git a/docker/base/Dockerfile.mamba-wheel b/docker/base/Dockerfile.python-wheels similarity index 74% rename from docker/base/Dockerfile.mamba-wheel rename to docker/base/Dockerfile.python-wheels index c648002f35..6d16a08b80 100644 --- a/docker/base/Dockerfile.mamba-wheel +++ b/docker/base/Dockerfile.python-wheels @@ -1,14 +1,14 @@ # syntax=docker/dockerfile:1 ####### -# Mamba Wheel Builder +# Python Wheel Builder # # Builds Python wheels for: # - causal-conv1d (CUDA extension required by mamba-ssm) # - mamba-ssm (selective state space model) +# - av + opencv-python-headless (FFmpeg 8.1.2 bundled wheels for nspect / VLM) # -# Both only ship source distributions on PyPI and require nvcc to compile. -# The two builds are independent stages so BuildKit runs them in parallel. -# Each image stores its wheel at /wheels/*.whl. +# causal-conv1d / mamba-ssm only ship source on PyPI and require nvcc. +# av / opencv wheels bundle FFmpeg; upstream PyPI wheels lag nspect 8.1.2. # Build via the nmp-automodel-gpu-wheels bake group. # # Build args: @@ -16,6 +16,9 @@ # MAMBA_22_COMMIT - git SHA or tag to build # CUDA_VERSION - CUDA devel image version (default: 12.8.1) # TORCH_CUDA_ARCH_LIST - semicolon-separated SM targets (default: "8.0;8.6;9.0") +# FFMPEG_VERSION - FFmpeg for av/opencv wheels (default: 8.1.2) +# PYAV_VERSION - PyAV git tag (default: v17.1.0) +# OPENCV_PYTHON_GIT_TAG - opencv-python git tag (92 = PyPI 4.13.0.92) ####### ARG CUDA_VERSION=12.8.1 @@ -271,3 +274,85 @@ COPY --from=mamba-ssm-25-wheel-builder-py312 /wheels /wheels COPY --from=mamba-ssm-23-wheel-builder-py312 /wheels /wheels COPY --from=mamba-ssm-23-wheel-builder-py312-cu13.1.1 /wheels /wheels/cu13.1.1 COPY --from=mamba-ssm-23-wheel-builder-py312-cu13.2 /wheels /wheels/cu13.2 + +# ============================================================================= +# FFmpeg / VLM wheels (manylinux_2_28, cp312) — av + opencv-python-headless +# ============================================================================= +FROM quay.io/pypa/manylinux_2_28_x86_64:latest AS ffmpeg-vendor-base-py312-amd64 +FROM quay.io/pypa/manylinux_2_28_aarch64:latest AS ffmpeg-vendor-base-py312-arm64 + +ARG TARGETARCH +FROM ffmpeg-vendor-base-py312-${TARGETARCH} AS ffmpeg-vendor-base-py312 + +ARG FFMPEG_VERSION=8.1.2 + +ENV FFMPEG_VERSION=${FFMPEG_VERSION} \ + FFMPEG_PREFIX=/ffmpeg_build \ + PKG_CONFIG_PATH=/ffmpeg_build/lib/pkgconfig:/usr/local/lib/pkgconfig \ + LD_LIBRARY_PATH=/ffmpeg_build/lib:${LD_LIBRARY_PATH:-} + +RUN yum install -y \ + curl \ + git \ + nasm \ + yasm \ + openssl-devel \ + pkgconfig \ + && yum clean all + +COPY docker/base/build-ffmpeg-vendor.sh /usr/local/bin/build-ffmpeg-vendor.sh +RUN chmod +x /usr/local/bin/build-ffmpeg-vendor.sh && \ + build-ffmpeg-vendor.sh + +# ============================================================================= +# av wheel — PyAV against shared FFmpeg 8.1.2 +# ============================================================================= +FROM ffmpeg-vendor-base-py312 AS av-wheel-builder-py312 + +ARG PYAV_VERSION=v17.1.0 + +ENV PKG_CONFIG_PATH=/ffmpeg_build/lib/pkgconfig \ + LD_LIBRARY_PATH=/ffmpeg_build/lib:${LD_LIBRARY_PATH:-} + +RUN mkdir -p /wheels /tmp/wheelhouse && \ + /opt/python/cp312-cp312/bin/pip install -U "pip<26" "cython>=3.1,<4" "numpy>=2.0" auditwheel && \ + git clone --depth 1 --branch ${PYAV_VERSION} https://github.com/PyAV-Org/PyAV.git /src/PyAV && \ + cd /src/PyAV && \ + /opt/python/cp312-cp312/bin/pip wheel . --no-deps -w /tmp/wheelhouse && \ + auditwheel repair /tmp/wheelhouse/av-*.whl -w /wheels && \ + rm -rf /src/PyAV /tmp/wheelhouse + +# ============================================================================= +# opencv-python-headless wheel — opencv-python 4.13 against shared FFmpeg 8.1.2 +# ============================================================================= +FROM ffmpeg-vendor-base-py312 AS opencv-headless-wheel-builder-py312 + +ARG OPENCV_PYTHON_GIT_TAG=92 + +ENV CI_BUILD=1 \ + ENABLE_HEADLESS=1 \ + PKG_CONFIG_PATH=/ffmpeg_build/lib/pkgconfig:/usr/local/lib/pkgconfig \ + LD_LIBRARY_PATH=/ffmpeg_build/lib:${LD_LIBRARY_PATH:-} \ + LDFLAGS=-L/ffmpeg_build/lib + +RUN yum install -y \ + zlib-devel \ + libjpeg-turbo-devel \ + && yum clean all + +RUN mkdir -p /wheels /tmp/wheelhouse && \ + /opt/python/cp312-cp312/bin/pip install -U "pip<26" "numpy>=2.0" auditwheel && \ + git clone --depth 1 --branch ${OPENCV_PYTHON_GIT_TAG} https://github.com/opencv/opencv-python.git /src/opencv-python && \ + cd /src/opencv-python && \ + git submodule update --init --recursive opencv && \ + OPENCV_PYTHON_SKIP_GIT_COMMANDS=1 \ + /opt/python/cp312-cp312/bin/pip wheel . --no-deps -w /tmp/wheelhouse && \ + auditwheel repair /tmp/wheelhouse/opencv_python_headless-*.whl -w /wheels && \ + rm -rf /src/opencv-python /tmp/wheelhouse + +# The final ffmpeg-vlm-wheel image contains (one arch per platform build): +# - av-*-cp311-abi3-manylinux_2_28_*.whl (PyAV stable ABI; works on cp312) +# - opencv_python_headless-*-cp312-*.whl +FROM scratch AS ffmpeg-vlm-wheel +COPY --from=av-wheel-builder-py312 /wheels /wheels +COPY --from=opencv-headless-wheel-builder-py312 /wheels /wheels diff --git a/docker/base/build-ffmpeg-vendor.sh b/docker/base/build-ffmpeg-vendor.sh new file mode 100644 index 0000000000..c8cade3c6d --- /dev/null +++ b/docker/base/build-ffmpeg-vendor.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# Build FFmpeg ${FFMPEG_VERSION} into ${FFMPEG_PREFIX} (default /ffmpeg_build). +# Used by docker/base/Dockerfile.python-wheels ffmpeg-vlm wheel stages (av + opencv-python-headless). +set -euo pipefail + +FFMPEG_VERSION="${FFMPEG_VERSION:-8.1.2}" +FFMPEG_PREFIX="${FFMPEG_PREFIX:-/ffmpeg_build}" +JOBS="${JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4)}" + +cleanup_work() { + cd / + rm -rf "${1:?}" +} + +if [[ -f "${FFMPEG_PREFIX}/lib/pkgconfig/libavcodec.pc" ]]; then + echo "Using cached FFmpeg at ${FFMPEG_PREFIX}" + pkg-config --modversion libavcodec + exit 0 +fi + +mkdir -p "${FFMPEG_PREFIX}" + +# libvpx (opencv-python manylinux ffmpeg configure enables --enable-libvpx) +VPX_VERSION="${VPX_VERSION:-v1.15.2}" +if [[ ! -f "${FFMPEG_PREFIX}/lib/pkgconfig/vpx.pc" ]]; then + work="$(mktemp -d)" + git clone --depth 1 -b "${VPX_VERSION}" https://chromium.googlesource.com/webm/libvpx.git "${work}/libvpx" + cd "${work}/libvpx" + vpx_args=( + --prefix="${FFMPEG_PREFIX}" + --disable-examples + --disable-unit-tests + --enable-vp9-highbitdepth + --enable-pic + --enable-shared + ) + if [[ "$(uname -m)" == "x86_64" ]]; then + vpx_args+=(--as=yasm) + fi + ./configure "${vpx_args[@]}" + make -j"${JOBS}" + make install + cleanup_work "${work}" +fi + +# x264 (PyAV build-deps enables --enable-libx264) +if [[ ! -f "${FFMPEG_PREFIX}/lib/pkgconfig/x264.pc" ]]; then + work="$(mktemp -d)" + git clone --depth 1 https://code.videolan.org/videolan/x264.git "${work}/x264" + cd "${work}/x264" + ./configure --prefix="${FFMPEG_PREFIX}" --enable-shared --enable-pic + make -j"${JOBS}" + make install + cleanup_work "${work}" +fi + +work="$(mktemp -d)" +curl -fsSL "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz" -o "${work}/ffmpeg.tar.gz" +tar -xf "${work}/ffmpeg.tar.gz" -C "${work}" +cd "${work}/ffmpeg-${FFMPEG_VERSION}" + +PKG_CONFIG_PATH="${FFMPEG_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH:-}" +export PKG_CONFIG_PATH + +./configure \ + --prefix="${FFMPEG_PREFIX}" \ + --extra-cflags="-I${FFMPEG_PREFIX}/include" \ + --extra-ldflags="-L${FFMPEG_PREFIX}/lib" \ + --disable-doc \ + --disable-static \ + --enable-shared \ + --enable-pic \ + --enable-gpl \ + --enable-version3 \ + --enable-libvpx \ + --enable-libx264 + +make -j"${JOBS}" +make install + +echo "/ffmpeg_build/lib/" >> /etc/ld.so.conf.d/ffmpeg-vendor.conf +ldconfig + +"${FFMPEG_PREFIX}/bin/ffmpeg" -version | head -1 +cleanup_work "${work}" diff --git a/docker/locks/README.md b/docker/locks/README.md index 6816818e72..1bf256f989 100644 --- a/docker/locks/README.md +++ b/docker/locks/README.md @@ -5,7 +5,7 @@ reproducible Python build environments. ## Mamba wheel builder lockfiles -`docker/base/Dockerfile.mamba-wheel` uses these lock projects: +`docker/base/Dockerfile.python-wheels` uses these lock projects: - `mamba-wheel-build-py311` - `mamba-wheel-build-py312` diff --git a/docker/unsloth/README.md b/docker/unsloth/README.md index 01218347ea..6f1ce93d21 100644 --- a/docker/unsloth/README.md +++ b/docker/unsloth/README.md @@ -106,7 +106,7 @@ node, a CI cluster runner, or a customer's air-gapped lab. ### 0. Prereqs on the host - NVIDIA driver compatible with the NGC PyTorch base (CUDA 13.1 at the - time of writing; check `Dockerfile.nmp-automodel-base` for the latest + time of writing; check `docker/automodel/Dockerfile.nmp-automodel-base` for the latest pin if unsure). - `nvidia-container-toolkit` installed so Docker can mount GPUs. - Network access to your image registry (`nvcr.io` by default). diff --git a/docker/unsloth/no_override_requirements.txt b/docker/unsloth/no_override_requirements.txt index 1fe89ab099..665afeb4c8 100644 --- a/docker/unsloth/no_override_requirements.txt +++ b/docker/unsloth/no_override_requirements.txt @@ -11,4 +11,4 @@ accelerate; sys_platform == 'never' safetensors; sys_platform == 'never' # Keep W&B's bundled wandb-core binary on a build with patched go-git/go-billy. -wandb==0.27.2 +wandb==0.28.0 diff --git a/pyproject.toml b/pyproject.toml index f267deee12..5c05c3d74f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -264,7 +264,7 @@ constraint-dependencies = [ "cryptography>=46.0.7", "diffusers>=0.38.0", "filelock>=3.20.3", - "jupyter-server>=2.18.0", + "jupyter-server>=2.20.0", "jupyterlab>=4.5.7", "langchain-community>=0.3.31,<0.4", # 0.4.x removes the vertexai import path used by ragas 0.4.3 "langchain-core>=1.4.8", @@ -276,6 +276,7 @@ constraint-dependencies = [ "litellm>=1.83.10", "lxml>=6.1.0", "mistune>=3.2.1", + "msgpack>=1.2.1", "nbconvert>=7.17.1", "nltk>=3.9.4", "pillow>=12.2.0", @@ -320,7 +321,7 @@ override-dependencies = [ "ujson>=5.12.0", # High – nmp-api/cpu-tasks/gpu-tasks "xgrammar>=0.1.32", # High – customizer + nmp-gpu-tasks "fastmcp>=3.2.0", # GHSA-vv7q-7jx5-f767 (Critical) + GHSA-rww4-4w9c-7733 (High); overrides vendored sdk/python/nemo-platform <3 constraint - "wandb>=0.25.1", # CVE-2026-33186 + "wandb>=0.28.0", # wandb-core Go CVEs (nspect); unsloth + training images "click>=8.2.0", # Below CVEs are based on constraints that garak has "langchain-openai>=1.3.3", "litellm>=1.83.10", # CVE-2026-42208 (Critical SQL injection), CVE-2026-40217, and 5 other High CVEs diff --git a/services/automodel/src/nmp/automodel/images.py b/services/automodel/src/nmp/automodel/images.py index 7dfd71ab87..9889745483 100644 --- a/services/automodel/src/nmp/automodel/images.py +++ b/services/automodel/src/nmp/automodel/images.py @@ -12,7 +12,7 @@ TASKS_IMAGE_NAME = "nmp-automodel-tasks" TRAINING_IMAGE_NAME = "nmp-automodel-training" -# Must match ENTRYPOINT in Dockerfile.nmp-automodel-{tasks,training}. +# Must match ENTRYPOINT in docker/automodel/Dockerfile.nmp-automodel-{tasks,training}. # Job specs must set this explicitly: Docker API create() replaces the image # entrypoint when the platform passes entrypoint=[]. AUTOMODEL_PYTHON_ENTRYPOINT = ["/opt/venv/bin/python"] diff --git a/services/unsloth/pyproject.toml b/services/unsloth/pyproject.toml index 810bd052ec..6012feea81 100644 --- a/services/unsloth/pyproject.toml +++ b/services/unsloth/pyproject.toml @@ -13,6 +13,8 @@ dependencies = [ "pydantic-settings>=2.6.1", "httpx>=0.27.0", "tenacity>=8.5.0", + "wandb>=0.28.0", + "mlflow-skinny>=3.11.1,<3.12.0", ] # Heavy ML deps live behind an optional extra. The package itself is @@ -31,12 +33,6 @@ dependencies = [ # command (per unsloth's README), so this extra is mainly for non-container # callers that want a single-package handle. unsloth = ["unsloth[huggingface]"] -# HF Trainer callbacks for integrations.wandb / integrations.mlflow (report_to). -# Container image installs this extra; keep out of core deps so compile/API stay lean. -integrations = [ - "wandb>=0.25.1", - "mlflow-skinny", -] [project.scripts] # Container entrypoints. Each script matches the automodel name pattern for parity. diff --git a/third_party/licenses.jsonl b/third_party/licenses.jsonl index 20459d02e6..c3947475d7 100644 --- a/third_party/licenses.jsonl +++ b/third_party/licenses.jsonl @@ -45,6 +45,7 @@ {"name": "data-designer", "license": "APACHE-2.0", "compatible": true} {"name": "data-designer-config", "license": "APACHE-2.0", "compatible": true} {"name": "data-designer-engine", "license": "APACHE-2.0", "compatible": true} +{"name": "databricks-sdk", "license": "APACHE-2.0", "compatible": true} {"name": "dataclasses-json", "license": "MIT", "compatible": true} {"name": "datasets", "license": "APACHE-2.0", "compatible": true} {"name": "diff-cover", "license": "APACHE-2.0", "compatible": true} @@ -73,6 +74,9 @@ {"name": "flatbuffers", "license": "APACHE-2.0", "compatible": true} {"name": "frozenlist", "license": "APACHE-2.0", "compatible": true} {"name": "fsspec", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "gitdb", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "gitpython", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "google-auth", "license": "APACHE-2.0", "compatible": true} {"name": "googleapis-common-protos", "license": "APACHE-2.0", "compatible": true} {"name": "greenlet", "license": "MIT", "compatible": true} {"name": "grpcio", "license": "APACHE-2.0", "compatible": true} @@ -142,6 +146,7 @@ {"name": "marshmallow", "license": "MIT", "compatible": true} {"name": "mcp", "license": "MIT", "compatible": true} {"name": "mdurl", "license": "MIT", "compatible": true} +{"name": "mlflow-skinny", "license": "APACHE-2.0", "compatible": true} {"name": "mmh3", "license": "MIT", "compatible": true} {"name": "more-itertools", "license": "MIT", "compatible": true} {"name": "mpmath", "license": "BSD-3-CLAUSE", "compatible": true} @@ -217,6 +222,8 @@ {"name": "py-key-value-aio", "license": "APACHE-2.0", "compatible": true} {"name": "py-rust-stemmers", "license": "MIT", "compatible": true} {"name": "pyarrow", "license": "APACHE-2.0", "compatible": true} +{"name": "pyasn1", "license": "BSD-2-CLAUSE", "compatible": true} +{"name": "pyasn1-modules", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "pycparser", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "pydantic", "license": "MIT", "compatible": true} {"name": "pydantic-core", "license": "MIT", "compatible": true} @@ -262,11 +269,13 @@ {"name": "simpleeval", "license": "MIT", "compatible": true} {"name": "six", "license": "MIT", "compatible": true} {"name": "smart-open", "license": "MIT", "compatible": true} +{"name": "smmap", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "sniffio", "license": "APACHE-2.0", "compatible": true} {"name": "soupsieve", "license": "MIT", "compatible": true} {"name": "sqlalchemy", "license": "MIT", "compatible": true} {"name": "sqlfluff", "license": "MIT", "compatible": true} {"name": "sqlmodel", "license": "MIT", "compatible": true} +{"name": "sqlparse", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "sse-starlette", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "starlette", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "streaming-form-data", "license": "MIT", "compatible": true} @@ -298,6 +307,7 @@ {"name": "uvicorn", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "uvloop", "license": "MIT", "compatible": true} {"name": "validators", "license": "MIT", "compatible": true} +{"name": "wandb", "license": "MIT", "compatible": true} {"name": "wasmtime", "license": "APACHE-2.0 WITH LLVM-EXCEPTION", "compatible": true} {"name": "watchdog", "license": "APACHE-2.0", "compatible": true} {"name": "watchfiles", "license": "MIT", "compatible": true} diff --git a/third_party/osv-licenses.json b/third_party/osv-licenses.json index a745b31127..2ba4536cb9 100644 --- a/third_party/osv-licenses.json +++ b/third_party/osv-licenses.json @@ -4966,6 +4966,16 @@ "Apache-2.0" ] }, + { + "package": { + "name": "databricks-sdk", + "version": "0.102.0", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, { "package": { "name": "dataclasses-json", @@ -5246,6 +5256,36 @@ "non-standard" ] }, + { + "package": { + "name": "gitdb", + "version": "4.0.12", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, + { + "package": { + "name": "gitpython", + "version": "3.1.50", + "ecosystem": "PyPI" + }, + "licenses": [ + "BSD-3-Clause" + ] + }, + { + "package": { + "name": "google-auth", + "version": "2.49.1", + "ecosystem": "PyPI" + }, + "licenses": [ + "Apache-2.0" + ] + }, { "package": { "name": "googleapis-common-protos", @@ -7708,6 +7748,16 @@ "MIT" ] }, + { + "package": { + "name": "mlflow-skinny", + "version": "3.11.1", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, { "package": { "name": "mmh3", @@ -9016,6 +9066,26 @@ "non-standard" ] }, + { + "package": { + "name": "pyasn1", + "version": "0.6.3", + "ecosystem": "PyPI" + }, + "licenses": [ + "BSD-2-Clause" + ] + }, + { + "package": { + "name": "pyasn1-modules", + "version": "0.4.2", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, { "package": { "name": "pycparser", @@ -9597,6 +9667,16 @@ "MIT" ] }, + { + "package": { + "name": "smmap", + "version": "5.0.3", + "ecosystem": "PyPI" + }, + "licenses": [ + "BSD-3-Clause" + ] + }, { "package": { "name": "sniffio", @@ -10087,6 +10167,16 @@ "MIT" ] }, + { + "package": { + "name": "sqlparse", + "version": "0.5.5", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, { "package": { "name": "sse-starlette", @@ -10397,6 +10487,16 @@ "MIT" ] }, + { + "package": { + "name": "wandb", + "version": "0.28.0", + "ecosystem": "PyPI" + }, + "licenses": [ + "non-standard" + ] + }, { "package": { "name": "wasmtime", @@ -10707,15 +10807,15 @@ }, { "name": "Apache-2.0", - "count": 80 + "count": 81 }, { "name": "non-standard", - "count": 42 + "count": 48 }, { "name": "BSD-3-Clause", - "count": 30 + "count": 32 }, { "name": "ISC", @@ -10727,7 +10827,7 @@ }, { "name": "BSD-2-Clause", - "count": 2 + "count": 3 }, { "name": "MPL-2.0", diff --git a/third_party/requirements-main.txt b/third_party/requirements-main.txt index 73969fd325..42c6101b9e 100644 --- a/third_party/requirements-main.txt +++ b/third_party/requirements-main.txt @@ -408,6 +408,7 @@ cachetools==7.0.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') o --hash=sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990 \ --hash=sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114 # via + # mlflow-skinny # py-key-value-aio # pymilvus caio==0.9.25 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ @@ -521,12 +522,14 @@ click==8.3.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (pl --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via # litellm + # mlflow-skinny # nltk # nvidia-nat-core # rich-toolkit # sqlfluff # typer # uvicorn + # wandb clickhouse-connect==0.15.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:1ff5d10c6e49d36ee6941f52c4233f2bfb4198e9c726fed224f725974a667e37 \ --hash=sha256:4bf70933ab860bd2f0a872db624603706bed400c915c7aeef382956cf8ebbdf3 \ @@ -548,7 +551,9 @@ clickhouse-connect==0.15.1 ; (platform_machine == 'arm64' and sys_platform == 'd cloudpickle==3.1.2 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a - # via nemo-evaluator-plugin + # via + # mlflow-skinny + # nemo-evaluator-plugin colorama==0.4.6 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 @@ -595,6 +600,7 @@ cryptography==46.0.7 ; (platform_machine == 'arm64' and sys_platform == 'darwin' # via # authlib # data-designer-engine + # google-auth # joserfc # langchain-litellm # nemo-anonymizer @@ -628,6 +634,10 @@ data-designer-engine==0.6.1 ; (platform_machine == 'arm64' and sys_platform == ' --hash=sha256:f0d79b7e41e034ed31e946c617637ce1242a4283eb1031a8d5739d51fe85cfd5 \ --hash=sha256:fc75c0cb28aa8da0a98fe9a2ee101cdf05fb41d0cac01a9a4d7d2c40e1e72077 # via data-designer +databricks-sdk==0.102.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:75d1253276ee8f3dd5e7b00d62594b7051838435e618f74a8570a6dbd723ec12 \ + --hash=sha256:8fa5f82317ee27cc46323c6e2543d2cfefb4468653f92ba558271043c6f72fb9 + # via mlflow-skinny dataclasses-json==0.6.7 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a \ --hash=sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0 @@ -736,6 +746,7 @@ fastapi==0.138.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or --hash=sha256:b6f54fd1bd72c80b0f899f172c61a600f6f7af9b43d4d772a018f35624048cb0 \ --hash=sha256:d445a4877636ad191e7053e08c9bf98cb921a6756776848400bb773d1740c061 # via + # mlflow-skinny # nemo-anonymizer-plugin # nemo-data-designer-plugin # nemo-deployments-plugin @@ -920,6 +931,20 @@ fsspec==2025.3.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # nemo-platform-sdk # nemo-safe-synthesizer-plugin # nmp-guardrails +gitdb==4.0.12 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ + --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf + # via gitpython +gitpython==3.1.50 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc \ + --hash=sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9 + # via + # mlflow-skinny + # wandb +google-auth==2.49.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:16d40da1c3c5a0533f57d268fe72e0ebb0ae1cc3b567024122651c045d879b64 \ + --hash=sha256:195ebe3dca18eddd1b3db5edc5189b76c13e96f29e73043b923ebcf3f1a860f7 + # via databricks-sdk googleapis-common-protos==1.73.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:13114f0e9d2391756a0194c3a8131974ed7bffb06086569ba193364af59163b6 \ --hash=sha256:e51f09eb0a43a8602f5a915870972e6b4a394088415c79d79605a46d8e826ee8 @@ -1109,6 +1134,7 @@ importlib-metadata==8.5.0 ; (platform_machine == 'arm64' and sys_platform == 'da # via # keyring # litellm + # mlflow-skinny iniconfig==2.3.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 @@ -1558,6 +1584,10 @@ mdurl==0.1.2 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (pl --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py +mlflow-skinny==3.11.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:82ffd5f6980320b4ac19f741e7a754faa1d01707e632b002ea68e04fd25a0535 \ + --hash=sha256:86ce63491349f6713afc8a4ef0bf77a8314d0e79e03753cb150d6c860a0b0475 + # via nmp-unsloth mmh3==5.2.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082 \ --hash=sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1 \ @@ -1857,6 +1887,7 @@ opentelemetry-api==1.43.0 ; (platform_machine == 'arm64' and sys_platform == 'da --hash=sha256:20acf45e9b21851926835292e4045d290acade1edd2ff3de86d2f069687ba1fd # via # fastmcp + # mlflow-skinny # nemoguardrails # nvidia-nat-opentelemetry # opentelemetry-distro @@ -1952,6 +1983,7 @@ opentelemetry-proto==1.43.0 ; (platform_machine == 'arm64' and sys_platform == ' --hash=sha256:224778df17e1f3fafeaaa21d874236ca5f6ffc2f86e0899298ec7351aac27924 \ --hash=sha256:c58f1f7ef84bc7dc2834016c0c37fe0081dde7ca9f6339be1970fbf9cdaaa90d # via + # mlflow-skinny # nmp-files # nmp-intake # opentelemetry-exporter-otlp-proto-common @@ -1961,6 +1993,7 @@ opentelemetry-sdk==1.43.0 ; (platform_machine == 'arm64' and sys_platform == 'da --hash=sha256:d1323a547c1ce69d6a069a17a44b7da82bb8b332051ecb074041f87642c86823 \ --hash=sha256:d8187c81c162df9913e4003dd6485f7390d9a24fc17026ec7387b8b8218b08e9 # via + # mlflow-skinny # nmp-common # nmp-guardrails # nvidia-nat-opentelemetry @@ -2066,6 +2099,7 @@ packaging==26.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # langchain-core # langsmith # marshmallow + # mlflow-skinny # ngcsdk # onnxruntime # opentelemetry-instrumentation @@ -2073,6 +2107,7 @@ packaging==26.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # optuna # pytest # transformers + # wandb pandas==2.3.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791 \ --hash=sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac \ @@ -2177,6 +2212,7 @@ platformdirs==4.9.4 ; (platform_machine == 'arm64' and sys_platform == 'darwin') # fastmcp # nvidia-nat-core # sqlfluff + # wandb pluggy==1.6.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 @@ -2272,12 +2308,15 @@ protobuf==6.33.6 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 # via + # databricks-sdk # googleapis-common-protos + # mlflow-skinny # nemoguardrails # nemoplatform # onnxruntime # opentelemetry-proto # pymilvus + # wandb psutil==7.2.2 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ @@ -2380,6 +2419,14 @@ pyarrow==22.0.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # data-designer-config # datasets # nemo-evaluator-sdk +pyasn1==0.6.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf \ + --hash=sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde + # via pyasn1-modules +pyasn1-modules==0.4.2 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 + # via google-auth pycparser==3.0 ; (implementation_name != 'PyPy' and platform_machine == 'arm64' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (implementation_name != 'PyPy' and platform_machine == 'aarch64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') \ --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 @@ -2405,6 +2452,7 @@ pydantic==2.12.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # langsmith # litellm # mcp + # mlflow-skinny # nemo-anonymizer # nemo-auditor-plugin # nemo-automodel-plugin @@ -2441,6 +2489,7 @@ pydantic==2.12.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # ragas # sqlmodel # switchyard-vendored + # wandb pydantic-core==2.41.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ @@ -2572,6 +2621,7 @@ python-dotenv==1.2.2 ; (platform_machine == 'arm64' and sys_platform == 'darwin' # exa-py # fastmcp # litellm + # mlflow-skinny # nvidia-nat-core # pydantic-settings # pymilvus @@ -2628,6 +2678,7 @@ pyyaml==6.0.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (p # langchain-classic # langchain-community # langchain-core + # mlflow-skinny # nemo-agents-plugin # nemo-anonymizer-plugin # nemo-auditor-plugin @@ -2649,6 +2700,7 @@ pyyaml==6.0.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (p # sqlfluff # transformers # uvicorn + # wandb ragas==0.4.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:1eb1f61dbc8613ad014fdb8d630cbe9a1caec1ea01664a106993cb756128c001 \ --hash=sha256:ef1d75f674c294e9a6e7d8e9ad261b6bf4697dad1c9cbd1a756ba7a6b4849a38 @@ -2721,6 +2773,7 @@ requests==2.33.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a # via # data-designer-config + # databricks-sdk # datasets # docker # exa-py @@ -2734,6 +2787,7 @@ requests==2.33.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # langchain-community # langchain-nvidia-ai-endpoints # langsmith + # mlflow-skinny # nemo-platform-ext # nemo-platform-sdk # nemo-safe-synthesizer-plugin @@ -2745,6 +2799,7 @@ requests==2.33.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # requests-oauthlib # requests-toolbelt # tiktoken + # wandb # wikipedia requests-oauthlib==2.0.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ @@ -2970,7 +3025,9 @@ secretstorage==3.5.0 ; (platform_machine == 'aarch64' and sys_platform == 'linux sentry-sdk==2.57.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199 \ --hash=sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585 - # via fastapi-cloud-cli + # via + # fastapi-cloud-cli + # wandb setuptools==82.0.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb @@ -3000,6 +3057,10 @@ smart-open==7.0.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') o --hash=sha256:8523ed805c12dff3eaa50e9c903a6cb0ae78800626631c5fe7ea073439847b89 \ --hash=sha256:d3672003b1dbc85e2013e4983b88eb9a5ccfd389b0d4e5015f39a9ee5620ec18 # via streaming-form-data +smmap==5.0.3 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c \ + --hash=sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f + # via gitdb sniffio==1.3.1 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc @@ -3052,6 +3113,10 @@ sqlmodel==0.0.37 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # via # nmp-jobs # nmp-models +sqlparse==0.5.5 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e + # via mlflow-skinny sse-starlette==3.3.4 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:84bb06e58939a8b38d8341f1bc9792f06c2b53f48c608dd207582b664fc8f3c1 \ --hash=sha256:aaf92fc067af8a5427192895ac028e947b484ac01edbc3caf00e7e7137c7bef1 @@ -3241,6 +3306,7 @@ typing-extensions==4.15.0 ; (platform_machine == 'arm64' and sys_platform == 'da # langchain-core # langchain-protocol # mcp + # mlflow-skinny # nemo-platform-sdk # openai # opentelemetry-api @@ -3262,6 +3328,7 @@ typing-extensions==4.15.0 ; (platform_machine == 'arm64' and sys_platform == 'da # types-aiobotocore-s3 # typing-inspect # typing-inspection + # wandb typing-inspect==0.9.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f \ --hash=sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78 @@ -3328,6 +3395,7 @@ uvicorn==0.42.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or # fastapi-cloud-cli # fastmcp # mcp + # mlflow-skinny # nemo-safe-synthesizer-plugin # nemoguardrails # nemoplatform @@ -3367,6 +3435,14 @@ validators==0.35.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') --hash=sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a \ --hash=sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd # via ngcsdk +wandb==0.28.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ + --hash=sha256:325b2d0bd88be6eda5db10542499bad3710927f2569c81a84dc5eeaffc76825c \ + --hash=sha256:6dbcba12ab168aa37561f2f32dcdef8713495fc25fa7d30fdc9bfb37989694dd \ + --hash=sha256:8954bc1c62ae43914dce2bebfd1d9957f72350f8fbb78e5cdfe2ca9b6be8a7b8 \ + --hash=sha256:9fec6c908554c2dad33110c1312bc3028cc2e430f0679f16b84f82c8ea801e3b \ + --hash=sha256:b20e5af0fe80e2e2a466b0466a1d60cedcc578dce0f036eca04f4a0adcad95b6 \ + --hash=sha256:c3dab1205a5aca4abbad1eca08902cdba86add0edfa83d8d61b4429d0e79fa87 + # via nmp-unsloth wasmtime==43.0.0 ; (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') \ --hash=sha256:30b042fd4a05d0f8a320baed53fcb971aff8a3789ed6967f4521f87931ace717 \ --hash=sha256:341542e87caf1f2ef7ff648a78827fcef5751e3e9be2ee07a1fcf3a04413c213 \ diff --git a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/overrides.yaml b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/overrides.yaml index 2693160123..90b8ba6626 100644 --- a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/overrides.yaml +++ b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/overrides.yaml @@ -267,3 +267,7 @@ overrides: quack-kernels: Apache-2.0 # https://github.com/Dao-AILab/quack/blob/main/LICENSE crc32c: LGPL-2.1-or-later # https://pypi.org/project/crc32c/ detect-installer: 0BSD # https://pypi.org/project/detect-installer/ + + databricks-sdk: Apache-2.0 # https://github.com/databricks/databricks-sdk-py/blob/main/LICENSE + mlflow-skinny: Apache-2.0 # https://github.com/mlflow/mlflow/blob/master/LICENSE.txt + sqlparse: BSD-3-Clause # https://github.com/andialbrecht/sqlparse/blob/master/LICENSE \ No newline at end of file diff --git a/uv.lock b/uv.lock index 42823dc727..3ef0eeac69 100644 --- a/uv.lock +++ b/uv.lock @@ -77,7 +77,7 @@ constraints = [ { name = "filelock", specifier = ">=3.20.3" }, { name = "gitpython", specifier = ">=3.1.49" }, { name = "json-repair", specifier = "==0.58.7" }, - { name = "jupyter-server", specifier = ">=2.18.0" }, + { name = "jupyter-server", specifier = ">=2.20.0" }, { name = "jupyterlab", specifier = ">=4.5.7" }, { name = "langchain-community", specifier = ">=0.3.31,<0.4" }, { name = "langchain-core", specifier = ">=1.4.8" }, @@ -89,6 +89,7 @@ constraints = [ { name = "lxml", specifier = ">=6.1.0" }, { name = "mako", specifier = ">=1.3.12" }, { name = "mistune", specifier = ">=3.2.1" }, + { name = "msgpack", specifier = ">=1.2.1" }, { name = "nbconvert", specifier = ">=7.17.1" }, { name = "nltk", specifier = ">=3.9.4" }, { name = "pillow", specifier = ">=12.2.0" }, @@ -135,7 +136,7 @@ overrides = [ { name = "sqlfluff", specifier = ">=4.1.0" }, { name = "ujson", specifier = ">=5.12.0" }, { name = "urllib3", specifier = ">=2.7.0" }, - { name = "wandb", specifier = ">=0.25.1" }, + { name = "wandb", specifier = ">=0.28.0" }, { name = "wheel", specifier = ">=0.46.2" }, { name = "xgrammar", specifier = ">=0.1.32" }, ] @@ -2837,7 +2838,7 @@ wheels = [ [[package]] name = "jupyter-server" -version = "2.18.2" +version = "2.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -2859,9 +2860,9 @@ dependencies = [ { name = "traitlets", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "websocket-client", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ca/15/1eacb0fcb79ef86e8a0a79a708e6ad7435f6f223097dd29a4ce861fabc44/jupyter_server-2.18.2.tar.gz", hash = "sha256:06b4f40d8a7a00bb39d5216859c81374a0e7cfefe6d8a5a7facc5a5c37c679a7", size = 753177, upload-time = "2026-05-06T07:04:36.274Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/dc/db3a582633170186f8c8b31298d7eb26ad0eb031a1f53476c258b64eed05/jupyter_server-2.20.0.tar.gz", hash = "sha256:b5778ba337d8015a3dc2b80803ecdd5ac18d3797fddf61a50ea5fb472b4ebe14", size = 756523, upload-time = "2026-06-17T12:09:09.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/50/ecf4f70d65bdb7519b28a33d1b2fee8a4b4ba1ae1a92f15d97e877c5de21/jupyter_server-2.18.2-py3-none-any.whl", hash = "sha256:fa5e46539ded65791838035a2b6001f13e54d5f64b8b3752eb1e91fdd641a5b8", size = 391907, upload-time = "2026-05-06T07:04:34.014Z" }, + { url = "https://files.pythonhosted.org/packages/f3/71/8c002223e873a870f5c41dc69b0a7c922301123e4a31d5d01ecb700aef77/jupyter_server-2.20.0-py3-none-any.whl", hash = "sha256:c3b67c93c471e947c18b5026f04f21614218adb706df8f48227d3ee8e0a7cdcc", size = 393143, upload-time = "2026-06-17T12:09:07.234Z" }, ] [[package]] @@ -7542,6 +7543,7 @@ version = "0.1.0" source = { editable = "services/unsloth" } dependencies = [ { name = "httpx", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "mlflow-skinny", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nemo-platform-plugin", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nemo-platform-sdk", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nmp-common", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -7549,13 +7551,10 @@ dependencies = [ { name = "pydantic", extra = ["email"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "pydantic-settings", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "tenacity", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "wandb", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [package.optional-dependencies] -integrations = [ - { name = "mlflow-skinny", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "wandb", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, -] unsloth = [ { name = "unsloth", extra = ["huggingface"], marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] @@ -7569,7 +7568,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "httpx", specifier = ">=0.27.0" }, - { name = "mlflow-skinny", marker = "extra == 'integrations'" }, + { name = "mlflow-skinny", specifier = ">=3.11.1,<3.12.0" }, { name = "nemo-platform-plugin", editable = "packages/nemo_platform_plugin" }, { name = "nemo-platform-sdk", editable = "sdk/python/nemo-platform" }, { name = "nmp-common", editable = "packages/nmp_common" }, @@ -7578,9 +7577,9 @@ requires-dist = [ { name = "pydantic-settings", specifier = ">=2.6.1" }, { name = "tenacity", specifier = ">=8.5.0" }, { name = "unsloth", extras = ["huggingface"], marker = "extra == 'unsloth'" }, - { name = "wandb", marker = "extra == 'integrations'", specifier = ">=0.25.1" }, + { name = "wandb", specifier = ">=0.28.0" }, ] -provides-extras = ["unsloth", "integrations"] +provides-extras = ["unsloth"] [package.metadata.requires-dev] dev = [ @@ -11316,7 +11315,7 @@ wheels = [ [[package]] name = "wandb" -version = "0.27.2" +version = "0.28.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -11330,13 +11329,13 @@ dependencies = [ { name = "sentry-sdk", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "typing-extensions", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/14/a2/53ca062f430178e3af48ebc137396481d0ee885fb94a554c0df464cd8afa/wandb-0.27.2.tar.gz", hash = "sha256:c81ff93ab63f4dabc5a27b90ac3d12310fbfa6a14ca99201626921c99b2845be", size = 40300451, upload-time = "2026-06-06T01:47:02.74Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/a7/683bfbd6cbade3012bc90d3e9c4cfc72dd62566195bf4c30321946d64b77/wandb-0.28.0.tar.gz", hash = "sha256:b20e5af0fe80e2e2a466b0466a1d60cedcc578dce0f036eca04f4a0adcad95b6", size = 40558332, upload-time = "2026-06-23T00:38:50.115Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/95/18d3625558667b459d91c19630f7cecfbc133f87f5b144a7fb755e473e8c/wandb-0.27.2-py3-none-macosx_12_0_arm64.whl", hash = "sha256:978400b3c4b7d97e927c32264453da5e4a0040a3468d5b77a00d9c480613f370", size = 23990048, upload-time = "2026-06-06T01:46:38.902Z" }, - { url = "https://files.pythonhosted.org/packages/b5/a3/f9fe31ca72b4f5854d1e488403d6310783127a6b7e267c28577e9bd51b43/wandb-0.27.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e0779592410215a2762063c3585d3dcad73c7dca9cb6d63c4dcc1588267c1392", size = 24554366, upload-time = "2026-06-06T01:46:44.57Z" }, - { url = "https://files.pythonhosted.org/packages/76/e2/7a5064aba235ddb855b8c2250e07e6187fcc8382332e237e545d4de094ee/wandb-0.27.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:55bfebf4d382116a8e9610848cadc0de50d406bacd3d0a390d12dabde196f009", size = 26380293, upload-time = "2026-06-06T01:46:47.487Z" }, - { url = "https://files.pythonhosted.org/packages/ed/4c/0c845edac5ff0fd0930e881bec2569f2e2af2a4fc873249855600546eee0/wandb-0.27.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:566aa2fcd67d2a23c08713da75e9daf82f30f7136af76763ef1d7db3d901d940", size = 24728823, upload-time = "2026-06-06T01:46:49.887Z" }, - { url = "https://files.pythonhosted.org/packages/e1/7a/a6f7a02a0e6bf73e163b61caca03aaba3452836a02dbe2b64f9e1a3c6afc/wandb-0.27.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:41158181fc5b691438b3d04fee0a8c061e3f1f407a3258096afbebfe1db24e72", size = 26691957, upload-time = "2026-06-06T01:46:52.384Z" }, + { url = "https://files.pythonhosted.org/packages/c0/47/1723605f76c5d6446b6d0db65b83eda1599721bc8c1e65bd76cc1682b1a7/wandb-0.28.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:c3dab1205a5aca4abbad1eca08902cdba86add0edfa83d8d61b4429d0e79fa87", size = 24335272, upload-time = "2026-06-23T00:38:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/15/55/c3db03d04aeab3726066a418b2ef6a1f8119774ee510f4fbe992f52b7472/wandb-0.28.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:6dbcba12ab168aa37561f2f32dcdef8713495fc25fa7d30fdc9bfb37989694dd", size = 24878557, upload-time = "2026-06-23T00:38:31.417Z" }, + { url = "https://files.pythonhosted.org/packages/d8/5d/1385ce3c219cb5bd30d4027687e3f8d25969c7dfd09adad1cbd5080e1a72/wandb-0.28.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:325b2d0bd88be6eda5db10542499bad3710927f2569c81a84dc5eeaffc76825c", size = 26764727, upload-time = "2026-06-23T00:38:33.775Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/23b6c17a6d3d5422b007707961c4496b2f6f892624d2910c9f7742fcc202/wandb-0.28.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8954bc1c62ae43914dce2bebfd1d9957f72350f8fbb78e5cdfe2ca9b6be8a7b8", size = 25051656, upload-time = "2026-06-23T00:38:36.281Z" }, + { url = "https://files.pythonhosted.org/packages/89/67/9be00fb2db2281063af24a148636d2dd363d337317642ab5d8e93572c794/wandb-0.28.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9fec6c908554c2dad33110c1312bc3028cc2e430f0679f16b84f82c8ea801e3b", size = 27074113, upload-time = "2026-06-23T00:38:38.737Z" }, ] [[package]]