From 234706ff8bed0fc90a18cb1d179cebb9d0fe35ef Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:28:44 +0000 Subject: [PATCH 01/15] fix(sdk): report the installed nemo-platform version _version.py queried nemo-platform-sdk, a distribution that only exists in the workspace. PyPI users get the SDK bundled inside the nemo-platform wheel, so the lookup raised and fell back to 0.0.0 for nemo --version, telemetry client_version, and the SDK client User-Agent. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .../nemo-platform/src/nemo_platform/_version.py | 2 +- .../sdk/post_generation_update.py | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/sdk/python/nemo-platform/src/nemo_platform/_version.py b/sdk/python/nemo-platform/src/nemo_platform/_version.py index a5a2651220..e7511e7393 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/_version.py +++ b/sdk/python/nemo-platform/src/nemo_platform/_version.py @@ -5,7 +5,7 @@ __title__ = "nemo_platform" try: - __version__ = _package_version("nemo-platform-sdk") + __version__ = _package_version("nemo-platform") except PackageNotFoundError: __version__ = "0.0.0" # Injected at release time for non-production builds; None for RC and production releases. diff --git a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py index dfa9501f85..b9cfb1880b 100755 --- a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py +++ b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py @@ -16,7 +16,7 @@ import tomlkit import typer -from nemo_platform_sdk_tools.sdk.core.common import SdkInfo, get_sdk_info +from nemo_platform_sdk_tools.sdk.core.common import WRAPPER_DISTRIBUTION_NAME, SdkInfo, get_sdk_info from nemo_platform_sdk_tools.sdk.post_generation_exist_ok import inject_exist_ok app = typer.Typer( @@ -24,7 +24,14 @@ ) -def sdk_version_file_content(package_name: str) -> str: +def sdk_version_file_content(distribution_name: str) -> str: + """Render ``_version.py``, which reads the version from installed metadata. + + ``distribution_name`` is the distribution to query at runtime, which is not + the distribution being built: the SDK ships bundled inside the + ``nemo-platform`` wheel, so ``nemo-platform-sdk`` metadata only exists in + the workspace. Both report the same version there. + """ return f'''# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 @@ -32,7 +39,7 @@ def sdk_version_file_content(package_name: str) -> str: __title__ = "nemo_platform" try: - __version__ = _package_version("{package_name}") + __version__ = _package_version("{distribution_name}") except PackageNotFoundError: __version__ = "0.0.0" # Injected at release time for non-production builds; None for RC and production releases. @@ -624,7 +631,7 @@ def ensure_api_image_field() -> None: version_file = sdk_info.sdk_dir / "src" / sdk_info.module_name / "_version.py" content = version_file.read_text(encoding="utf-8") - expected = sdk_version_file_content(sdk_info.package_name) + expected = sdk_version_file_content(WRAPPER_DISTRIBUTION_NAME) if content == expected: typer.echo(" - Dynamic version metadata already present, skipping.") return From 8aa84c9c24e80019197a5e8fd15f6d4195025b2f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:32:17 +0000 Subject: [PATCH 02/15] feat(cli): match the missing-extra hint to the install method uv tool environments cannot be extended with pip. Detect them through the uv-receipt.toml uv writes at the environment root and print the matching uv tool install command instead. Drops the Python 3.14 variant of the hint: the nemo-platform wheel declares requires-python <3.14, so no install that can print this message runs on 3.14. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .../cli/commands/services/cli.py | 6 ++--- .../nemo_platform_ext/cli/commands/setup.py | 6 ++--- .../src/nemo_platform_ext/local/install.py | 22 +++++++++++++++ .../src/nemo_platform_ext/local/services.py | 3 ++- .../tests/local/test_install.py | 27 +++++++++++++++++++ .../cli/commands/services/cli.py | 6 ++--- .../src/nemo_platform/cli/commands/setup.py | 6 ++--- .../src/nemo_platform/local/install.py | 22 +++++++++++++++ .../src/nemo_platform/local/services.py | 3 ++- .../nemo_platform_ext/local/test_install.py | 27 +++++++++++++++++++ 10 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 packages/nemo_platform_ext/src/nemo_platform_ext/local/install.py create mode 100644 packages/nemo_platform_ext/tests/local/test_install.py create mode 100644 sdk/python/nemo-platform/src/nemo_platform/local/install.py create mode 100644 sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/local/test_install.py diff --git a/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/services/cli.py b/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/services/cli.py index 5c58af463d..c2b57ae906 100644 --- a/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/services/cli.py +++ b/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/services/cli.py @@ -15,6 +15,7 @@ import typer from nemo_platform_ext.cli.core.help_formatter import create_typer_app from nemo_platform_ext.cli.docker_preflight import require_docker_for_default_local +from nemo_platform_ext.local.install import services_extra_install_command from nemo_platform_ext.local.process import ( ForegroundInstanceError, InstanceAlreadyRunningError, @@ -75,10 +76,7 @@ def _require_services_extra() -> None: "Running local platform services needs extra components that aren't installed yet.\n" "\n" "Install them with:\n" - " pip install 'nemo-platform[all]'\n" - "\n" - "On Python 3.14, use:\n" - " PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 pip install 'nemo-platform[all]'\n", + f" {services_extra_install_command()}\n", err=True, ) raise typer.Exit(1) diff --git a/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/setup.py b/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/setup.py index ecfc915d6d..fe4530ee8d 100644 --- a/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/setup.py +++ b/packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/setup.py @@ -36,6 +36,7 @@ from pydantic import SecretStr from rich import box from rich.console import Console +from rich.markup import escape from rich.panel import Panel from nemo_platform_ext.cli.commands.skills import registry as skills_registry @@ -49,6 +50,7 @@ from nemo_platform_ext.client.tls import client_verify_from_env from nemo_platform_ext.config.config import Config from nemo_platform_ext.config.models import DEFAULT_BASE_URL, ConfigFile, ConfigParams, LocalServicesConfig, NoAuthUser +from nemo_platform_ext.local.install import services_extra_install_command from nemo_platform_ext.local.process import ( PortConflict, check_port_available_for_start, @@ -1154,9 +1156,7 @@ def _maybe_start_services( if importlib.util.find_spec("pyleak") is None: console.print(f"{CROSS} Local services require extra dependencies that aren't installed.") console.print(" Install them with:") - console.print(" [cyan]pip install 'nemo-platform\\[all]'[/cyan]") - console.print(" On Python 3.14, use:") - console.print(" [cyan]PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 pip install 'nemo-platform\\[all]'[/cyan]") + console.print(f" [cyan]{escape(services_extra_install_command())}[/cyan]") raise typer.Exit(1) # Fail before stop/spawn when default local needs Docker (NVBug 6537617). diff --git a/packages/nemo_platform_ext/src/nemo_platform_ext/local/install.py b/packages/nemo_platform_ext/src/nemo_platform_ext/local/install.py new file mode 100644 index 0000000000..52b2c7a383 --- /dev/null +++ b/packages/nemo_platform_ext/src/nemo_platform_ext/local/install.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""How this NeMo Platform install was created.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +def services_extra_install_command() -> str: + """Return the command that adds the packaged service dependencies here. + + ``uv tool install`` environments are managed by uv and are not meant to be + edited with pip; re-running the tool install with the extra upgrades them + in place. uv marks such an environment with a ``uv-receipt.toml`` at its + root, which is what distinguishes it from an ordinary virtual environment. + """ + if (Path(sys.prefix) / "uv-receipt.toml").is_file(): + return "uv tool install 'nemo-platform[all]'" + return "pip install 'nemo-platform[all]'" diff --git a/packages/nemo_platform_ext/src/nemo_platform_ext/local/services.py b/packages/nemo_platform_ext/src/nemo_platform_ext/local/services.py index 6af3f5f04f..2edc4ae7ea 100644 --- a/packages/nemo_platform_ext/src/nemo_platform_ext/local/services.py +++ b/packages/nemo_platform_ext/src/nemo_platform_ext/local/services.py @@ -21,6 +21,7 @@ from nemo_platform import AsyncNeMoPlatform, NeMoPlatform from nemo_platform_ext.local import process +from nemo_platform_ext.local.install import services_extra_install_command from nemo_platform_ext.local.transport import ( EMBEDDED_BASE_URL, UDS_BASE_URL, @@ -407,7 +408,7 @@ async def stop_async(self, *, timeout: float = 30.0, force: bool = False) -> pro def require_services_extra() -> None: if importlib.util.find_spec("pyleak") is not None: return - raise ServicesExtraRequiredError("Install service dependencies with `pip install 'nemo-platform[all]'`.") + raise ServicesExtraRequiredError(f"Install service dependencies with `{services_extra_install_command()}`.") def _validate_socket_path_length(socket_path: Path) -> None: diff --git a/packages/nemo_platform_ext/tests/local/test_install.py b/packages/nemo_platform_ext/tests/local/test_install.py new file mode 100644 index 0000000000..7225fa43ef --- /dev/null +++ b/packages/nemo_platform_ext/tests/local/test_install.py @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import sys +from pathlib import Path + +import pytest +from nemo_platform_ext.local.install import services_extra_install_command + + +@pytest.mark.parametrize( + ("uv_tool_env", "expected"), + [ + (False, "pip install 'nemo-platform[all]'"), + (True, "uv tool install 'nemo-platform[all]'"), + ], +) +def test_services_extra_install_command_matches_install_method( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, uv_tool_env: bool, expected: str +) -> None: + if uv_tool_env: + (tmp_path / "uv-receipt.toml").write_text("[tool]\n") + monkeypatch.setattr(sys, "prefix", str(tmp_path)) + + assert services_extra_install_command() == expected diff --git a/sdk/python/nemo-platform/src/nemo_platform/cli/commands/services/cli.py b/sdk/python/nemo-platform/src/nemo_platform/cli/commands/services/cli.py index c63b6bf9db..7026222b9a 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/cli/commands/services/cli.py +++ b/sdk/python/nemo-platform/src/nemo_platform/cli/commands/services/cli.py @@ -15,6 +15,7 @@ import typer from nemo_platform.cli.core.help_formatter import create_typer_app from nemo_platform.cli.docker_preflight import require_docker_for_default_local +from nemo_platform.local.install import services_extra_install_command from nemo_platform.local.process import ( ForegroundInstanceError, InstanceAlreadyRunningError, @@ -75,10 +76,7 @@ def _require_services_extra() -> None: "Running local platform services needs extra components that aren't installed yet.\n" "\n" "Install them with:\n" - " pip install 'nemo-platform[all]'\n" - "\n" - "On Python 3.14, use:\n" - " PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 pip install 'nemo-platform[all]'\n", + f" {services_extra_install_command()}\n", err=True, ) raise typer.Exit(1) diff --git a/sdk/python/nemo-platform/src/nemo_platform/cli/commands/setup.py b/sdk/python/nemo-platform/src/nemo_platform/cli/commands/setup.py index beda9ede74..09d20f1a3b 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/cli/commands/setup.py +++ b/sdk/python/nemo-platform/src/nemo_platform/cli/commands/setup.py @@ -36,6 +36,7 @@ from pydantic import SecretStr from rich import box from rich.console import Console +from rich.markup import escape from rich.panel import Panel from nemo_platform.cli.commands.skills import registry as skills_registry @@ -49,6 +50,7 @@ from nemo_platform.client.tls import client_verify_from_env from nemo_platform.config.config import Config from nemo_platform.config.models import DEFAULT_BASE_URL, ConfigFile, ConfigParams, LocalServicesConfig, NoAuthUser +from nemo_platform.local.install import services_extra_install_command from nemo_platform.local.process import ( PortConflict, check_port_available_for_start, @@ -1154,9 +1156,7 @@ def _maybe_start_services( if importlib.util.find_spec("pyleak") is None: console.print(f"{CROSS} Local services require extra dependencies that aren't installed.") console.print(" Install them with:") - console.print(" [cyan]pip install 'nemo-platform\\[all]'[/cyan]") - console.print(" On Python 3.14, use:") - console.print(" [cyan]PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 pip install 'nemo-platform\\[all]'[/cyan]") + console.print(f" [cyan]{escape(services_extra_install_command())}[/cyan]") raise typer.Exit(1) # Fail before stop/spawn when default local needs Docker (NVBug 6537617). diff --git a/sdk/python/nemo-platform/src/nemo_platform/local/install.py b/sdk/python/nemo-platform/src/nemo_platform/local/install.py new file mode 100644 index 0000000000..52b2c7a383 --- /dev/null +++ b/sdk/python/nemo-platform/src/nemo_platform/local/install.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""How this NeMo Platform install was created.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +def services_extra_install_command() -> str: + """Return the command that adds the packaged service dependencies here. + + ``uv tool install`` environments are managed by uv and are not meant to be + edited with pip; re-running the tool install with the extra upgrades them + in place. uv marks such an environment with a ``uv-receipt.toml`` at its + root, which is what distinguishes it from an ordinary virtual environment. + """ + if (Path(sys.prefix) / "uv-receipt.toml").is_file(): + return "uv tool install 'nemo-platform[all]'" + return "pip install 'nemo-platform[all]'" diff --git a/sdk/python/nemo-platform/src/nemo_platform/local/services.py b/sdk/python/nemo-platform/src/nemo_platform/local/services.py index 9930d331d6..bbd1091f46 100644 --- a/sdk/python/nemo-platform/src/nemo_platform/local/services.py +++ b/sdk/python/nemo-platform/src/nemo_platform/local/services.py @@ -21,6 +21,7 @@ from nemo_platform import AsyncNeMoPlatform, NeMoPlatform from nemo_platform.local import process +from nemo_platform.local.install import services_extra_install_command from nemo_platform.local.transport import ( EMBEDDED_BASE_URL, UDS_BASE_URL, @@ -407,7 +408,7 @@ async def stop_async(self, *, timeout: float = 30.0, force: bool = False) -> pro def require_services_extra() -> None: if importlib.util.find_spec("pyleak") is not None: return - raise ServicesExtraRequiredError("Install service dependencies with `pip install 'nemo-platform[all]'`.") + raise ServicesExtraRequiredError(f"Install service dependencies with `{services_extra_install_command()}`.") def _validate_socket_path_length(socket_path: Path) -> None: diff --git a/sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/local/test_install.py b/sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/local/test_install.py new file mode 100644 index 0000000000..b529a43320 --- /dev/null +++ b/sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/local/test_install.py @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import sys +from pathlib import Path + +import pytest +from nemo_platform.local.install import services_extra_install_command + + +@pytest.mark.parametrize( + ("uv_tool_env", "expected"), + [ + (False, "pip install 'nemo-platform[all]'"), + (True, "uv tool install 'nemo-platform[all]'"), + ], +) +def test_services_extra_install_command_matches_install_method( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, uv_tool_env: bool, expected: str +) -> None: + if uv_tool_env: + (tmp_path / "uv-receipt.toml").write_text("[tool]\n") + monkeypatch.setattr(sys, "prefix", str(tmp_path)) + + assert services_extra_install_command() == expected From 38baa51853d81c990fa57f9bf89ad594735e4b5d Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:33:49 +0000 Subject: [PATCH 03/15] docs: lead with uv tool install for the PyPI install path The documented path created a venv and installed nemo-platform without the [all] extra, so nemo services run failed on a fresh install. Make the tool install the lead everywhere the install is documented, keep the venv variant for SDK imports and constrained environments, and label the source checkout as the contributor path. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- README.md | 6 +++--- SETUP.md | 4 +++- docs/cli/index.mdx | 14 +++++++++----- docs/get-started/setup.mdx | 20 ++++++++++++++------ packages/nemo_platform/README.md | 10 ++++++---- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 710251ebaf..3a132da820 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,13 @@ Quick install from PyPI: ```bash curl -LsSf https://astral.sh/uv/0.9.30/install.sh | sh export PATH="$HOME/.local/bin:$PATH" -uv venv --python 3.13 -source .venv/bin/activate -uv pip install nemo-platform +uv tool install "nemo-platform[all]" nemo setup ``` +`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside Python 3.12-3.13. + Source checkout for development: ```bash diff --git a/SETUP.md b/SETUP.md index 7610a8ca69..57b2a85d9d 100644 --- a/SETUP.md +++ b/SETUP.md @@ -86,7 +86,9 @@ is unavailable, start Docker and retry—do not proceed to `rm -rf`. ## Bootstrap and start -The README documents the streamlined path. Prefer this over the manual steps below whenever the task fits — it covers prerequisites install, service startup, provider registration, default/fast model selection, and demo agent deployment in one shot: +This section is the **source checkout** path: use it to work on NeMo Platform itself, on a local plugin, or on Studio assets. To only *use* the platform, install the published wheel instead — `uv tool install "nemo-platform[all]"` needs no checkout and no toolchain, then continue at `nemo setup`. + +The steps below cover prerequisites install, service startup, provider registration, default/fast model selection, and demo agent deployment in one shot. Prefer them over the manual sections further down whenever the task fits: Before running `make bootstrap`, install Flox from the [Flox installation guide](https://flox.dev/docs/install-flox/install). Flox is the recommended source-development toolchain and does not need to be activated first. Contributors using a preinstalled host toolchain instead need uv `>=0.9.14`, Node.js `22.23.2`, pnpm `10.34.5`, and a C compiler; they must use `make TOOLCHAIN=system bootstrap`. diff --git a/docs/cli/index.mdx b/docs/cli/index.mdx index 6cc08b25df..170b694a08 100644 --- a/docs/cli/index.mdx +++ b/docs/cli/index.mdx @@ -28,18 +28,22 @@ If you previously installed the `nemo-microservices` package, uninstall it first pip uninstall nemo-microservices ``` -### Install in a Virtual Environment +### Install as a Tool -Install the PyPI `nemo-platform` wrapper package in a Python 3.12-3.13 virtual environment. If you are working from a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. +Install the PyPI `nemo-platform` wrapper package with [uv](https://docs.astral.sh/uv/). uv puts the `nemo` command on your PATH in its own isolated environment, so there is no virtual environment to create or activate. If you are working from a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. ```bash -pip install "nemo-platform[all]" +uv tool install "nemo-platform[all]" ``` -Or with uv: +uv uses your default interpreter; add `--python 3.13` when that default is outside Python 3.12-3.13. + +### Install in a Virtual Environment + +To import the SDK from your own project, or when tool installs are unavailable, install into a Python 3.12-3.13 virtual environment: ```bash -uv pip install "nemo-platform[all]" +pip install "nemo-platform[all]" ``` diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx index d4d5db0d9d..4adc441c31 100644 --- a/docs/get-started/setup.mdx +++ b/docs/get-started/setup.mdx @@ -12,7 +12,7 @@ Install NeMo Platform and start working with AI agents. - Python 3.12-3.13 - An API key from one of: [NVIDIA Build](https://build.nvidia.com), [OpenAI](https://platform.openai.com/api-keys), [Anthropic](https://console.anthropic.com/settings/keys), [Google Gemini](https://aistudio.google.com/apikey), or a local [Ollama](https://ollama.com) instance (no key needed) - 16 GB available disk space and 8 GB RAM -- For the PyPI install: `pip` in a Python environment +- For the PyPI install: [uv](https://docs.astral.sh/uv/) `>=0.9.14`, or `pip` in a Python environment - For the source checkout install: [Git](https://git-scm.com/), GNU Make, [uv](https://docs.astral.sh/uv/) `>=0.9.14`, [Node.js (≥22.23.2, \<23)](https://nodejs.org/en/download) satisfying `web/package.json`, and [pnpm](https://pnpm.io/installation) ## Install @@ -24,15 +24,23 @@ Choose the install path that matches what you want to do. Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest local install. The `all` extra includes the SDK, CLI, platform services, and default first-party plugins: ```bash -python -m venv .venv -source .venv/bin/activate -pip install "nemo-platform[all]" +uv tool install "nemo-platform[all]" ``` -For SDK and CLI usage only, install the base package: +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv uses your default interpreter; add `--python 3.13` when that default is outside the supported Python range. + +For SDK and CLI usage only, install the base package. Local services are unavailable until you add the `all` extra: ```bash -pip install nemo-platform +uv tool install nemo-platform +``` + +To import the SDK from your own project, or when tool installs are unavailable, install into a virtual environment instead: + +```bash +python -m venv .venv +source .venv/bin/activate +pip install "nemo-platform[all]" ``` After installing `nemo-platform[all]` from PyPI, continue with `nemo setup`. diff --git a/packages/nemo_platform/README.md b/packages/nemo_platform/README.md index f0be59a175..d81c562ef3 100644 --- a/packages/nemo_platform/README.md +++ b/packages/nemo_platform/README.md @@ -24,13 +24,15 @@ NeMo Platform brings NVIDIA NeMo libraries together under one CLI, Python SDK, a The `nemo-platform` distribution is a convenience wrapper that bundles the SDK, shared runtime packages, default first-party plugins, and platform services into a single wheel. Install just the SDK and CLI, or install everything needed to run the platform locally: ```bash -# SDK + CLI only -pip install nemo-platform - # SDK + CLI + all platform services and default plugins (recommended) -pip install "nemo-platform[all]" +uv tool install "nemo-platform[all]" + +# SDK + CLI only +uv tool install nemo-platform ``` +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv uses your default interpreter; add `--python 3.13` when that default is outside the supported Python range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. + Then bring up the platform: ```bash From cd17eb740c9ed9d5cd392c9d4e44978c416e96cb Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:43:58 +0000 Subject: [PATCH 04/15] docs: pin the documented tool install to a supported interpreter uv enforces the lower bound of requires-python but installs the wheel on Python 3.14 despite the declared <3.14 upper bound, where the [all] extra then fails building dependencies from source. Naming the interpreter keeps the documented command deterministic. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- README.md | 4 ++-- SETUP.md | 2 +- docs/cli/index.mdx | 4 ++-- docs/get-started/setup.mdx | 6 +++--- packages/nemo_platform/README.md | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3a132da820..0c3af42e47 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,12 @@ Quick install from PyPI: ```bash curl -LsSf https://astral.sh/uv/0.9.30/install.sh | sh export PATH="$HOME/.local/bin:$PATH" -uv tool install "nemo-platform[all]" +uv tool install --python 3.13 "nemo-platform[all]" nemo setup ``` -`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside Python 3.12-3.13. +`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12-3.13 range. Source checkout for development: diff --git a/SETUP.md b/SETUP.md index 57b2a85d9d..1a45144760 100644 --- a/SETUP.md +++ b/SETUP.md @@ -86,7 +86,7 @@ is unavailable, start Docker and retry—do not proceed to `rm -rf`. ## Bootstrap and start -This section is the **source checkout** path: use it to work on NeMo Platform itself, on a local plugin, or on Studio assets. To only *use* the platform, install the published wheel instead — `uv tool install "nemo-platform[all]"` needs no checkout and no toolchain, then continue at `nemo setup`. +This section is the **source checkout** path: use it to work on NeMo Platform itself, on a local plugin, or on Studio assets. To only *use* the platform, install the published wheel instead — `uv tool install --python 3.13 "nemo-platform[all]"` needs no checkout and no toolchain, then continue at `nemo setup`. The steps below cover prerequisites install, service startup, provider registration, default/fast model selection, and demo agent deployment in one shot. Prefer them over the manual sections further down whenever the task fits: diff --git a/docs/cli/index.mdx b/docs/cli/index.mdx index 170b694a08..687729e37f 100644 --- a/docs/cli/index.mdx +++ b/docs/cli/index.mdx @@ -33,10 +33,10 @@ pip uninstall nemo-microservices Install the PyPI `nemo-platform` wrapper package with [uv](https://docs.astral.sh/uv/). uv puts the `nemo` command on your PATH in its own isolated environment, so there is no virtual environment to create or activate. If you are working from a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. ```bash -uv tool install "nemo-platform[all]" +uv tool install --python 3.13 "nemo-platform[all]" ``` -uv uses your default interpreter; add `--python 3.13` when that default is outside Python 3.12-3.13. +`--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported Python 3.12-3.13 range. ### Install in a Virtual Environment diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx index 4adc441c31..c6b2ffd24d 100644 --- a/docs/get-started/setup.mdx +++ b/docs/get-started/setup.mdx @@ -24,15 +24,15 @@ Choose the install path that matches what you want to do. Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest local install. The `all` extra includes the SDK, CLI, platform services, and default first-party plugins: ```bash -uv tool install "nemo-platform[all]" +uv tool install --python 3.13 "nemo-platform[all]" ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv uses your default interpreter; add `--python 3.13` when that default is outside the supported Python range. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12-3.13 range. For SDK and CLI usage only, install the base package. Local services are unavailable until you add the `all` extra: ```bash -uv tool install nemo-platform +uv tool install --python 3.13 nemo-platform ``` To import the SDK from your own project, or when tool installs are unavailable, install into a virtual environment instead: diff --git a/packages/nemo_platform/README.md b/packages/nemo_platform/README.md index d81c562ef3..b566d7b6e2 100644 --- a/packages/nemo_platform/README.md +++ b/packages/nemo_platform/README.md @@ -25,13 +25,13 @@ The `nemo-platform` distribution is a convenience wrapper that bundles the SDK, ```bash # SDK + CLI + all platform services and default plugins (recommended) -uv tool install "nemo-platform[all]" +uv tool install --python 3.13 "nemo-platform[all]" # SDK + CLI only -uv tool install nemo-platform +uv tool install --python 3.13 nemo-platform ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv uses your default interpreter; add `--python 3.13` when that default is outside the supported Python range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12–3.13 range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. Then bring up the platform: From 93fc656a14d71bcac945fc62a918bdfb6ea34535 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:43:59 +0000 Subject: [PATCH 05/15] ci: exercise the uv tool install path and assert a real version test-nemo-cli.sh called nemo --version without checking the output, which is how the 0.0.0 fallback went unnoticed. Assert it, and add a uv tool install leg to the wheel-test matrix so the documented front door is covered; the plugin has no CLI, so it keeps only the venv leg. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .github/workflows/ci.yaml | 32 +++++++++++++++++++++++++------- script/test-nemo-cli.sh | 10 +++++++++- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9340e8d353..e09cc02568 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1303,7 +1303,7 @@ jobs: # Test each wheel: install from the artifact and run basic CLI / # import checks. wheel-test: - name: ${{ matrix.package }} wheel build + test (py${{ matrix.python-version }}) + name: ${{ matrix.package }} wheel build + test (py${{ matrix.python-version }}, ${{ matrix.install-method }}) needs: [wheel-build] runs-on: ubuntu-latest timeout-minutes: 15 @@ -1314,6 +1314,13 @@ jobs: matrix: package: [nemo-platform, nemo-platform-plugin] python-version: ["3.12", "3.13"] + # `uv tool install` is the documented front door for the CLI; `venv` + # covers installs into an environment the user owns. The plugin is a + # library with no CLI entry point, so it only gets the venv leg. + install-method: [venv, tool] + exclude: + - package: nemo-platform-plugin + install-method: tool steps: - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 @@ -1337,9 +1344,11 @@ jobs: shell: bash env: PYTHON_VERSION: ${{ matrix.python-version }} + INSTALL_METHOD: ${{ matrix.install-method }} NMP_DATA_DIR: ${{ runner.temp }}/nemo-data NMP_AUTH_ENABLED: "false" _TYPER_FORCE_DISABLE_TERMINAL: "1" + UV_TOOL_BIN_DIR: ${{ runner.temp }}/wheelcheck/tool-bin run: | set -euo pipefail shopt -s nullglob @@ -1351,14 +1360,23 @@ jobs: WHEEL="${wheels[0]}" # Supply-chain: partial-pin the wheel's direct external deps to a committed constraints # file. Regenerate with script/compile-wheel-constraints.sh. - VENV="${RUNNER_TEMP}/wheelcheck/.venv" - uv venv "${VENV}" --python "${PYTHON_VERSION}" - uv pip install --python "${VENV}/bin/python" \ - --constraint "${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-services.txt" \ - "${WHEEL}[services]" + CONSTRAINTS="${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-services.txt" + if [[ "${INSTALL_METHOD}" == "tool" ]]; then + uv tool install --python "${PYTHON_VERSION}" \ + --constraints "${CONSTRAINTS}" \ + "${WHEEL}[services]" + BIN_DIR="${UV_TOOL_BIN_DIR}" + else + VENV="${RUNNER_TEMP}/wheelcheck/.venv" + uv venv "${VENV}" --python "${PYTHON_VERSION}" + uv pip install --python "${VENV}/bin/python" \ + --constraint "${CONSTRAINTS}" \ + "${WHEEL}[services]" + BIN_DIR="${VENV}/bin" + fi cd "${RUNNER_TEMP}/wheelcheck" unset PYTHONPATH VIRTUAL_ENV - export PATH="${VENV}/bin:${PATH}" + export PATH="${BIN_DIR}:${PATH}" bash "${GITHUB_WORKSPACE}/script/test-nemo-cli.sh" - name: Install + test nemo-platform-plugin diff --git a/script/test-nemo-cli.sh b/script/test-nemo-cli.sh index cde8c02b98..172f9652bc 100755 --- a/script/test-nemo-cli.sh +++ b/script/test-nemo-cli.sh @@ -52,7 +52,15 @@ done echo "----- nemo on PATH -----" command -v nemo -nemo --version +# `nemo version 0.0.0` is what the CLI prints when its importlib.metadata +# lookup misses the distribution it was installed from, which is invisible +# unless the output is asserted. +version_output="$(nemo --version)" +echo "${version_output}" +if [[ ! "${version_output}" =~ ^nemo\ version\ [0-9]+\.[0-9]+\.[0-9]+ ]] || [[ "${version_output}" == "nemo version 0.0.0"* ]]; then + echo "::error::nemo --version did not report an installed version: ${version_output}" >&2 + exit 1 +fi # Import-time checks for commands that ship in the bundled wrapper. We don't # call `nemo services --help` here because `nemo services run` below is a From c650ea350ec27b43d11ddaa4012b1bffcdca1287 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 22:55:00 +0000 Subject: [PATCH 06/15] fix(sdk): declare the supported Python range on the bundled SDK The generated SDK pyproject claimed >=3.12 with a 3.14 classifier while the nemo-platform wheel it ships in supports 3.12-3.13. Tighten both, and build wheels on 3.12 by default rather than 3.11, which the wrapper's requires-python already excludes. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .github/actions/build-nemo-platform-wheel/action.yaml | 4 ++-- README.md | 4 ++-- SETUP.md | 2 +- docs/cli/index.mdx | 4 ++-- docs/get-started/setup.mdx | 6 +++--- packages/nemo_platform/README.md | 6 +++--- sdk/python/nemo-platform/pyproject.toml | 3 +-- .../nemo_platform_sdk_tools/sdk/post_generation_update.py | 6 +++--- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/.github/actions/build-nemo-platform-wheel/action.yaml b/.github/actions/build-nemo-platform-wheel/action.yaml index 4fb5ef1132..3d18d75975 100644 --- a/.github/actions/build-nemo-platform-wheel/action.yaml +++ b/.github/actions/build-nemo-platform-wheel/action.yaml @@ -43,9 +43,9 @@ inputs: required: false default: "19700101000000" python-version: - description: Python version for setup-uv. + description: Python version for setup-uv. Must be within the wheel's supported range. required: false - default: "3.11" + default: "3.12" source-root: description: > Path to the checked-out repository. release-bundle.yaml uses `source`; diff --git a/README.md b/README.md index 0c3af42e47..0c5fc33fad 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,12 @@ Quick install from PyPI: ```bash curl -LsSf https://astral.sh/uv/0.9.30/install.sh | sh export PATH="$HOME/.local/bin:$PATH" -uv tool install --python 3.13 "nemo-platform[all]" +uv tool install "nemo-platform[all]" nemo setup ``` -`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12-3.13 range. +`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12-3.13 range. Source checkout for development: diff --git a/SETUP.md b/SETUP.md index 1a45144760..57b2a85d9d 100644 --- a/SETUP.md +++ b/SETUP.md @@ -86,7 +86,7 @@ is unavailable, start Docker and retry—do not proceed to `rm -rf`. ## Bootstrap and start -This section is the **source checkout** path: use it to work on NeMo Platform itself, on a local plugin, or on Studio assets. To only *use* the platform, install the published wheel instead — `uv tool install --python 3.13 "nemo-platform[all]"` needs no checkout and no toolchain, then continue at `nemo setup`. +This section is the **source checkout** path: use it to work on NeMo Platform itself, on a local plugin, or on Studio assets. To only *use* the platform, install the published wheel instead — `uv tool install "nemo-platform[all]"` needs no checkout and no toolchain, then continue at `nemo setup`. The steps below cover prerequisites install, service startup, provider registration, default/fast model selection, and demo agent deployment in one shot. Prefer them over the manual sections further down whenever the task fits: diff --git a/docs/cli/index.mdx b/docs/cli/index.mdx index 687729e37f..8e328760af 100644 --- a/docs/cli/index.mdx +++ b/docs/cli/index.mdx @@ -33,10 +33,10 @@ pip uninstall nemo-microservices Install the PyPI `nemo-platform` wrapper package with [uv](https://docs.astral.sh/uv/). uv puts the `nemo` command on your PATH in its own isolated environment, so there is no virtual environment to create or activate. If you are working from a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. ```bash -uv tool install --python 3.13 "nemo-platform[all]" +uv tool install "nemo-platform[all]" ``` -`--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported Python 3.12-3.13 range. +uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported Python 3.12-3.13 range. ### Install in a Virtual Environment diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx index c6b2ffd24d..5211592765 100644 --- a/docs/get-started/setup.mdx +++ b/docs/get-started/setup.mdx @@ -24,15 +24,15 @@ Choose the install path that matches what you want to do. Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest local install. The `all` extra includes the SDK, CLI, platform services, and default first-party plugins: ```bash -uv tool install --python 3.13 "nemo-platform[all]" +uv tool install "nemo-platform[all]" ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12-3.13 range. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12-3.13 range. For SDK and CLI usage only, install the base package. Local services are unavailable until you add the `all` extra: ```bash -uv tool install --python 3.13 nemo-platform +uv tool install nemo-platform ``` To import the SDK from your own project, or when tool installs are unavailable, install into a virtual environment instead: diff --git a/packages/nemo_platform/README.md b/packages/nemo_platform/README.md index b566d7b6e2..2325b7cd11 100644 --- a/packages/nemo_platform/README.md +++ b/packages/nemo_platform/README.md @@ -25,13 +25,13 @@ The `nemo-platform` distribution is a convenience wrapper that bundles the SDK, ```bash # SDK + CLI + all platform services and default plugins (recommended) -uv tool install --python 3.13 "nemo-platform[all]" +uv tool install "nemo-platform[all]" # SDK + CLI only -uv tool install --python 3.13 nemo-platform +uv tool install nemo-platform ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. `--python 3.13` pins the tool to a supported interpreter and downloads one when your machine has none; without it uv uses your default interpreter, which may be outside the supported 3.12–3.13 range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12–3.13 range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. Then bring up the platform: diff --git a/sdk/python/nemo-platform/pyproject.toml b/sdk/python/nemo-platform/pyproject.toml index d45b878903..482fed2314 100644 --- a/sdk/python/nemo-platform/pyproject.toml +++ b/sdk/python/nemo-platform/pyproject.toml @@ -26,13 +26,12 @@ dependencies = [ "fsspec>=2023.1.0", ] -requires-python = ">= 3.12" +requires-python = ">=3.12,<3.14" classifiers = [ "Typing :: Typed", "Intended Audience :: Developers", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", "Operating System :: POSIX", "Operating System :: MacOS", diff --git a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py index b9cfb1880b..e707f5a1d8 100755 --- a/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py +++ b/tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py @@ -202,15 +202,15 @@ def update_pyproject_toml(sdk_info: SdkInfo) -> bool: project["urls"] = {"Homepage": "https://docs.nvidia.com/nemo/microservices/latest/about/index.html"} - # Drop support for Python versions older than 3.12. - version_to_remove = ["3.8", "3.9", "3.10", "3.11"] + # Match the supported range of the nemo-platform wheel this SDK ships in. + version_to_remove = ["3.8", "3.9", "3.10", "3.11", "3.14"] for ver in version_to_remove: try: project["classifiers"].remove(f"Programming Language :: Python :: {ver}") except ValueError: pass - project["requires-python"] = ">= 3.12" + project["requires-python"] = ">=3.12,<3.14" dependencies = project.get("dependencies") if dependencies is not None: for dep in list(dependencies): From 228f4841ac9c6aa0e56c233ec567eb9a7d0892ae Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 11 Aug 2026 23:32:46 +0000 Subject: [PATCH 07/15] ci: match the version fallback exactly in the CLI smoke test Test wheels are stamped with a sentinel 0.0.0.dev, which a prefix match rejected. The CLI's missing-metadata fallback is a bare 0.0.0, so compare against that. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- script/test-nemo-cli.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/script/test-nemo-cli.sh b/script/test-nemo-cli.sh index 172f9652bc..c753f28db8 100755 --- a/script/test-nemo-cli.sh +++ b/script/test-nemo-cli.sh @@ -52,12 +52,14 @@ done echo "----- nemo on PATH -----" command -v nemo -# `nemo version 0.0.0` is what the CLI prints when its importlib.metadata -# lookup misses the distribution it was installed from, which is invisible -# unless the output is asserted. version_output="$(nemo --version)" echo "${version_output}" -if [[ ! "${version_output}" =~ ^nemo\ version\ [0-9]+\.[0-9]+\.[0-9]+ ]] || [[ "${version_output}" == "nemo version 0.0.0"* ]]; then +# A bare `0.0.0` is the CLI's fallback when its importlib.metadata lookup +# misses the distribution it was installed from, which is invisible unless the +# output is asserted. Match it exactly: CI test wheels are stamped with a +# sentinel `0.0.0.dev` that is a legitimate version string. +version="${version_output#nemo version }" +if [[ "${version}" == "0.0.0" ]] || [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then echo "::error::nemo --version did not report an installed version: ${version_output}" >&2 exit 1 fi From b29fdfe6a3b837c8395d979c1f541cffe96fa933 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 16:16:35 +0000 Subject: [PATCH 08/15] fix(ci): repair the wheel-constraints generator The generator has been syntactically invalid since it landed: a missing closing quote on the version-probe line made bash swallow the following lines, so `bash -n` fails and the file could never be regenerated. Also resolve on 3.12, since the wrapper's requires-python floor now rejects the 3.11 probe environment, and pass --no-config so the snapshot is a set a user can actually resolve rather than one shaped by the repo's override-dependencies. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- script/compile-wheel-constraints.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/script/compile-wheel-constraints.sh b/script/compile-wheel-constraints.sh index 3bd03a57f5..65e99f865f 100755 --- a/script/compile-wheel-constraints.sh +++ b/script/compile-wheel-constraints.sh @@ -35,10 +35,12 @@ 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. + # --no-config: run from the checkout this would otherwise apply the repo's + # [tool.uv] override-dependencies and snapshot versions no user can resolve. printf '%s\n' "${LITELLM_CAP%% *}" >"${meta}/cap.txt" - uv pip install --python "${venv}/bin/python" --constraint "${meta}/cap.txt" "${spec}" >/dev/null + uv pip install --no-config --python "${venv}/bin/python" --constraint "${meta}/cap.txt" "${spec}" >/dev/null # Direct external deps = the wheel's own Requires-Dist, minus self-referential extras. python3 - "$wheel" >"${meta}/names.txt" <<'PY' import sys, zipfile, re @@ -61,7 +63,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}" From 548ac20d8fa40b0ad4ed44433dfdcdceaeba723c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 16:16:45 +0000 Subject: [PATCH 09/15] deps(nemo-agents): move NAT to the 1.9 line so the wheel resolves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nemo-platform[all] could not be installed from PyPI: nvidia-nat-core 1.8.0 caps cryptography at <47 while data-designer-engine 0.8.0 requires >=48.0.1. The workspace hid this behind [tool.uv] override-dependencies, which no wheel user gets. NAT 1.9 is the first line whose cap overlaps data-designer's; it ships only pre-releases today, so every NAT distribution in the closure is named explicitly — uv accepts a pre-release only when a requirement it reads names one. A user install now resolves to cryptography 48.0.1, which is below the 50.0.0 that fixes CVE-2026-69247; the workspace override keeps developers on 50. Only an upstream cap relaxation can give wheel users the patched version. Regenerating the constraints also picks up version drift that accumulated while the generator was broken. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .../nemo-platform-plugin.txt | 18 +- .../nemo-platform-services.txt | 55 +-- packages/nemo_platform/pyproject.toml | 12 +- .../examples/calculator-agent/pyproject.toml | 4 +- .../email-phishing-analyzer/pyproject.toml | 2 +- .../email-security-analyst/pyproject.toml | 2 +- plugins/nemo-agents/pyproject.toml | 15 +- pyproject.toml | 4 +- uv.lock | 339 +++++------------- 9 files changed, 150 insertions(+), 301 deletions(-) diff --git a/.github/wheel-constraints/nemo-platform-plugin.txt b/.github/wheel-constraints/nemo-platform-plugin.txt index 15dae7ecc0..5c325ea655 100644 --- a/.github/wheel-constraints/nemo-platform-plugin.txt +++ b/.github/wheel-constraints/nemo-platform-plugin.txt @@ -1,27 +1,29 @@ # 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.121.0 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.10 nvidia-ml-py==13.610.43 -openai==2.47.0 -prompt-toolkit==3.0.52 +openai==3.0.0 +prompt-toolkit==3.0.53 psutil==7.2.2 -pydantic-settings==2.14.2 pydantic==2.13.4 +pydantic-settings==2.15.0 pyyaml==6.0.3 requests==2.34.2 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 0e68b4ed1c..f53d15f728 100644 --- a/.github/wheel-constraints/nemo-platform-services.txt +++ b/.github/wheel-constraints/nemo-platform-services.txt @@ -1,14 +1,15 @@ # 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 aiofiles==25.1.0 aiohttp==3.14.3 aiosqlite==0.22.1 -alembic==1.18.5 -anthropic==0.118.0 +alembic==1.19.1 +anthropic==0.121.0 anyio==4.14.2 asyncpg==0.31.0 base58==2.1.1 @@ -21,40 +22,46 @@ 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.7 fsspec==2025.9.0 -greenlet==3.5.4 +greenlet==3.5.5 gunicorn==26.0.0 httpx==0.28.1 -huggingface-hub==1.24.0 +huggingface-hub==1.27.0 hvac==2.4.0 jinja2==3.1.6 jsonpath-ng==1.8.0 jsonschema==4.26.0 kubernetes==36.0.3 +langchain==1.3.15 langchain-aws==1.1.0 langchain-community==0.3.31 -langchain-core==1.5.0 +langchain-core==1.5.4 langchain-nvidia-ai-endpoints==1.4.3 -langchain-openai==1.4.0 -langchain==1.3.14 +langchain-openai==1.4.3 lark==1.3.1 +matplotlib==3.11.1 nemo-anonymizer==0.3.1 nemo-fabric==0.1.1 +nemo-fabric-adapters-hermes==0.1.1 +nemoguardrails==0.23.0 nemo-relay==0.6.0 nemo-safe-synthesizer==0.1.7 -nemoguardrails==0.23.0 -ngcsdk==4.21.0 +ngcsdk==4.34.10 +numpy==2.5.2 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 +nvidia-nat-atif==1.9.0a20260811 +nvidia-nat-config-optimizer==1.9.0a20260811 +nvidia-nat-core==1.9.0a20260811 +nvidia-nat-eval==1.9.0a20260811 +nvidia-nat-langchain==1.9.0a20260811 +nvidia-nat-opentelemetry==1.9.0a20260811 +openai==2.54.0 opentelemetry-distro==0.64b0 +opentelemetry-exporter-otlp==1.43.0 opentelemetry-exporter-otlp-proto-grpc==1.43.0 opentelemetry-exporter-otlp-proto-http==1.43.0 -opentelemetry-exporter-otlp==1.43.0 opentelemetry-exporter-prometheus==0.64b0 opentelemetry-instrumentation-fastapi==0.64b0 opentelemetry-instrumentation-httpx==0.64b0 @@ -64,15 +71,16 @@ opentelemetry-instrumentation-system-metrics==0.64b0 opentelemetry-processor-baggage==0.65b0 opentelemetry-proto==1.43.0 opentelemetry-sdk==1.43.0 +optuna==4.4.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 -pydantic-settings==2.14.2 pydantic==2.13.4 +pydantic-settings==2.15.0 pyjwt==2.13.0 pyleak==0.2.0 python-multipart==0.0.32 @@ -83,7 +91,7 @@ rich==14.3.4 rouge-score==0.1.2 sacrebleu==2.6.0 sniffio==1.3.1 -sqlalchemy==2.0.51 +sqlalchemy==2.0.52 sqlmodel==0.0.39 streaming-form-data==2.1.0 structlog==26.1.0 @@ -92,7 +100,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.1 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/packages/nemo_platform/pyproject.toml b/packages/nemo_platform/pyproject.toml index e2acf75f19..25ad0fb143 100644 --- a/packages/nemo_platform/pyproject.toml +++ b/packages/nemo_platform/pyproject.toml @@ -219,8 +219,8 @@ models-service = [ # Generated from [tool.bundle-package]; do not edit by hand. nemo-agents-example-calculator = [ - "nvidia-nat-core>=1.8.0,<1.9", - "nvidia-nat-langchain>=1.8.0,<1.9", + "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-langchain>=1.9.0a20260811,<1.10", ] # Generated from [tool.bundle-package]; do not edit by hand. @@ -228,8 +228,12 @@ nemo-agents-plugin = [ "nemo-platform-plugin", "nemo-optimization-plugin", "nemo-agents-example-calculator", - "nvidia-nat-core>=1.8.0,<1.9", - "nvidia-nat-langchain>=1.8.0,<1.9", + "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-langchain>=1.9.0a20260811,<1.10", + "nvidia-nat-atif>=1.9.0a20260811,<1.10", + "nvidia-nat-config-optimizer>=1.9.0a20260811,<1.10", + "nvidia-nat-eval>=1.9.0a20260811,<1.10", + "nvidia-nat-opentelemetry>=1.9.0a20260811,<1.10", "langchain-aws==1.1.0", "boto3>=1.40.46,<1.40.62", "botocore>=1.40.46,<1.40.62", diff --git a/plugins/nemo-agents/examples/calculator-agent/pyproject.toml b/plugins/nemo-agents/examples/calculator-agent/pyproject.toml index 7454e42188..aa8aeac6de 100644 --- a/plugins/nemo-agents/examples/calculator-agent/pyproject.toml +++ b/plugins/nemo-agents/examples/calculator-agent/pyproject.toml @@ -7,10 +7,10 @@ name = "nemo-agents-example-calculator" description = "NAT ``calculator`` function group for the nemo-agents calculator ReAct example." requires-python = ">=3.11" dependencies = [ - "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-core>=1.9.0a20260811,<1.10", # Provides the ``react_agent`` workflow and the ``openai`` LLM the agent uses. # Required so a packaged container image (nemo agents package) can run the agent. - "nvidia-nat-langchain>=1.8.0,<1.9", + "nvidia-nat-langchain>=1.9.0a20260811,<1.10", ] version = "0.0.0" diff --git a/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml b/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml index f93172d2cd..9f386d40e0 100644 --- a/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml +++ b/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.0" description = "NAT ``email_phishing_analyzer`` function for the nemo-agents phishing ReAct example." requires-python = ">=3.11" dependencies = [ - "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-core>=1.9.0a20260811,<1.10", ] [project.entry-points."nat.components"] diff --git a/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml b/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml index 8a61f7fd19..00ee0669c7 100644 --- a/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml +++ b/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.0" description = "NAT capability functions for the nemo-agents email-security-analyst example." requires-python = ">=3.11,<3.15" dependencies = [ - "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-core>=1.9.0a20260811,<1.10", ] [project.entry-points."nat.components"] diff --git a/plugins/nemo-agents/pyproject.toml b/plugins/nemo-agents/pyproject.toml index 16e8970bca..117a4fa863 100644 --- a/plugins/nemo-agents/pyproject.toml +++ b/plugins/nemo-agents/pyproject.toml @@ -10,8 +10,19 @@ dependencies = [ "nemo-agents-example-calculator", "nemo-agents-example-email-phishing", "nemo-agents-example-email-security", - "nvidia-nat-core>=1.8.0,<1.9", - "nvidia-nat-langchain>=1.8.0,<1.9", + # NAT 1.9 is the first line whose cryptography cap (>=48,<49) overlaps + # data-designer's, so it is what makes the published nemo-platform[all] + # wheel resolvable at all; 1.8.0 caps cryptography at <47. That line ships + # only pre-releases today, and uv accepts a pre-release solely when a + # requirement it reads names one, so every NAT distribution in the closure + # is listed here rather than only the two this package imports. Collapse + # back to core + langchain on >=1.9.0 once it is released. + "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-langchain>=1.9.0a20260811,<1.10", + "nvidia-nat-atif>=1.9.0a20260811,<1.10", + "nvidia-nat-config-optimizer>=1.9.0a20260811,<1.10", + "nvidia-nat-eval>=1.9.0a20260811,<1.10", + "nvidia-nat-opentelemetry>=1.9.0a20260811,<1.10", # ASTD-164: tight pins avoid pip ResolutionTooDeep via aioboto3/langchain-aws. "langchain-aws==1.1.0", "boto3>=1.40.46,<1.40.62", diff --git a/pyproject.toml b/pyproject.toml index 84452d8779..9c2caa4ac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,7 +94,7 @@ dev = [ "nmp-testing", "mlflow-skinny>=3.11.1,<3.12.0", # Optional dep for fine-tuning (shipped in training images); skinny variant to test API surface without bloating uv.lock "nemo-platform-plugin", # Optional runtime dep; included here for type checking - "nvidia-nat-atif>=1.8.0,<1.9", # ATIF schema models for agentic-use trajectory validation + "nvidia-nat-atif>=1.9.0a20260811,<1.10", # ATIF schema models for agentic-use trajectory validation "nemo-platform-sdk-tools", # Include SDK/license tool migration target for testing "nmp-build-tools", # Build hook helpers imported by package-local hatch_build.py files "nmp-dev-mcp", # Include MCP dev tools @@ -341,7 +341,7 @@ override-dependencies = [ "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.28.1", # wandb-core Go CVEs (nspect); unsloth + training images - "cryptography>=50.0.0,<51", # GHSA-g6cj-pr64-35w5; overrides nvidia-nat-core's <47 cap after changelog review + "cryptography>=50.0.0,<51", # GHSA-g6cj-pr64-35w5; overrides nvidia-nat-core's and data-designer-engine's <49 caps after changelog review "click>=8.2.0", # Below CVEs are based on constraints that garak has "litellm>=1.83.10", # CVE-2026-42208 (Critical SQL injection), CVE-2026-40217, and 5 other High CVEs "python-dotenv>=1.2.2", diff --git a/uv.lock b/uv.lock index cd8c7b20df..59573cda6a 100644 --- a/uv.lock +++ b/uv.lock @@ -562,19 +562,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, ] -[[package]] -name = "beautifulsoup4" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve", 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/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, -] - [[package]] name = "bitsandbytes" version = "0.50.0" @@ -793,15 +780,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, ] -[[package]] -name = "circuitbreaker" -version = "2.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/ac/de7a92c4ed39cba31fe5ad9203b76a25ca67c530797f6bb420fff5f65ccb/circuitbreaker-2.1.3.tar.gz", hash = "sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084", size = 10787, upload-time = "2025-03-31T08:12:08.963Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/34/15f08edd4628f65217de1fc3c1a27c82e46fe357d60c217fc9881e12ebcc/circuitbreaker-2.1.3-py3-none-any.whl", hash = "sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1", size = 7737, upload-time = "2025-03-31T08:12:07.802Z" }, -] - [[package]] name = "claude-agent-sdk" version = "0.2.120" @@ -977,32 +955,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/e7/7069b3d6c018917f49ba2e1c5fb910e498c7fefa3a1b78cb1b79e61ff45d/coverage-7.15.3-py3-none-any.whl", hash = "sha256:da78fa6fc7dafe4212839173133ee85afcf42c5cd5f3e47fa7c1c210453b445e", size = 214297, upload-time = "2026-08-02T18:50:14.709Z" }, ] -[[package]] -name = "crc32c" -version = "2.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/66/7e97aa77af7cf6afbff26e3651b564fe41932599bc2d3dce0b2f73d4829a/crc32c-2.8.tar.gz", hash = "sha256:578728964e59c47c356aeeedee6220e021e124b9d3e8631d95d9a5e5f06e261c", size = 48179, upload-time = "2025-10-17T06:20:13.61Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/36/fd18ef23c42926b79c7003e16cb0f79043b5b179c633521343d3b499e996/crc32c-2.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:572ffb1b78cce3d88e8d4143e154d31044a44be42cb3f6fbbf77f1e7a941c5ab", size = 66379, upload-time = "2025-10-17T06:19:10.115Z" }, - { url = "https://files.pythonhosted.org/packages/62/e6/6f2af0ec64a668a46c861e5bc778ea3ee42171fedfc5440f791f470fd783/crc32c-2.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:106fbd79013e06fa92bc3b51031694fcc1249811ed4364ef1554ee3dd2c7f5a2", size = 61528, upload-time = "2025-10-17T06:19:11.768Z" }, - { url = "https://files.pythonhosted.org/packages/17/8b/4a04bd80a024f1a23978f19ae99407783e06549e361ab56e9c08bba3c1d3/crc32c-2.8-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6dde035f91ffbfe23163e68605ee5a4bb8ceebd71ed54bb1fb1d0526cdd125a2", size = 80028, upload-time = "2025-10-17T06:19:12.554Z" }, - { url = "https://files.pythonhosted.org/packages/21/8f/01c7afdc76ac2007d0e6a98e7300b4470b170480f8188475b597d1f4b4c6/crc32c-2.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e41ebe7c2f0fdcd9f3a3fd206989a36b460b4d3f24816d53e5be6c7dba72c5e1", size = 81531, upload-time = "2025-10-17T06:19:13.406Z" }, - { url = "https://files.pythonhosted.org/packages/32/2b/8f78c5a8cc66486be5f51b6f038fc347c3ba748d3ea68be17a014283c331/crc32c-2.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ecf66cf90266d9c15cea597d5cc86c01917cd1a238dc3c51420c7886fa750d7e", size = 80608, upload-time = "2025-10-17T06:19:14.223Z" }, - { url = "https://files.pythonhosted.org/packages/db/86/fad1a94cdeeeb6b6e2323c87f970186e74bfd6fbfbc247bf5c88ad0873d5/crc32c-2.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:59eee5f3a69ad0793d5fa9cdc9b9d743b0cd50edf7fccc0a3988a821fef0208c", size = 79886, upload-time = "2025-10-17T06:19:15.345Z" }, - { url = "https://files.pythonhosted.org/packages/e8/d8/3ae227890b3be40955a7144106ef4dd97d6123a82c2a5310cdab58ca49d8/crc32c-2.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:36f1e03ee9e9c6938e67d3bcb60e36f260170aa5f37da1185e04ef37b56af395", size = 66380, upload-time = "2025-10-17T06:19:18.009Z" }, - { url = "https://files.pythonhosted.org/packages/f2/a1/48145ae2545ebc0169d3283ebe882da580ea4606bfb67cf4ca922ac3cfc3/crc32c-2.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e08628bc72d5b6bc8e0730e8f142194b610e780a98c58cb6698e665cb885a5b", size = 61530, upload-time = "2025-10-17T06:19:19.974Z" }, - { url = "https://files.pythonhosted.org/packages/06/4b/cf05ed9d934cc30e5ae22f97c8272face420a476090e736615d9a6b53de0/crc32c-2.8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:086f64793c5ec856d1ab31a026d52ad2b895ac83d7a38fce557d74eb857f0a82", size = 80001, upload-time = "2025-10-17T06:19:20.784Z" }, - { url = "https://files.pythonhosted.org/packages/15/ab/4b04801739faf36345f6ba1920be5b1c70282fec52f8280afd3613fb13e2/crc32c-2.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcf72ee7e0135b3d941c34bb2c26c3fc6bc207106b49fd89aaafaeae223ae209", size = 81543, upload-time = "2025-10-17T06:19:21.557Z" }, - { url = "https://files.pythonhosted.org/packages/a9/1b/6e38dde5bfd2ea69b7f2ab6ec229fcd972a53d39e2db4efe75c0ac0382ce/crc32c-2.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a717dd9c3fd777d9bc6603717eae172887d402c4ab589d124ebd0184a83f89e", size = 80644, upload-time = "2025-10-17T06:19:22.325Z" }, - { url = "https://files.pythonhosted.org/packages/ce/45/012176ffee90059ae8ec7131019c71724ea472aa63e72c0c8edbd1fad1d7/crc32c-2.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0450bb845b3c3c7b9bdc0b4e95620ec9a40824abdc8c86d6285c919a90743c1a", size = 79919, upload-time = "2025-10-17T06:19:23.101Z" }, - { url = "https://files.pythonhosted.org/packages/db/b9/8e5d7054fe8e7eecab10fd0c8e7ffb01439417bdb6de1d66a81c38fc4a20/crc32c-2.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b977a32a3708d6f51703c8557008f190aaa434d7347431efb0e86fcbe78c2a50", size = 66203, upload-time = "2025-10-17T06:19:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/a1/8a/0660c44a2dd2cb6ccbb529eb363b9280f5c766f1017bc8355ed8d695bd94/crc32c-2.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4379f73f9cdad31958a673d11a332ec725ca71572401ca865867229f5f15e853", size = 61442, upload-time = "2025-10-17T06:19:27.74Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5a/6108d2dfc0fe33522ce83ba07aed4b22014911b387afa228808a278e27cd/crc32c-2.8-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2e68264555fab19bab08331550dab58573e351a63ed79c869d455edd3b0aa417", size = 79109, upload-time = "2025-10-17T06:19:28.535Z" }, - { url = "https://files.pythonhosted.org/packages/84/1e/c054f9e390090c197abf3d2936f4f9effaf0c6ee14569ae03d6ddf86958a/crc32c-2.8-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b48f2486727b8d0e7ccbae4a34cb0300498433d2a9d6b49cb13cb57c2e3f19cb", size = 80987, upload-time = "2025-10-17T06:19:29.305Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ad/1650e5c3341e4a485f800ea83116d72965030c5d48ccc168fcc685756e4d/crc32c-2.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ecf123348934a086df8c8fde7f9f2d716d523ca0707c5a1367b8bb00d8134823", size = 79994, upload-time = "2025-10-17T06:19:30.109Z" }, - { url = "https://files.pythonhosted.org/packages/d7/3b/f2ed924b177729cbb2ab30ca2902abff653c31d48c95e7b66717a9ca9fcc/crc32c-2.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e636ac60f76de538f7a2c0d0f3abf43104ee83a8f5e516f6345dc283ed1a4df7", size = 79046, upload-time = "2025-10-17T06:19:30.894Z" }, -] - [[package]] name = "cryptography" version = "50.0.0" @@ -1585,24 +1537,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294, upload-time = "2022-02-02T21:30:26.024Z" }, ] -[[package]] -name = "exa-py" -version = "1.16.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpcore", 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 = "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 = "openai", 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", 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 = "python-dotenv", 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 = "requests", 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/4e/b0/d035d8e56ca7d9192daf4a3bf4d4fc4a64d427d29df700868dd91ffc0a69/exa_py-1.16.2.tar.gz", hash = "sha256:1808a82ef9f25271ffd238d7b9e2ed279a96de89f140de401887866fc8b54ced", size = 41380, upload-time = "2026-04-24T19:08:07.982Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/27/934d9750e4f3c888a0cc8e702c2424069abb7d86b67602229c44083c3d25/exa_py-1.16.2-py3-none-any.whl", hash = "sha256:7a574e978a50dd458b07e8bbb8b1da9543b8f8e57191b7bd1086546414686689", size = 56642, upload-time = "2026-04-24T19:08:09.052Z" }, -] - [[package]] name = "exceptiongroup" version = "1.3.1" @@ -3102,19 +3036,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/e6/c7c39efe0bc7e1b7c3d8f54f85846e04c901913c3d3e99068b218558c6f1/langchain_core-1.5.3-py3-none-any.whl", hash = "sha256:48b56fa580277209594dd7baf837f5b9a2a3651613f34ff9fb1728b429df015f", size = 561687, upload-time = "2026-07-30T14:55:54.419Z" }, ] -[[package]] -name = "langchain-exa" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exa-py", 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 = "langchain-core", 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/94/69/f956c20fb8a73185063f8c54b559fc65562939a25bb58a16ad97ec8640d3/langchain_exa-1.1.0.tar.gz", hash = "sha256:25a782c310b55475d4b40d50c2ed15a9d7b1e6c413fb958ebb570bba372bee7e", size = 107388, upload-time = "2026-03-26T17:00:10.059Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/d0/cfce61b53b79974a4883ff7675fe516192ae715e0f925e063e5869b6a929/langchain_exa-1.1.0-py3-none-any.whl", hash = "sha256:7eb4e1b6004f74fe278467470a4e76ba3b74a17df13f64e64745f0780f63d845", size = 7972, upload-time = "2026-03-26T17:00:09.239Z" }, -] - [[package]] name = "langchain-google-genai" version = "4.3.2" @@ -3130,35 +3051,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/cb/4a2eb187b108a240d57cf8dcf67e818ca75365f769444bf5716e2823cd98/langchain_google_genai-4.3.2-py3-none-any.whl", hash = "sha256:f3b1c09b264612fd1735a9590987bfa0cccca0bc0111691543decb5a03b8667d", size = 72770, upload-time = "2026-07-27T16:27:38.052Z" }, ] -[[package]] -name = "langchain-huggingface" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub", 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 = "langchain-core", 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 = "tokenizers", 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/2c/e8/4068ad02179253f55958e59e442e5b6e8cb95ffc5e805cc4db0b1ef61d4e/langchain_huggingface-1.2.2.tar.gz", hash = "sha256:1dd91ec415190d2704e93ec149618e3145075863ba37e74afc9080d685dc2743", size = 255513, upload-time = "2026-04-16T19:57:41.046Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/ed/648b87f9b67153ade616f360bf4145b76ed428b4adb89525938f611e9828/langchain_huggingface-1.2.2-py3-none-any.whl", hash = "sha256:f94944b0c0d5afc687568d426c87ed5236907464c41e72108ed76eee1a690f6d", size = 31926, upload-time = "2026-04-16T19:57:40.079Z" }, -] - -[[package]] -name = "langchain-litellm" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography", 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 = "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 = "langchain-core", 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 = "litellm", 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/72/24/473283e69791fb35e11126c11e7347ffbf110c2dfcebebe90bd974bc7348/langchain_litellm-0.7.0.tar.gz", hash = "sha256:d3b8d0e6f65132f048fbe9d706e5334d45830e3c49aa033d32c37c6683ad2ceb", size = 345959, upload-time = "2026-06-15T10:00:36.437Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/d7/73ffd47f1e4bfe4649f25a58229fca4e0162c2f946c9f8f9ae5eb44e5c3c/langchain_litellm-0.7.0-py3-none-any.whl", hash = "sha256:5f67e456bc4e14e1247aa5a30e9da08d61d390aee66ff97e0113bfcb4334ff42", size = 25465, upload-time = "2026-06-15T10:00:37.428Z" }, -] - [[package]] name = "langchain-mcp-adapters" version = "0.2.2" @@ -3173,19 +3065,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/2f/15d5e6c1765d8404a9cce38d8c81d7b33fb3392f9db5b992c000dddbd2a3/langchain_mcp_adapters-0.2.2-py3-none-any.whl", hash = "sha256:d08e64954e86281002653071b7430e0377c9a577cb4ac3143abfeb3e24ef8797", size = 23288, upload-time = "2026-03-16T17:13:29.073Z" }, ] -[[package]] -name = "langchain-milvus" -version = "0.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", 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 = "pymilvus", 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/09/21/ecce785a24e61ba2c0f6249a5a68b969ccc053342f933aeab31a3f885f5e/langchain_milvus-0.3.3.tar.gz", hash = "sha256:406c2d88da133741f5cc3e2fea4b36386182b35500205c70d003382ded210e41", size = 35577, upload-time = "2026-01-05T10:01:16.386Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/5d/6a0dac51ca2343332d5de9c79686d54f905d225b173a8e1b03ae6d35982a/langchain_milvus-0.3.3-py3-none-any.whl", hash = "sha256:6e12f15453372dd48836978faa4a149de79c721df3322229ad732a5e628e8e97", size = 38962, upload-time = "2026-01-05T10:01:15.186Z" }, -] - [[package]] name = "langchain-nvidia-ai-endpoints" version = "1.4.3" @@ -3200,27 +3079,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/de/1f0a9a7b464a212c5f8e761f445f7c539c38956fe4e178e19a4a9a27c745/langchain_nvidia_ai_endpoints-1.4.3-py3-none-any.whl", hash = "sha256:f71966a079f1800ae292b4add953509481d149dc3bc4a3f60b9c09742642d043", size = 64484, upload-time = "2026-07-02T00:38:04.983Z" }, ] -[[package]] -name = "langchain-oci" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp", 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 = "langchain", 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 = "langchain-core", 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 = "langchain-openai", 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 = "langgraph", 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 = "numpy", 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 = "oci", 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 = "oci-openai", 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 = "openai", 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", 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')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/48/fe638fdc55fd78b40a5017a0da8f52844f100003f86a7656406fab1f5f3d/langchain_oci-0.3.1.tar.gz", hash = "sha256:9a6bec356dab1b082b3c3d826fe0c9f28fb6b755831621493c1262e423d564d0", size = 113641, upload-time = "2026-07-17T19:35:26.391Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/6c/ecc94beebd38e5f9380ea8a4ce83edd5ef2d073e4b257009cd1c5b2b6353/langchain_oci-0.3.1-py3-none-any.whl", hash = "sha256:27a5eddfded365ac39e76008833c7e25a7da61424f969d6c8a1b02ad924ce2bc", size = 141912, upload-time = "2026-07-17T19:35:25.017Z" }, -] - [[package]] name = "langchain-openai" version = "1.4.1" @@ -4054,8 +3912,8 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, ] [[package]] @@ -4067,7 +3925,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] [[package]] name = "nemo-agents-example-email-security" @@ -4078,7 +3936,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] [[package]] name = "nemo-agents-plugin" @@ -4099,8 +3957,12 @@ dependencies = [ { name = "nemo-optimization-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", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "pyyaml", 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 = "rich", 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')" }, ] @@ -4138,8 +4000,12 @@ requires-dist = [ { name = "nemo-optimization-plugin", editable = "plugins/nemo-optimization" }, { name = "nemo-platform", editable = "packages/nemo_platform" }, { name = "nemo-platform-plugin", editable = "packages/nemo_platform_plugin" }, - { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-atif", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", specifier = ">=1.9.0a20260811,<1.10" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=8.0" }, { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.23" }, { name = "python-on-whales", marker = "extra == 'container'", specifier = ">=0.60" }, @@ -4938,8 +4804,12 @@ all = [ { 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')" }, { name = "nmp-guardrails", 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "openai", 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 = "opentelemetry-distro", 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 = "opentelemetry-exporter-otlp", 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')" }, @@ -5154,8 +5024,12 @@ nemo-agents-plugin = [ { name = "nemo-fabric-adapters-hermes", 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-optimization-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-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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "pyyaml", 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 = "rich", 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')" }, ] @@ -5345,8 +5219,12 @@ plugins = [ { name = "nemo-safe-synthesizer", 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 = "nemoguardrails", extra = ["tracing"], 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "optuna", 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 = "pandas", 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", 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')" }, @@ -5415,8 +5293,12 @@ services = [ { 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')" }, { name = "nmp-guardrails", 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "openai", 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 = "opentelemetry-distro", 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 = "opentelemetry-exporter-otlp", 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')" }, @@ -5786,16 +5668,32 @@ requires-dist = [ { name = "numpy", marker = "extra == 'services'", specifier = ">=1.26.0" }, { name = "nvidia-ml-py", marker = "extra == 'nemo-platform-sdk'", specifier = ">=13.0.0" }, { name = "nvidia-ml-py", marker = "extra == 'nmp-common'", specifier = ">=13.0.0" }, - { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, - { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-atif", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-config-optimizer", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-eval", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-opentelemetry", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, { name = "openai", marker = "extra == 'all'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'guardrails-service'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.61.0" }, @@ -6946,7 +6844,7 @@ dev = [ { name = "nmp-secrets", editable = "services/core/secrets" }, { name = "nmp-testing", editable = "packages/nmp_testing" }, { name = "nox" }, - { name = "nvidia-nat-atif", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-atif", specifier = ">=1.9.0a20260811,<1.10" }, { name = "papermill", specifier = ">=2.6.0" }, { name = "pre-commit", specifier = ">=3.8.0" }, { name = "pydantic-settings", specifier = ">=2.6.1" }, @@ -8346,18 +8244,31 @@ wheels = [ [[package]] name = "nvidia-nat-atif" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } 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')" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/ee/a22d1b5d5d6f3d625f451f5185b7e32a6464058f2c7899f6d98c68f46aef/nvidia_nat_atif-1.8.0-py3-none-any.whl", hash = "sha256:38c97d6e506e8cc151a997bfd6cafa08b969e181b50b9302f28d2229a3b37829", size = 105633, upload-time = "2026-06-17T00:25:16.624Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9e/6d/3888e0d9e8c2b29d08c4f1662b6845cfa2bebf0dfacef0ded09c80f0f726/nvidia_nat_atif-1.9.0a20260811.tar.gz", hash = "sha256:0d88971a99e0f24b04949392e4df94c3971abee7e7ac95d9d7e15b83a5ae9661", size = 41832, upload-time = "2026-08-11T10:08:05.953Z" } + +[[package]] +name = "nvidia-nat-config-optimizer" +version = "1.9.0a20260811" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "optuna", 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 = "pandas", 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", 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 = "pyyaml", 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/96/22/e21d4be22a645f7c3f2ddc7fd42dd548b3e29e11c41081556817a618d20a/nvidia_nat_config_optimizer-1.9.0a20260811.tar.gz", hash = "sha256:38306fe2a096128c2af405c21c3a5fa39e096ba79ab73a4d7635b833fa676567", size = 1452, upload-time = "2026-08-11T10:07:15.481Z" } [[package]] name = "nvidia-nat-core" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles", 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')" }, @@ -8392,54 +8303,37 @@ dependencies = [ { name = "urllib3", 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 = "uvicorn", extra = ["standard"], 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')" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/17/46f8bb24ba9789064ab6a90a905f31218bca802346adace079256db82c72/nvidia_nat_core-1.8.0-py3-none-any.whl", hash = "sha256:645bcc995f73598016b750f7849decb24bea857549f96f5fcbbd8ff37f0c3fc5", size = 779726, upload-time = "2026-06-17T00:21:24.556Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/dd/97/44b5e486474d7dd7f5036fec0a51c2cb2e483be406a2499687ef6b03d392/nvidia_nat_core-1.9.0a20260811.tar.gz", hash = "sha256:3c2ee4cd30591929ade7ce37ffc9c9da820e0187f2918c0b364d7d1f93c82e7d", size = 3003, upload-time = "2026-08-11T10:07:35.864Z" } [[package]] name = "nvidia-nat-eval" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-atif", 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')" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/25/0fd8109c653d967d82f8ef6fc729c41504e3b4ec51dcfd39c952275d4e67/nvidia_nat_eval-1.8.0-py3-none-any.whl", hash = "sha256:4baebf66289040708c22bfd57f6edb37728409795a260bd0f07b894c9ec8b110", size = 69649, upload-time = "2026-06-17T00:23:20.109Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/96/fa/b5341795a70df753e4efdfca4e3f597ee304626ee777f6e66b49aab5b4cf/nvidia_nat_eval-1.9.0a20260811.tar.gz", hash = "sha256:89f54970fa9bbac3a609e89a4d85c9dc7e401b50f0a6f447f3656935bd34906f", size = 1401, upload-time = "2026-08-11T10:07:40.084Z" } [[package]] name = "nvidia-nat-langchain" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain", 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 = "langchain-aws", 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 = "langchain-classic", 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 = "langchain-community", 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 = "langchain-core", 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 = "langchain-exa", 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 = "langchain-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')" }, - { name = "langchain-litellm", 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 = "langchain-milvus", 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 = "langchain-nvidia-ai-endpoints", 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 = "langchain-oci", 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 = "langchain-openai", 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 = "langgraph", 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 = "langsmith", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-opentelemetry", 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 = "openevals", 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 = "pyopenssl", 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 = "wikipedia", 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')" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/49/eee7d8f68568e4c994a67ee0def4070e8fdeb0d603a7ef580050b3ee3d34/nvidia_nat_langchain-1.8.0-py3-none-any.whl", hash = "sha256:8120ad2b972ce2d90fae1e7f95b3daf6b463310e0105fc330896bfb069a5d403", size = 197395, upload-time = "2026-06-17T00:27:13.69Z" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/7f/58/8797ba298ce3eed248fcedb33c2195da67fd88c6809caa6a431a2fd1f772/nvidia_nat_langchain-1.9.0a20260811.tar.gz", hash = "sha256:d55c2d81161c1ce57845b9eceac94c46df977e832e5d9b2000a7c71773de1659", size = 42183, upload-time = "2026-08-11T10:07:51.214Z" } [[package]] name = "nvidia-nat-opentelemetry" -version = "1.8.0" +version = "1.9.0a20260811" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-core", 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')" }, @@ -8448,9 +8342,7 @@ dependencies = [ { name = "opentelemetry-exporter-otlp", 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 = "opentelemetry-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')" }, ] -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/df/33cba1fb316f720b075dac2330b588b1a62d9d991cd6e1d5bc8f795b3bba/nvidia_nat_opentelemetry-1.8.0-py3-none-any.whl", hash = "sha256:2ef2de28a1d07029126ae1c13ff39b9dd61a6985e43199e6fe80968b465b1eec", size = 68449, upload-time = "2026-06-17T00:39:23.758Z" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/fd/ac/87b9f93da62d85984576bd872b6610db24a05babc6adc73fc562abd68905/nvidia_nat_opentelemetry-1.9.0a20260811.tar.gz", hash = "sha256:6b600a7d5bab52b21d77f771f400602c7dcae470f94821c6398907bc02f0c8f0", size = 41891, upload-time = "2026-08-11T10:07:34.786Z" } [[package]] name = "nvidia-nccl-cu13" @@ -8497,41 +8389,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] -[[package]] -name = "oci" -version = "2.184.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi", 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 = "circuitbreaker", 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 = "crc32c", 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 = "cryptography", 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 = "pyjwt", 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 = "pyopenssl", 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 = "python-dateutil", 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 = "pytz", 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 = "urllib3", 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/a7/97/d204a71489b8c685818f596f2082c78b52fe70a934dc52d9dbd81345da47/oci-2.184.0.tar.gz", hash = "sha256:19742d0fdd27947daafd2cfea4db31ad585fde379094f41ddb7280109939210e", size = 17818751, upload-time = "2026-08-04T04:39:08.473Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/3a/08cf20553974b702c53ebaa37f12e81d6293eb1001032939138279e3116a/oci-2.184.0-py3-none-any.whl", hash = "sha256:1737deb49604658308abef1b91e9039111637f75f4fd112cfd92d8e73871476c", size = 36213396, upload-time = "2026-08-04T04:38:56.099Z" }, -] - -[[package]] -name = "oci-openai" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -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 = "oci", 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 = "openai", 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 = "requests", 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/f7/93/c395a92c8019dec50bd5760a9fcfd718cedb416824f8ebba0b26568ab6f4/oci_openai-1.1.0.tar.gz", hash = "sha256:1819ef7d17c1fdbe05c5c0653301fdca0d2fa99f6f8b1b7bd7667da9704d62a1", size = 199961, upload-time = "2026-02-03T05:15:12.486Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/28/a5/48aa98c4b68f3cc55bf74ef7a8d691d230ff09d5fab521e17ffd8b155ac4/oci_openai-1.1.0-py3-none-any.whl", hash = "sha256:a028ee3e1a1b1ad4e0495b10ef70b81b5e6cd50e7f13cf485a112762641a9160", size = 11449, upload-time = "2026-02-03T05:15:10.957Z" }, -] - [[package]] name = "onnxruntime" version = "1.28.0" @@ -8644,21 +8501,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9c/75/76f6ade78f6102c61034f828e2a22616708df2c9504bc8d6af9dd8f73dc5/opencv_python-5.0.0.93-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:198a75138241810206a17c829dbcc40a7cb1841cda538ca86cbbfc6c7d95f898", size = 48322443, upload-time = "2026-07-02T05:50:25.466Z" }, ] -[[package]] -name = "openevals" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain", 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 = "langchain-openai", 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 = "langsmith", 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 = "rich", 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/b0/b1/028a05846136805b29b7a3afb58a940c2d213fa2c3d0a7d7003c7fbaa115/openevals-0.2.0.tar.gz", hash = "sha256:7e95fa64625be53eaa8c657d7f69b842a52bda10bdf3bb91781c7d09a385b069", size = 140711, upload-time = "2026-04-07T19:45:22.749Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/8b/00f402b7f3475e235c339a9bc82d2eaf46cc08b53ecd85d4a117850170d3/openevals-0.2.0-py3-none-any.whl", hash = "sha256:2bce5964be9d162e3d38c2dfd026739156e1ac521536ade6b8e2f0a89b632f2c", size = 106958, upload-time = "2026-04-07T19:45:21.575Z" }, -] - [[package]] name = "openinference-instrumentation" version = "0.1.56" @@ -10646,15 +10488,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/56/f9/c037c35f6d0b6bc3bc7bfb314f1d6f1f9a341328ef47cd63fc4f850a7b27/sounddevice-0.5.5-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:05eb9fd6c54c38d67741441c19164c0dae8ce80453af2d8c4ad2e7823d15b722", size = 108557, upload-time = "2026-01-23T18:36:37.41Z" }, ] -[[package]] -name = "soupsieve" -version = "2.9.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/38/e12680bbe6b4f8f3d17adcaf38d26850aa756c85cf4a80e79fc12a018fe8/soupsieve-2.9.1.tar.gz", hash = "sha256:c33e6605bbc71dd628b00c632d58ae607c22bade247e52553928f83bbb75b4ba", size = 122261, upload-time = "2026-07-21T16:57:17.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/2c/437fe806897c2d6cfdc3ee43a18da8bf8e568530a4ae9bac781541ca9896/soupsieve-2.9.1-py3-none-any.whl", hash = "sha256:4f4477399246b7a0c720a88ca2454b11cd6bb9ae4c9d170140786e916776c14c", size = 37404, upload-time = "2026-07-21T16:57:16.421Z" }, -] - [[package]] name = "sphinx" version = "9.1.0" @@ -11867,16 +11700,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, ] -[[package]] -name = "wikipedia" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4", 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 = "requests", 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/67/35/25e68fbc99e672127cc6fbb14b8ec1ba3dfef035bf1e4c90f78f24a80b7d/wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2", size = 27748, upload-time = "2014-11-15T15:59:49.808Z" } - [[package]] name = "wrapt" version = "1.17.3" From d6a87198b5374faa8a8d55ee2104dbff6fcafbc4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 16:16:54 +0000 Subject: [PATCH 10/15] ci: install wheels without repo config in wheel-test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The install step runs inside the checkout, so uv applied the repo's [tool.uv] override-dependencies and resolved a dependency set no user can get. That is why the venv leg passed while the uv tool leg — which does not read project config — failed on the real conflict. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .github/workflows/ci.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e09cc02568..03593bb417 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1361,15 +1361,17 @@ jobs: # Supply-chain: partial-pin the wheel's direct external deps to a committed constraints # file. Regenerate with script/compile-wheel-constraints.sh. CONSTRAINTS="${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-services.txt" + # --no-config: this step runs inside the checkout, so uv would otherwise apply the + # repo's [tool.uv] override-dependencies and resolve a dependency set no user can get. if [[ "${INSTALL_METHOD}" == "tool" ]]; then - uv tool install --python "${PYTHON_VERSION}" \ + uv tool install --no-config --python "${PYTHON_VERSION}" \ --constraints "${CONSTRAINTS}" \ "${WHEEL}[services]" BIN_DIR="${UV_TOOL_BIN_DIR}" else VENV="${RUNNER_TEMP}/wheelcheck/.venv" uv venv "${VENV}" --python "${PYTHON_VERSION}" - uv pip install --python "${VENV}/bin/python" \ + uv pip install --no-config --python "${VENV}/bin/python" \ --constraint "${CONSTRAINTS}" \ "${WHEEL}[services]" BIN_DIR="${VENV}/bin" @@ -1397,7 +1399,7 @@ jobs: # (see the nemo-platform CLI step above). cd "${RUNNER_TEMP}/wheelcheck" uv venv .venv --python "${PYTHON_VERSION}" - uv pip install --python .venv/bin/python \ + uv pip install --no-config --python .venv/bin/python \ --constraint "${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-plugin.txt" \ "${WHEEL}" unset PYTHONPATH VIRTUAL_ENV From 89868b26e8d01cd4146e93f7b9cb8b107eb04561 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 16:16:54 +0000 Subject: [PATCH 11/15] docs: keep the interpreter flag out of the install path State the supported Python range once in the prerequisites and move the --python escape hatch to CLI troubleshooting, where a user whose default interpreter is out of range will look. uv enforces only the lower bound of requires-python, so the flag cannot be dropped entirely. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- README.md | 2 +- docs/cli/index.mdx | 2 -- docs/cli/troubleshooting.mdx | 20 ++++++++++++++++++++ docs/get-started/setup.mdx | 2 +- packages/nemo_platform/README.md | 2 +- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0c5fc33fad..f0231e364d 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ uv tool install "nemo-platform[all]" nemo setup ``` -`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12-3.13 range. +`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. Source checkout for development: diff --git a/docs/cli/index.mdx b/docs/cli/index.mdx index 8e328760af..c9abf36b38 100644 --- a/docs/cli/index.mdx +++ b/docs/cli/index.mdx @@ -36,8 +36,6 @@ Install the PyPI `nemo-platform` wrapper package with [uv](https://docs.astral.s uv tool install "nemo-platform[all]" ``` -uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported Python 3.12-3.13 range. - ### Install in a Virtual Environment To import the SDK from your own project, or when tool installs are unavailable, install into a Python 3.12-3.13 virtual environment: diff --git a/docs/cli/troubleshooting.mdx b/docs/cli/troubleshooting.mdx index 9c5550e029..42049beb23 100644 --- a/docs/cli/troubleshooting.mdx +++ b/docs/cli/troubleshooting.mdx @@ -23,6 +23,26 @@ Activate the virtual environment where you installed the package: source /path/to/venv/bin/activate ``` +## Installation Issues + +### Install Fails Compiling Dependencies from Source + +**Symptoms:** +- `uv tool install "nemo-platform[all]"` fails while building a dependency, often with a missing C header such as `omp.h` +- `nemo --version` works but no dependency wheels are found for your interpreter + +**Cause:** + +NeMo Platform supports Python 3.12 and 3.13. uv selects the interpreter it prefers on your machine, and it does not enforce the upper bound of a package's supported Python range, so an install can start on Python 3.14 and then fall back to building dependencies that publish no 3.14 wheels. + +**Solution:** + +Name a supported interpreter. uv downloads it when your machine does not have one: + +```bash +uv tool install --python 3.13 "nemo-platform[all]" +``` + ## Connection Issues ### Unable to Connect to Server diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx index 5211592765..921d08c2f3 100644 --- a/docs/get-started/setup.mdx +++ b/docs/get-started/setup.mdx @@ -27,7 +27,7 @@ Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest uv tool install "nemo-platform[all]" ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12-3.13 range. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. For SDK and CLI usage only, install the base package. Local services are unavailable until you add the `all` extra: diff --git a/packages/nemo_platform/README.md b/packages/nemo_platform/README.md index 2325b7cd11..7ccd0f98d6 100644 --- a/packages/nemo_platform/README.md +++ b/packages/nemo_platform/README.md @@ -31,7 +31,7 @@ uv tool install "nemo-platform[all]" uv tool install nemo-platform ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. uv installs the tool on your default interpreter, so add `--python 3.13` when that default is outside the supported 3.12–3.13 range. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. +[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. Then bring up the platform: From b4cc5b2b65dd9889591839b803d15ddce4d6c956 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 16:54:20 +0000 Subject: [PATCH 12/15] chore(licenses): refresh the manifest for the NAT bump Drops the transitive packages NAT 1.9 no longer pulls (oci, langchain-exa, langchain-milvus, wikipedia, and friends) and adds nvidia-nat-config-optimizer. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- third_party/licenses.jsonl | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/third_party/licenses.jsonl b/third_party/licenses.jsonl index 4960d1b3e1..ff6df29412 100644 --- a/third_party/licenses.jsonl +++ b/third_party/licenses.jsonl @@ -23,7 +23,6 @@ {"name": "authlib", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "base58", "license": "MIT", "compatible": true} {"name": "beartype", "license": "MIT", "compatible": true} -{"name": "beautifulsoup4", "license": "MIT", "compatible": true} {"name": "boto3", "license": "APACHE-2.0", "compatible": true} {"name": "botocore", "license": "APACHE-2.0", "compatible": true} {"name": "botocore-stubs", "license": "MIT", "compatible": true} @@ -34,7 +33,6 @@ {"name": "cffi", "license": "MIT", "compatible": true} {"name": "chardet", "license": "LGPL-2.1-OR-LATER", "compatible": true} {"name": "charset-normalizer", "license": "MIT", "compatible": true} -{"name": "circuitbreaker", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "claude-agent-sdk", "license": "MIT", "compatible": true} {"name": "click", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "clickhouse-connect", "license": "APACHE-2.0", "compatible": true} @@ -42,7 +40,6 @@ {"name": "colorama", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "colorlog", "license": "MIT", "compatible": true} {"name": "contourpy", "license": "BSD-3-CLAUSE", "compatible": true} -{"name": "crc32c", "license": "LGPL-2.1-OR-LATER", "compatible": true} {"name": "cryptography", "license": "APACHE-2.0", "compatible": true} {"name": "cycler", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "cyclopts", "license": "APACHE-2.0", "compatible": true} @@ -66,7 +63,6 @@ {"name": "duckdb", "license": "MIT", "compatible": true} {"name": "durationpy", "license": "MIT", "compatible": true} {"name": "email-validator", "license": "UNLICENSE", "compatible": true} -{"name": "exa-py", "license": "MIT", "compatible": true} {"name": "exceptiongroup", "license": "MIT", "compatible": true} {"name": "expandvars", "license": "MIT", "compatible": true} {"name": "faker", "license": "MIT", "compatible": true} @@ -189,14 +185,9 @@ {"name": "langchain-classic", "license": "MIT", "compatible": true} {"name": "langchain-community", "license": "MIT", "compatible": true} {"name": "langchain-core", "license": "MIT", "compatible": true} -{"name": "langchain-exa", "license": "MIT", "compatible": true} {"name": "langchain-google-genai", "license": "MIT", "compatible": true} -{"name": "langchain-huggingface", "license": "MIT", "compatible": true} -{"name": "langchain-litellm", "license": "MIT", "compatible": true} {"name": "langchain-mcp-adapters", "license": "MIT", "compatible": true} -{"name": "langchain-milvus", "license": "MIT", "compatible": true} {"name": "langchain-nvidia-ai-endpoints", "license": "MIT", "compatible": true} -{"name": "langchain-oci", "license": "MIT", "compatible": true} {"name": "langchain-openai", "license": "MIT", "compatible": true} {"name": "langchain-protocol", "license": "MIT", "compatible": true} {"name": "langchain-text-splitters", "license": "MIT", "compatible": true} @@ -240,19 +231,17 @@ {"name": "numpy", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "nvidia-ml-py", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "nvidia-nat-atif", "license": "APACHE-2.0", "compatible": true} +{"name": "nvidia-nat-config-optimizer", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-core", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-eval", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-langchain", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-opentelemetry", "license": "APACHE-2.0", "compatible": true} {"name": "oauthlib", "license": "BSD-3-CLAUSE", "compatible": true} -{"name": "oci", "license": "UPL-1.0 OR APACHE-2.0", "compatible": true} -{"name": "oci-openai", "license": "UPL-1.0", "compatible": true} {"name": "onnxruntime", "license": "MIT", "compatible": true} {"name": "openai", "license": "APACHE-2.0", "compatible": true} {"name": "openai-codex", "license": "APACHE-2.0", "compatible": true} {"name": "openai-codex-cli-bin", "license": "APACHE-2.0", "compatible": true} {"name": "openapi-pydantic", "license": "MIT", "compatible": true} -{"name": "openevals", "license": "MIT", "compatible": true} {"name": "openinference-instrumentation", "license": "APACHE-2.0", "compatible": true} {"name": "openinference-instrumentation-litellm", "license": "APACHE-2.0", "compatible": true} {"name": "openinference-semantic-conventions", "license": "APACHE-2.0", "compatible": true} @@ -354,7 +343,6 @@ {"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": "sqlite-vec", "license": "MIT", "compatible": true} @@ -405,7 +393,6 @@ {"name": "wcwidth", "license": "MIT", "compatible": true} {"name": "websocket-client", "license": "APACHE-2.0", "compatible": true} {"name": "websockets", "license": "BSD-3-CLAUSE", "compatible": true} -{"name": "wikipedia", "license": "MIT", "compatible": true} {"name": "wrapt", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "xdg-base-dirs", "license": "ISC", "compatible": true} {"name": "xxhash", "license": "BSD-3-CLAUSE", "compatible": true} From 1c5a6b0e064b309e5087f800498a0b71dc967440 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 19:28:52 +0000 Subject: [PATCH 13/15] Revert "deps(nemo-agents): move NAT to the 1.9 line so the wheel resolves" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 548ac20d8 and its license refresh (b4cc5b2b6), and drops the CI changes that depend on them. NAT publishes no stable release above 1.8.0 — only daily 1.9.0a builds — so the bump put pre-releases of our own toolkit into a shipped wheel. Wait for 1.9.0 stable instead. Deferred with it: the uv tool install leg in wheel-test and --no-config on the wheel installs. Both only pass once nemo-platform[all] resolves without the repo's override-dependencies, which needs the NAT cryptography cap relaxed. Published 0.3.0 still installs, so this affects the next release, not users today. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- .../nemo-platform-plugin.txt | 18 +- .../nemo-platform-services.txt | 55 ++- .github/workflows/ci.yaml | 36 +- packages/nemo_platform/pyproject.toml | 12 +- .../examples/calculator-agent/pyproject.toml | 4 +- .../email-phishing-analyzer/pyproject.toml | 2 +- .../email-security-analyst/pyproject.toml | 2 +- plugins/nemo-agents/pyproject.toml | 15 +- pyproject.toml | 4 +- script/compile-wheel-constraints.sh | 4 +- third_party/licenses.jsonl | 15 +- uv.lock | 339 +++++++++++++----- 12 files changed, 324 insertions(+), 182 deletions(-) diff --git a/.github/wheel-constraints/nemo-platform-plugin.txt b/.github/wheel-constraints/nemo-platform-plugin.txt index 5c325ea655..15dae7ecc0 100644 --- a/.github/wheel-constraints/nemo-platform-plugin.txt +++ b/.github/wheel-constraints/nemo-platform-plugin.txt @@ -1,29 +1,27 @@ # 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 (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. +# reproducibility; deep transitives resolve normally and cannot self-conflict. # Regenerate with: script/compile-wheel-constraints.sh # -anthropic==0.121.0 +anthropic==0.118.0 anyio==4.14.2 distro==1.9.0 docker==7.2.0 -fastapi==0.141.1 -fsspec==2026.7.0 +fastapi==0.139.2 +fsspec==2026.6.0 httpx==0.28.1 jsonschema==4.26.0 lark==1.3.1 -ngcsdk==4.34.10 +ngcsdk==4.21.0 nvidia-ml-py==13.610.43 -openai==3.0.0 -prompt-toolkit==3.0.53 +openai==2.47.0 +prompt-toolkit==3.0.52 psutil==7.2.2 +pydantic-settings==2.14.2 pydantic==2.13.4 -pydantic-settings==2.15.0 pyyaml==6.0.3 requests==2.34.2 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 f53d15f728..0e68b4ed1c 100644 --- a/.github/wheel-constraints/nemo-platform-services.txt +++ b/.github/wheel-constraints/nemo-platform-services.txt @@ -1,15 +1,14 @@ # 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 (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. +# reproducibility; deep transitives resolve normally and cannot self-conflict. # Regenerate with: script/compile-wheel-constraints.sh # aioboto3==15.5.0 aiofiles==25.1.0 aiohttp==3.14.3 aiosqlite==0.22.1 -alembic==1.19.1 -anthropic==0.121.0 +alembic==1.18.5 +anthropic==0.118.0 anyio==4.14.2 asyncpg==0.31.0 base58==2.1.1 @@ -22,46 +21,40 @@ datasets==4.3.0 distro==1.9.0 docker==7.2.0 duckdb==1.5.5 -fastapi==0.141.1 -fastmcp==3.4.7 +fastapi==0.139.2 +fastmcp==3.4.4 fsspec==2025.9.0 -greenlet==3.5.5 +greenlet==3.5.4 gunicorn==26.0.0 httpx==0.28.1 -huggingface-hub==1.27.0 +huggingface-hub==1.24.0 hvac==2.4.0 jinja2==3.1.6 jsonpath-ng==1.8.0 jsonschema==4.26.0 kubernetes==36.0.3 -langchain==1.3.15 langchain-aws==1.1.0 langchain-community==0.3.31 -langchain-core==1.5.4 +langchain-core==1.5.0 langchain-nvidia-ai-endpoints==1.4.3 -langchain-openai==1.4.3 +langchain-openai==1.4.0 +langchain==1.3.14 lark==1.3.1 -matplotlib==3.11.1 nemo-anonymizer==0.3.1 nemo-fabric==0.1.1 -nemo-fabric-adapters-hermes==0.1.1 -nemoguardrails==0.23.0 nemo-relay==0.6.0 nemo-safe-synthesizer==0.1.7 -ngcsdk==4.34.10 -numpy==2.5.2 +nemoguardrails==0.23.0 +ngcsdk==4.21.0 nvidia-ml-py==13.610.43 -nvidia-nat-atif==1.9.0a20260811 -nvidia-nat-config-optimizer==1.9.0a20260811 -nvidia-nat-core==1.9.0a20260811 -nvidia-nat-eval==1.9.0a20260811 -nvidia-nat-langchain==1.9.0a20260811 -nvidia-nat-opentelemetry==1.9.0a20260811 -openai==2.54.0 +nvidia-nat-config-optimizer==1.8.0 +nvidia-nat-core==1.8.0 +nvidia-nat-langchain==1.8.0 +openai==2.47.0 opentelemetry-distro==0.64b0 -opentelemetry-exporter-otlp==1.43.0 opentelemetry-exporter-otlp-proto-grpc==1.43.0 opentelemetry-exporter-otlp-proto-http==1.43.0 +opentelemetry-exporter-otlp==1.43.0 opentelemetry-exporter-prometheus==0.64b0 opentelemetry-instrumentation-fastapi==0.64b0 opentelemetry-instrumentation-httpx==0.64b0 @@ -71,16 +64,15 @@ opentelemetry-instrumentation-system-metrics==0.64b0 opentelemetry-processor-baggage==0.65b0 opentelemetry-proto==1.43.0 opentelemetry-sdk==1.43.0 -optuna==4.4.0 pandas==2.3.3 -prometheus-client==0.26.0 -prometheus-fastapi-instrumentator==8.1.0 -prompt-toolkit==3.0.53 +prometheus-client==0.25.0 +prometheus-fastapi-instrumentator==8.0.2 +prompt-toolkit==3.0.52 psutil==7.2.2 psycopg2-binary==2.9.12 pyarrow==24.0.0 +pydantic-settings==2.14.2 pydantic==2.13.4 -pydantic-settings==2.15.0 pyjwt==2.13.0 pyleak==0.2.0 python-multipart==0.0.32 @@ -91,7 +83,7 @@ rich==14.3.4 rouge-score==0.1.2 sacrebleu==2.6.0 sniffio==1.3.1 -sqlalchemy==2.0.52 +sqlalchemy==2.0.51 sqlmodel==0.0.39 streaming-form-data==2.1.0 structlog==26.1.0 @@ -100,8 +92,7 @@ typer==0.25.1 types-aioboto3==15.5.0 typing-extensions==4.16.0 urllib3==2.7.0 -uvicorn==0.52.1 +uvicorn==0.51.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 03593bb417..9340e8d353 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1303,7 +1303,7 @@ jobs: # Test each wheel: install from the artifact and run basic CLI / # import checks. wheel-test: - name: ${{ matrix.package }} wheel build + test (py${{ matrix.python-version }}, ${{ matrix.install-method }}) + name: ${{ matrix.package }} wheel build + test (py${{ matrix.python-version }}) needs: [wheel-build] runs-on: ubuntu-latest timeout-minutes: 15 @@ -1314,13 +1314,6 @@ jobs: matrix: package: [nemo-platform, nemo-platform-plugin] python-version: ["3.12", "3.13"] - # `uv tool install` is the documented front door for the CLI; `venv` - # covers installs into an environment the user owns. The plugin is a - # library with no CLI entry point, so it only gets the venv leg. - install-method: [venv, tool] - exclude: - - package: nemo-platform-plugin - install-method: tool steps: - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 @@ -1344,11 +1337,9 @@ jobs: shell: bash env: PYTHON_VERSION: ${{ matrix.python-version }} - INSTALL_METHOD: ${{ matrix.install-method }} NMP_DATA_DIR: ${{ runner.temp }}/nemo-data NMP_AUTH_ENABLED: "false" _TYPER_FORCE_DISABLE_TERMINAL: "1" - UV_TOOL_BIN_DIR: ${{ runner.temp }}/wheelcheck/tool-bin run: | set -euo pipefail shopt -s nullglob @@ -1360,25 +1351,14 @@ jobs: WHEEL="${wheels[0]}" # Supply-chain: partial-pin the wheel's direct external deps to a committed constraints # file. Regenerate with script/compile-wheel-constraints.sh. - CONSTRAINTS="${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-services.txt" - # --no-config: this step runs inside the checkout, so uv would otherwise apply the - # repo's [tool.uv] override-dependencies and resolve a dependency set no user can get. - if [[ "${INSTALL_METHOD}" == "tool" ]]; then - uv tool install --no-config --python "${PYTHON_VERSION}" \ - --constraints "${CONSTRAINTS}" \ - "${WHEEL}[services]" - BIN_DIR="${UV_TOOL_BIN_DIR}" - else - VENV="${RUNNER_TEMP}/wheelcheck/.venv" - uv venv "${VENV}" --python "${PYTHON_VERSION}" - uv pip install --no-config --python "${VENV}/bin/python" \ - --constraint "${CONSTRAINTS}" \ - "${WHEEL}[services]" - BIN_DIR="${VENV}/bin" - fi + VENV="${RUNNER_TEMP}/wheelcheck/.venv" + uv venv "${VENV}" --python "${PYTHON_VERSION}" + uv pip install --python "${VENV}/bin/python" \ + --constraint "${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-services.txt" \ + "${WHEEL}[services]" cd "${RUNNER_TEMP}/wheelcheck" unset PYTHONPATH VIRTUAL_ENV - export PATH="${BIN_DIR}:${PATH}" + export PATH="${VENV}/bin:${PATH}" bash "${GITHUB_WORKSPACE}/script/test-nemo-cli.sh" - name: Install + test nemo-platform-plugin @@ -1399,7 +1379,7 @@ jobs: # (see the nemo-platform CLI step above). cd "${RUNNER_TEMP}/wheelcheck" uv venv .venv --python "${PYTHON_VERSION}" - uv pip install --no-config --python .venv/bin/python \ + uv pip install --python .venv/bin/python \ --constraint "${GITHUB_WORKSPACE}/.github/wheel-constraints/nemo-platform-plugin.txt" \ "${WHEEL}" unset PYTHONPATH VIRTUAL_ENV diff --git a/packages/nemo_platform/pyproject.toml b/packages/nemo_platform/pyproject.toml index 25ad0fb143..e2acf75f19 100644 --- a/packages/nemo_platform/pyproject.toml +++ b/packages/nemo_platform/pyproject.toml @@ -219,8 +219,8 @@ models-service = [ # Generated from [tool.bundle-package]; do not edit by hand. nemo-agents-example-calculator = [ - "nvidia-nat-core>=1.9.0a20260811,<1.10", - "nvidia-nat-langchain>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-langchain>=1.8.0,<1.9", ] # Generated from [tool.bundle-package]; do not edit by hand. @@ -228,12 +228,8 @@ nemo-agents-plugin = [ "nemo-platform-plugin", "nemo-optimization-plugin", "nemo-agents-example-calculator", - "nvidia-nat-core>=1.9.0a20260811,<1.10", - "nvidia-nat-langchain>=1.9.0a20260811,<1.10", - "nvidia-nat-atif>=1.9.0a20260811,<1.10", - "nvidia-nat-config-optimizer>=1.9.0a20260811,<1.10", - "nvidia-nat-eval>=1.9.0a20260811,<1.10", - "nvidia-nat-opentelemetry>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-langchain>=1.8.0,<1.9", "langchain-aws==1.1.0", "boto3>=1.40.46,<1.40.62", "botocore>=1.40.46,<1.40.62", diff --git a/plugins/nemo-agents/examples/calculator-agent/pyproject.toml b/plugins/nemo-agents/examples/calculator-agent/pyproject.toml index aa8aeac6de..7454e42188 100644 --- a/plugins/nemo-agents/examples/calculator-agent/pyproject.toml +++ b/plugins/nemo-agents/examples/calculator-agent/pyproject.toml @@ -7,10 +7,10 @@ name = "nemo-agents-example-calculator" description = "NAT ``calculator`` function group for the nemo-agents calculator ReAct example." requires-python = ">=3.11" dependencies = [ - "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", # Provides the ``react_agent`` workflow and the ``openai`` LLM the agent uses. # Required so a packaged container image (nemo agents package) can run the agent. - "nvidia-nat-langchain>=1.9.0a20260811,<1.10", + "nvidia-nat-langchain>=1.8.0,<1.9", ] version = "0.0.0" diff --git a/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml b/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml index 9f386d40e0..f93172d2cd 100644 --- a/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml +++ b/plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.0" description = "NAT ``email_phishing_analyzer`` function for the nemo-agents phishing ReAct example." requires-python = ">=3.11" dependencies = [ - "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", ] [project.entry-points."nat.components"] diff --git a/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml b/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml index 00ee0669c7..8a61f7fd19 100644 --- a/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml +++ b/plugins/nemo-agents/examples/email-security-analyst/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.0" description = "NAT capability functions for the nemo-agents email-security-analyst example." requires-python = ">=3.11,<3.15" dependencies = [ - "nvidia-nat-core>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", ] [project.entry-points."nat.components"] diff --git a/plugins/nemo-agents/pyproject.toml b/plugins/nemo-agents/pyproject.toml index 117a4fa863..16e8970bca 100644 --- a/plugins/nemo-agents/pyproject.toml +++ b/plugins/nemo-agents/pyproject.toml @@ -10,19 +10,8 @@ dependencies = [ "nemo-agents-example-calculator", "nemo-agents-example-email-phishing", "nemo-agents-example-email-security", - # NAT 1.9 is the first line whose cryptography cap (>=48,<49) overlaps - # data-designer's, so it is what makes the published nemo-platform[all] - # wheel resolvable at all; 1.8.0 caps cryptography at <47. That line ships - # only pre-releases today, and uv accepts a pre-release solely when a - # requirement it reads names one, so every NAT distribution in the closure - # is listed here rather than only the two this package imports. Collapse - # back to core + langchain on >=1.9.0 once it is released. - "nvidia-nat-core>=1.9.0a20260811,<1.10", - "nvidia-nat-langchain>=1.9.0a20260811,<1.10", - "nvidia-nat-atif>=1.9.0a20260811,<1.10", - "nvidia-nat-config-optimizer>=1.9.0a20260811,<1.10", - "nvidia-nat-eval>=1.9.0a20260811,<1.10", - "nvidia-nat-opentelemetry>=1.9.0a20260811,<1.10", + "nvidia-nat-core>=1.8.0,<1.9", + "nvidia-nat-langchain>=1.8.0,<1.9", # ASTD-164: tight pins avoid pip ResolutionTooDeep via aioboto3/langchain-aws. "langchain-aws==1.1.0", "boto3>=1.40.46,<1.40.62", diff --git a/pyproject.toml b/pyproject.toml index 9c2caa4ac6..84452d8779 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,7 +94,7 @@ dev = [ "nmp-testing", "mlflow-skinny>=3.11.1,<3.12.0", # Optional dep for fine-tuning (shipped in training images); skinny variant to test API surface without bloating uv.lock "nemo-platform-plugin", # Optional runtime dep; included here for type checking - "nvidia-nat-atif>=1.9.0a20260811,<1.10", # ATIF schema models for agentic-use trajectory validation + "nvidia-nat-atif>=1.8.0,<1.9", # ATIF schema models for agentic-use trajectory validation "nemo-platform-sdk-tools", # Include SDK/license tool migration target for testing "nmp-build-tools", # Build hook helpers imported by package-local hatch_build.py files "nmp-dev-mcp", # Include MCP dev tools @@ -341,7 +341,7 @@ override-dependencies = [ "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.28.1", # wandb-core Go CVEs (nspect); unsloth + training images - "cryptography>=50.0.0,<51", # GHSA-g6cj-pr64-35w5; overrides nvidia-nat-core's and data-designer-engine's <49 caps after changelog review + "cryptography>=50.0.0,<51", # GHSA-g6cj-pr64-35w5; overrides nvidia-nat-core's <47 cap after changelog review "click>=8.2.0", # Below CVEs are based on constraints that garak has "litellm>=1.83.10", # CVE-2026-42208 (Critical SQL injection), CVE-2026-40217, and 5 other High CVEs "python-dotenv>=1.2.2", diff --git a/script/compile-wheel-constraints.sh b/script/compile-wheel-constraints.sh index 65e99f865f..56195f386a 100755 --- a/script/compile-wheel-constraints.sh +++ b/script/compile-wheel-constraints.sh @@ -37,10 +37,8 @@ emit_constraints() { meta="$(mktemp -d)" uv venv "${venv}" --python 3.12 --quiet # Resolve+install once with the cap so we snapshot consistent, py3.14-safe versions. - # --no-config: run from the checkout this would otherwise apply the repo's - # [tool.uv] override-dependencies and snapshot versions no user can resolve. printf '%s\n' "${LITELLM_CAP%% *}" >"${meta}/cap.txt" - uv pip install --no-config --python "${venv}/bin/python" --constraint "${meta}/cap.txt" "${spec}" >/dev/null + uv pip install --python "${venv}/bin/python" --constraint "${meta}/cap.txt" "${spec}" >/dev/null # Direct external deps = the wheel's own Requires-Dist, minus self-referential extras. python3 - "$wheel" >"${meta}/names.txt" <<'PY' import sys, zipfile, re diff --git a/third_party/licenses.jsonl b/third_party/licenses.jsonl index ff6df29412..4960d1b3e1 100644 --- a/third_party/licenses.jsonl +++ b/third_party/licenses.jsonl @@ -23,6 +23,7 @@ {"name": "authlib", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "base58", "license": "MIT", "compatible": true} {"name": "beartype", "license": "MIT", "compatible": true} +{"name": "beautifulsoup4", "license": "MIT", "compatible": true} {"name": "boto3", "license": "APACHE-2.0", "compatible": true} {"name": "botocore", "license": "APACHE-2.0", "compatible": true} {"name": "botocore-stubs", "license": "MIT", "compatible": true} @@ -33,6 +34,7 @@ {"name": "cffi", "license": "MIT", "compatible": true} {"name": "chardet", "license": "LGPL-2.1-OR-LATER", "compatible": true} {"name": "charset-normalizer", "license": "MIT", "compatible": true} +{"name": "circuitbreaker", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "claude-agent-sdk", "license": "MIT", "compatible": true} {"name": "click", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "clickhouse-connect", "license": "APACHE-2.0", "compatible": true} @@ -40,6 +42,7 @@ {"name": "colorama", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "colorlog", "license": "MIT", "compatible": true} {"name": "contourpy", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "crc32c", "license": "LGPL-2.1-OR-LATER", "compatible": true} {"name": "cryptography", "license": "APACHE-2.0", "compatible": true} {"name": "cycler", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "cyclopts", "license": "APACHE-2.0", "compatible": true} @@ -63,6 +66,7 @@ {"name": "duckdb", "license": "MIT", "compatible": true} {"name": "durationpy", "license": "MIT", "compatible": true} {"name": "email-validator", "license": "UNLICENSE", "compatible": true} +{"name": "exa-py", "license": "MIT", "compatible": true} {"name": "exceptiongroup", "license": "MIT", "compatible": true} {"name": "expandvars", "license": "MIT", "compatible": true} {"name": "faker", "license": "MIT", "compatible": true} @@ -185,9 +189,14 @@ {"name": "langchain-classic", "license": "MIT", "compatible": true} {"name": "langchain-community", "license": "MIT", "compatible": true} {"name": "langchain-core", "license": "MIT", "compatible": true} +{"name": "langchain-exa", "license": "MIT", "compatible": true} {"name": "langchain-google-genai", "license": "MIT", "compatible": true} +{"name": "langchain-huggingface", "license": "MIT", "compatible": true} +{"name": "langchain-litellm", "license": "MIT", "compatible": true} {"name": "langchain-mcp-adapters", "license": "MIT", "compatible": true} +{"name": "langchain-milvus", "license": "MIT", "compatible": true} {"name": "langchain-nvidia-ai-endpoints", "license": "MIT", "compatible": true} +{"name": "langchain-oci", "license": "MIT", "compatible": true} {"name": "langchain-openai", "license": "MIT", "compatible": true} {"name": "langchain-protocol", "license": "MIT", "compatible": true} {"name": "langchain-text-splitters", "license": "MIT", "compatible": true} @@ -231,17 +240,19 @@ {"name": "numpy", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "nvidia-ml-py", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "nvidia-nat-atif", "license": "APACHE-2.0", "compatible": true} -{"name": "nvidia-nat-config-optimizer", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-core", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-eval", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-langchain", "license": "APACHE-2.0", "compatible": true} {"name": "nvidia-nat-opentelemetry", "license": "APACHE-2.0", "compatible": true} {"name": "oauthlib", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "oci", "license": "UPL-1.0 OR APACHE-2.0", "compatible": true} +{"name": "oci-openai", "license": "UPL-1.0", "compatible": true} {"name": "onnxruntime", "license": "MIT", "compatible": true} {"name": "openai", "license": "APACHE-2.0", "compatible": true} {"name": "openai-codex", "license": "APACHE-2.0", "compatible": true} {"name": "openai-codex-cli-bin", "license": "APACHE-2.0", "compatible": true} {"name": "openapi-pydantic", "license": "MIT", "compatible": true} +{"name": "openevals", "license": "MIT", "compatible": true} {"name": "openinference-instrumentation", "license": "APACHE-2.0", "compatible": true} {"name": "openinference-instrumentation-litellm", "license": "APACHE-2.0", "compatible": true} {"name": "openinference-semantic-conventions", "license": "APACHE-2.0", "compatible": true} @@ -343,6 +354,7 @@ {"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": "sqlite-vec", "license": "MIT", "compatible": true} @@ -393,6 +405,7 @@ {"name": "wcwidth", "license": "MIT", "compatible": true} {"name": "websocket-client", "license": "APACHE-2.0", "compatible": true} {"name": "websockets", "license": "BSD-3-CLAUSE", "compatible": true} +{"name": "wikipedia", "license": "MIT", "compatible": true} {"name": "wrapt", "license": "BSD-3-CLAUSE", "compatible": true} {"name": "xdg-base-dirs", "license": "ISC", "compatible": true} {"name": "xxhash", "license": "BSD-3-CLAUSE", "compatible": true} diff --git a/uv.lock b/uv.lock index 59573cda6a..cd8c7b20df 100644 --- a/uv.lock +++ b/uv.lock @@ -562,6 +562,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, ] +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve", 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/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, +] + [[package]] name = "bitsandbytes" version = "0.50.0" @@ -780,6 +793,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, ] +[[package]] +name = "circuitbreaker" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/ac/de7a92c4ed39cba31fe5ad9203b76a25ca67c530797f6bb420fff5f65ccb/circuitbreaker-2.1.3.tar.gz", hash = "sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084", size = 10787, upload-time = "2025-03-31T08:12:08.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/34/15f08edd4628f65217de1fc3c1a27c82e46fe357d60c217fc9881e12ebcc/circuitbreaker-2.1.3-py3-none-any.whl", hash = "sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1", size = 7737, upload-time = "2025-03-31T08:12:07.802Z" }, +] + [[package]] name = "claude-agent-sdk" version = "0.2.120" @@ -955,6 +977,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/e7/7069b3d6c018917f49ba2e1c5fb910e498c7fefa3a1b78cb1b79e61ff45d/coverage-7.15.3-py3-none-any.whl", hash = "sha256:da78fa6fc7dafe4212839173133ee85afcf42c5cd5f3e47fa7c1c210453b445e", size = 214297, upload-time = "2026-08-02T18:50:14.709Z" }, ] +[[package]] +name = "crc32c" +version = "2.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/66/7e97aa77af7cf6afbff26e3651b564fe41932599bc2d3dce0b2f73d4829a/crc32c-2.8.tar.gz", hash = "sha256:578728964e59c47c356aeeedee6220e021e124b9d3e8631d95d9a5e5f06e261c", size = 48179, upload-time = "2025-10-17T06:20:13.61Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/36/fd18ef23c42926b79c7003e16cb0f79043b5b179c633521343d3b499e996/crc32c-2.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:572ffb1b78cce3d88e8d4143e154d31044a44be42cb3f6fbbf77f1e7a941c5ab", size = 66379, upload-time = "2025-10-17T06:19:10.115Z" }, + { url = "https://files.pythonhosted.org/packages/62/e6/6f2af0ec64a668a46c861e5bc778ea3ee42171fedfc5440f791f470fd783/crc32c-2.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:106fbd79013e06fa92bc3b51031694fcc1249811ed4364ef1554ee3dd2c7f5a2", size = 61528, upload-time = "2025-10-17T06:19:11.768Z" }, + { url = "https://files.pythonhosted.org/packages/17/8b/4a04bd80a024f1a23978f19ae99407783e06549e361ab56e9c08bba3c1d3/crc32c-2.8-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6dde035f91ffbfe23163e68605ee5a4bb8ceebd71ed54bb1fb1d0526cdd125a2", size = 80028, upload-time = "2025-10-17T06:19:12.554Z" }, + { url = "https://files.pythonhosted.org/packages/21/8f/01c7afdc76ac2007d0e6a98e7300b4470b170480f8188475b597d1f4b4c6/crc32c-2.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e41ebe7c2f0fdcd9f3a3fd206989a36b460b4d3f24816d53e5be6c7dba72c5e1", size = 81531, upload-time = "2025-10-17T06:19:13.406Z" }, + { url = "https://files.pythonhosted.org/packages/32/2b/8f78c5a8cc66486be5f51b6f038fc347c3ba748d3ea68be17a014283c331/crc32c-2.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ecf66cf90266d9c15cea597d5cc86c01917cd1a238dc3c51420c7886fa750d7e", size = 80608, upload-time = "2025-10-17T06:19:14.223Z" }, + { url = "https://files.pythonhosted.org/packages/db/86/fad1a94cdeeeb6b6e2323c87f970186e74bfd6fbfbc247bf5c88ad0873d5/crc32c-2.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:59eee5f3a69ad0793d5fa9cdc9b9d743b0cd50edf7fccc0a3988a821fef0208c", size = 79886, upload-time = "2025-10-17T06:19:15.345Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d8/3ae227890b3be40955a7144106ef4dd97d6123a82c2a5310cdab58ca49d8/crc32c-2.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:36f1e03ee9e9c6938e67d3bcb60e36f260170aa5f37da1185e04ef37b56af395", size = 66380, upload-time = "2025-10-17T06:19:18.009Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a1/48145ae2545ebc0169d3283ebe882da580ea4606bfb67cf4ca922ac3cfc3/crc32c-2.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e08628bc72d5b6bc8e0730e8f142194b610e780a98c58cb6698e665cb885a5b", size = 61530, upload-time = "2025-10-17T06:19:19.974Z" }, + { url = "https://files.pythonhosted.org/packages/06/4b/cf05ed9d934cc30e5ae22f97c8272face420a476090e736615d9a6b53de0/crc32c-2.8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:086f64793c5ec856d1ab31a026d52ad2b895ac83d7a38fce557d74eb857f0a82", size = 80001, upload-time = "2025-10-17T06:19:20.784Z" }, + { url = "https://files.pythonhosted.org/packages/15/ab/4b04801739faf36345f6ba1920be5b1c70282fec52f8280afd3613fb13e2/crc32c-2.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcf72ee7e0135b3d941c34bb2c26c3fc6bc207106b49fd89aaafaeae223ae209", size = 81543, upload-time = "2025-10-17T06:19:21.557Z" }, + { url = "https://files.pythonhosted.org/packages/a9/1b/6e38dde5bfd2ea69b7f2ab6ec229fcd972a53d39e2db4efe75c0ac0382ce/crc32c-2.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a717dd9c3fd777d9bc6603717eae172887d402c4ab589d124ebd0184a83f89e", size = 80644, upload-time = "2025-10-17T06:19:22.325Z" }, + { url = "https://files.pythonhosted.org/packages/ce/45/012176ffee90059ae8ec7131019c71724ea472aa63e72c0c8edbd1fad1d7/crc32c-2.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0450bb845b3c3c7b9bdc0b4e95620ec9a40824abdc8c86d6285c919a90743c1a", size = 79919, upload-time = "2025-10-17T06:19:23.101Z" }, + { url = "https://files.pythonhosted.org/packages/db/b9/8e5d7054fe8e7eecab10fd0c8e7ffb01439417bdb6de1d66a81c38fc4a20/crc32c-2.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b977a32a3708d6f51703c8557008f190aaa434d7347431efb0e86fcbe78c2a50", size = 66203, upload-time = "2025-10-17T06:19:25.872Z" }, + { url = "https://files.pythonhosted.org/packages/a1/8a/0660c44a2dd2cb6ccbb529eb363b9280f5c766f1017bc8355ed8d695bd94/crc32c-2.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4379f73f9cdad31958a673d11a332ec725ca71572401ca865867229f5f15e853", size = 61442, upload-time = "2025-10-17T06:19:27.74Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5a/6108d2dfc0fe33522ce83ba07aed4b22014911b387afa228808a278e27cd/crc32c-2.8-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2e68264555fab19bab08331550dab58573e351a63ed79c869d455edd3b0aa417", size = 79109, upload-time = "2025-10-17T06:19:28.535Z" }, + { url = "https://files.pythonhosted.org/packages/84/1e/c054f9e390090c197abf3d2936f4f9effaf0c6ee14569ae03d6ddf86958a/crc32c-2.8-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b48f2486727b8d0e7ccbae4a34cb0300498433d2a9d6b49cb13cb57c2e3f19cb", size = 80987, upload-time = "2025-10-17T06:19:29.305Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ad/1650e5c3341e4a485f800ea83116d72965030c5d48ccc168fcc685756e4d/crc32c-2.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ecf123348934a086df8c8fde7f9f2d716d523ca0707c5a1367b8bb00d8134823", size = 79994, upload-time = "2025-10-17T06:19:30.109Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3b/f2ed924b177729cbb2ab30ca2902abff653c31d48c95e7b66717a9ca9fcc/crc32c-2.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e636ac60f76de538f7a2c0d0f3abf43104ee83a8f5e516f6345dc283ed1a4df7", size = 79046, upload-time = "2025-10-17T06:19:30.894Z" }, +] + [[package]] name = "cryptography" version = "50.0.0" @@ -1537,6 +1585,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294, upload-time = "2022-02-02T21:30:26.024Z" }, ] +[[package]] +name = "exa-py" +version = "1.16.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpcore", 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 = "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 = "openai", 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", 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 = "python-dotenv", 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 = "requests", 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/4e/b0/d035d8e56ca7d9192daf4a3bf4d4fc4a64d427d29df700868dd91ffc0a69/exa_py-1.16.2.tar.gz", hash = "sha256:1808a82ef9f25271ffd238d7b9e2ed279a96de89f140de401887866fc8b54ced", size = 41380, upload-time = "2026-04-24T19:08:07.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/27/934d9750e4f3c888a0cc8e702c2424069abb7d86b67602229c44083c3d25/exa_py-1.16.2-py3-none-any.whl", hash = "sha256:7a574e978a50dd458b07e8bbb8b1da9543b8f8e57191b7bd1086546414686689", size = 56642, upload-time = "2026-04-24T19:08:09.052Z" }, +] + [[package]] name = "exceptiongroup" version = "1.3.1" @@ -3036,6 +3102,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/e6/c7c39efe0bc7e1b7c3d8f54f85846e04c901913c3d3e99068b218558c6f1/langchain_core-1.5.3-py3-none-any.whl", hash = "sha256:48b56fa580277209594dd7baf837f5b9a2a3651613f34ff9fb1728b429df015f", size = 561687, upload-time = "2026-07-30T14:55:54.419Z" }, ] +[[package]] +name = "langchain-exa" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exa-py", 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 = "langchain-core", 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/94/69/f956c20fb8a73185063f8c54b559fc65562939a25bb58a16ad97ec8640d3/langchain_exa-1.1.0.tar.gz", hash = "sha256:25a782c310b55475d4b40d50c2ed15a9d7b1e6c413fb958ebb570bba372bee7e", size = 107388, upload-time = "2026-03-26T17:00:10.059Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/d0/cfce61b53b79974a4883ff7675fe516192ae715e0f925e063e5869b6a929/langchain_exa-1.1.0-py3-none-any.whl", hash = "sha256:7eb4e1b6004f74fe278467470a4e76ba3b74a17df13f64e64745f0780f63d845", size = 7972, upload-time = "2026-03-26T17:00:09.239Z" }, +] + [[package]] name = "langchain-google-genai" version = "4.3.2" @@ -3051,6 +3130,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/cb/4a2eb187b108a240d57cf8dcf67e818ca75365f769444bf5716e2823cd98/langchain_google_genai-4.3.2-py3-none-any.whl", hash = "sha256:f3b1c09b264612fd1735a9590987bfa0cccca0bc0111691543decb5a03b8667d", size = 72770, upload-time = "2026-07-27T16:27:38.052Z" }, ] +[[package]] +name = "langchain-huggingface" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub", 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 = "langchain-core", 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 = "tokenizers", 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/2c/e8/4068ad02179253f55958e59e442e5b6e8cb95ffc5e805cc4db0b1ef61d4e/langchain_huggingface-1.2.2.tar.gz", hash = "sha256:1dd91ec415190d2704e93ec149618e3145075863ba37e74afc9080d685dc2743", size = 255513, upload-time = "2026-04-16T19:57:41.046Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/ed/648b87f9b67153ade616f360bf4145b76ed428b4adb89525938f611e9828/langchain_huggingface-1.2.2-py3-none-any.whl", hash = "sha256:f94944b0c0d5afc687568d426c87ed5236907464c41e72108ed76eee1a690f6d", size = 31926, upload-time = "2026-04-16T19:57:40.079Z" }, +] + +[[package]] +name = "langchain-litellm" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", 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 = "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 = "langchain-core", 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 = "litellm", 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/72/24/473283e69791fb35e11126c11e7347ffbf110c2dfcebebe90bd974bc7348/langchain_litellm-0.7.0.tar.gz", hash = "sha256:d3b8d0e6f65132f048fbe9d706e5334d45830e3c49aa033d32c37c6683ad2ceb", size = 345959, upload-time = "2026-06-15T10:00:36.437Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/d7/73ffd47f1e4bfe4649f25a58229fca4e0162c2f946c9f8f9ae5eb44e5c3c/langchain_litellm-0.7.0-py3-none-any.whl", hash = "sha256:5f67e456bc4e14e1247aa5a30e9da08d61d390aee66ff97e0113bfcb4334ff42", size = 25465, upload-time = "2026-06-15T10:00:37.428Z" }, +] + [[package]] name = "langchain-mcp-adapters" version = "0.2.2" @@ -3065,6 +3173,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/2f/15d5e6c1765d8404a9cce38d8c81d7b33fb3392f9db5b992c000dddbd2a3/langchain_mcp_adapters-0.2.2-py3-none-any.whl", hash = "sha256:d08e64954e86281002653071b7430e0377c9a577cb4ac3143abfeb3e24ef8797", size = 23288, upload-time = "2026-03-16T17:13:29.073Z" }, ] +[[package]] +name = "langchain-milvus" +version = "0.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core", 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 = "pymilvus", 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/09/21/ecce785a24e61ba2c0f6249a5a68b969ccc053342f933aeab31a3f885f5e/langchain_milvus-0.3.3.tar.gz", hash = "sha256:406c2d88da133741f5cc3e2fea4b36386182b35500205c70d003382ded210e41", size = 35577, upload-time = "2026-01-05T10:01:16.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/5d/6a0dac51ca2343332d5de9c79686d54f905d225b173a8e1b03ae6d35982a/langchain_milvus-0.3.3-py3-none-any.whl", hash = "sha256:6e12f15453372dd48836978faa4a149de79c721df3322229ad732a5e628e8e97", size = 38962, upload-time = "2026-01-05T10:01:15.186Z" }, +] + [[package]] name = "langchain-nvidia-ai-endpoints" version = "1.4.3" @@ -3079,6 +3200,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/de/1f0a9a7b464a212c5f8e761f445f7c539c38956fe4e178e19a4a9a27c745/langchain_nvidia_ai_endpoints-1.4.3-py3-none-any.whl", hash = "sha256:f71966a079f1800ae292b4add953509481d149dc3bc4a3f60b9c09742642d043", size = 64484, upload-time = "2026-07-02T00:38:04.983Z" }, ] +[[package]] +name = "langchain-oci" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", 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 = "langchain", 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 = "langchain-core", 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 = "langchain-openai", 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 = "langgraph", 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 = "numpy", 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 = "oci", 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 = "oci-openai", 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 = "openai", 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", 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')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/48/fe638fdc55fd78b40a5017a0da8f52844f100003f86a7656406fab1f5f3d/langchain_oci-0.3.1.tar.gz", hash = "sha256:9a6bec356dab1b082b3c3d826fe0c9f28fb6b755831621493c1262e423d564d0", size = 113641, upload-time = "2026-07-17T19:35:26.391Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/6c/ecc94beebd38e5f9380ea8a4ce83edd5ef2d073e4b257009cd1c5b2b6353/langchain_oci-0.3.1-py3-none-any.whl", hash = "sha256:27a5eddfded365ac39e76008833c7e25a7da61424f969d6c8a1b02ad924ce2bc", size = 141912, upload-time = "2026-07-17T19:35:25.017Z" }, +] + [[package]] name = "langchain-openai" version = "1.4.1" @@ -3912,8 +4054,8 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, ] [[package]] @@ -3925,7 +4067,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] [[package]] name = "nemo-agents-example-email-security" @@ -3936,7 +4078,7 @@ dependencies = [ ] [package.metadata] -requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }] +requires-dist = [{ name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }] [[package]] name = "nemo-agents-plugin" @@ -3957,12 +4099,8 @@ dependencies = [ { name = "nemo-optimization-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", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "pyyaml", 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 = "rich", 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')" }, ] @@ -4000,12 +4138,8 @@ requires-dist = [ { name = "nemo-optimization-plugin", editable = "plugins/nemo-optimization" }, { name = "nemo-platform", editable = "packages/nemo_platform" }, { name = "nemo-platform-plugin", editable = "packages/nemo_platform_plugin" }, - { name = "nvidia-nat-atif", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-config-optimizer", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-eval", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-opentelemetry", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", specifier = ">=1.8.0,<1.9" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=8.0" }, { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.23" }, { name = "python-on-whales", marker = "extra == 'container'", specifier = ">=0.60" }, @@ -4804,12 +4938,8 @@ all = [ { 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')" }, { name = "nmp-guardrails", 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "openai", 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 = "opentelemetry-distro", 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 = "opentelemetry-exporter-otlp", 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')" }, @@ -5024,12 +5154,8 @@ nemo-agents-plugin = [ { name = "nemo-fabric-adapters-hermes", 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-optimization-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-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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "pyyaml", 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 = "rich", 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')" }, ] @@ -5219,12 +5345,8 @@ plugins = [ { name = "nemo-safe-synthesizer", 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 = "nemoguardrails", extra = ["tracing"], 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "optuna", 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 = "pandas", 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", 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')" }, @@ -5293,12 +5415,8 @@ services = [ { 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')" }, { name = "nmp-guardrails", 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 = "numpy", 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 = "nvidia-nat-atif", 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 = "nvidia-nat-config-optimizer", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-langchain", 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 = "nvidia-nat-opentelemetry", 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 = "openai", 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 = "opentelemetry-distro", 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 = "opentelemetry-exporter-otlp", 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')" }, @@ -5668,32 +5786,16 @@ requires-dist = [ { name = "numpy", marker = "extra == 'services'", specifier = ">=1.26.0" }, { name = "nvidia-ml-py", marker = "extra == 'nemo-platform-sdk'", specifier = ">=13.0.0" }, { name = "nvidia-ml-py", marker = "extra == 'nmp-common'", specifier = ">=13.0.0" }, - { name = "nvidia-nat-atif", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-atif", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-atif", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-atif", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-config-optimizer", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-config-optimizer", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-config-optimizer", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-config-optimizer", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-eval", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-eval", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-eval", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-eval", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-opentelemetry", marker = "extra == 'all'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-opentelemetry", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-opentelemetry", marker = "extra == 'plugins'", specifier = ">=1.9.0a20260811,<1.10" }, - { name = "nvidia-nat-opentelemetry", marker = "extra == 'services'", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-core", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-core", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", marker = "extra == 'all'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-example-calculator'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", marker = "extra == 'nemo-agents-plugin'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", marker = "extra == 'plugins'", specifier = ">=1.8.0,<1.9" }, + { name = "nvidia-nat-langchain", marker = "extra == 'services'", specifier = ">=1.8.0,<1.9" }, { name = "openai", marker = "extra == 'all'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'guardrails-service'", specifier = ">=1.61.0" }, { name = "openai", marker = "extra == 'nemo-evaluator-sdk'", specifier = ">=1.61.0" }, @@ -6844,7 +6946,7 @@ dev = [ { name = "nmp-secrets", editable = "services/core/secrets" }, { name = "nmp-testing", editable = "packages/nmp_testing" }, { name = "nox" }, - { name = "nvidia-nat-atif", specifier = ">=1.9.0a20260811,<1.10" }, + { name = "nvidia-nat-atif", specifier = ">=1.8.0,<1.9" }, { name = "papermill", specifier = ">=2.6.0" }, { name = "pre-commit", specifier = ">=3.8.0" }, { name = "pydantic-settings", specifier = ">=2.6.1" }, @@ -8244,31 +8346,18 @@ wheels = [ [[package]] name = "nvidia-nat-atif" -version = "1.9.0a20260811" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } 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')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9e/6d/3888e0d9e8c2b29d08c4f1662b6845cfa2bebf0dfacef0ded09c80f0f726/nvidia_nat_atif-1.9.0a20260811.tar.gz", hash = "sha256:0d88971a99e0f24b04949392e4df94c3971abee7e7ac95d9d7e15b83a5ae9661", size = 41832, upload-time = "2026-08-11T10:08:05.953Z" } - -[[package]] -name = "nvidia-nat-config-optimizer" -version = "1.9.0a20260811" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "optuna", 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 = "pandas", 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", 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 = "pyyaml", 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')" }, +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/ee/a22d1b5d5d6f3d625f451f5185b7e32a6464058f2c7899f6d98c68f46aef/nvidia_nat_atif-1.8.0-py3-none-any.whl", hash = "sha256:38c97d6e506e8cc151a997bfd6cafa08b969e181b50b9302f28d2229a3b37829", size = 105633, upload-time = "2026-06-17T00:25:16.624Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/96/22/e21d4be22a645f7c3f2ddc7fd42dd548b3e29e11c41081556817a618d20a/nvidia_nat_config_optimizer-1.9.0a20260811.tar.gz", hash = "sha256:38306fe2a096128c2af405c21c3a5fa39e096ba79ab73a4d7635b833fa676567", size = 1452, upload-time = "2026-08-11T10:07:15.481Z" } [[package]] name = "nvidia-nat-core" -version = "1.9.0a20260811" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles", 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')" }, @@ -8303,37 +8392,54 @@ dependencies = [ { name = "urllib3", 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 = "uvicorn", extra = ["standard"], 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/dd/97/44b5e486474d7dd7f5036fec0a51c2cb2e483be406a2499687ef6b03d392/nvidia_nat_core-1.9.0a20260811.tar.gz", hash = "sha256:3c2ee4cd30591929ade7ce37ffc9c9da820e0187f2918c0b364d7d1f93c82e7d", size = 3003, upload-time = "2026-08-11T10:07:35.864Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/17/46f8bb24ba9789064ab6a90a905f31218bca802346adace079256db82c72/nvidia_nat_core-1.8.0-py3-none-any.whl", hash = "sha256:645bcc995f73598016b750f7849decb24bea857549f96f5fcbbd8ff37f0c3fc5", size = 779726, upload-time = "2026-06-17T00:21:24.556Z" }, +] [[package]] name = "nvidia-nat-eval" -version = "1.9.0a20260811" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-atif", 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/96/fa/b5341795a70df753e4efdfca4e3f597ee304626ee777f6e66b49aab5b4cf/nvidia_nat_eval-1.9.0a20260811.tar.gz", hash = "sha256:89f54970fa9bbac3a609e89a4d85c9dc7e401b50f0a6f447f3656935bd34906f", size = 1401, upload-time = "2026-08-11T10:07:40.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/25/0fd8109c653d967d82f8ef6fc729c41504e3b4ec51dcfd39c952275d4e67/nvidia_nat_eval-1.8.0-py3-none-any.whl", hash = "sha256:4baebf66289040708c22bfd57f6edb37728409795a260bd0f07b894c9ec8b110", size = 69649, upload-time = "2026-06-17T00:23:20.109Z" }, +] [[package]] name = "nvidia-nat-langchain" -version = "1.9.0a20260811" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain", 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 = "langchain-aws", 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 = "langchain-classic", 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 = "langchain-community", 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 = "langchain-core", 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 = "langchain-exa", 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 = "langchain-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')" }, + { name = "langchain-litellm", 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 = "langchain-milvus", 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 = "langchain-nvidia-ai-endpoints", 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 = "langchain-oci", 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 = "langchain-openai", 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 = "langgraph", 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 = "langsmith", 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 = "nvidia-nat-core", 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 = "nvidia-nat-eval", 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 = "nvidia-nat-opentelemetry", 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 = "openevals", 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 = "pyopenssl", 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 = "wikipedia", 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')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/49/eee7d8f68568e4c994a67ee0def4070e8fdeb0d603a7ef580050b3ee3d34/nvidia_nat_langchain-1.8.0-py3-none-any.whl", hash = "sha256:8120ad2b972ce2d90fae1e7f95b3daf6b463310e0105fc330896bfb069a5d403", size = 197395, upload-time = "2026-06-17T00:27:13.69Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/58/8797ba298ce3eed248fcedb33c2195da67fd88c6809caa6a431a2fd1f772/nvidia_nat_langchain-1.9.0a20260811.tar.gz", hash = "sha256:d55c2d81161c1ce57845b9eceac94c46df977e832e5d9b2000a7c71773de1659", size = 42183, upload-time = "2026-08-11T10:07:51.214Z" } [[package]] name = "nvidia-nat-opentelemetry" -version = "1.9.0a20260811" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nat-core", 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')" }, @@ -8342,7 +8448,9 @@ dependencies = [ { name = "opentelemetry-exporter-otlp", 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 = "opentelemetry-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')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/ac/87b9f93da62d85984576bd872b6610db24a05babc6adc73fc562abd68905/nvidia_nat_opentelemetry-1.9.0a20260811.tar.gz", hash = "sha256:6b600a7d5bab52b21d77f771f400602c7dcae470f94821c6398907bc02f0c8f0", size = 41891, upload-time = "2026-08-11T10:07:34.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/df/33cba1fb316f720b075dac2330b588b1a62d9d991cd6e1d5bc8f795b3bba/nvidia_nat_opentelemetry-1.8.0-py3-none-any.whl", hash = "sha256:2ef2de28a1d07029126ae1c13ff39b9dd61a6985e43199e6fe80968b465b1eec", size = 68449, upload-time = "2026-06-17T00:39:23.758Z" }, +] [[package]] name = "nvidia-nccl-cu13" @@ -8389,6 +8497,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] +[[package]] +name = "oci" +version = "2.184.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi", 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 = "circuitbreaker", 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 = "crc32c", 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 = "cryptography", 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 = "pyjwt", 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 = "pyopenssl", 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 = "python-dateutil", 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 = "pytz", 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 = "urllib3", 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/a7/97/d204a71489b8c685818f596f2082c78b52fe70a934dc52d9dbd81345da47/oci-2.184.0.tar.gz", hash = "sha256:19742d0fdd27947daafd2cfea4db31ad585fde379094f41ddb7280109939210e", size = 17818751, upload-time = "2026-08-04T04:39:08.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/3a/08cf20553974b702c53ebaa37f12e81d6293eb1001032939138279e3116a/oci-2.184.0-py3-none-any.whl", hash = "sha256:1737deb49604658308abef1b91e9039111637f75f4fd112cfd92d8e73871476c", size = 36213396, upload-time = "2026-08-04T04:38:56.099Z" }, +] + +[[package]] +name = "oci-openai" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +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 = "oci", 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 = "openai", 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 = "requests", 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/f7/93/c395a92c8019dec50bd5760a9fcfd718cedb416824f8ebba0b26568ab6f4/oci_openai-1.1.0.tar.gz", hash = "sha256:1819ef7d17c1fdbe05c5c0653301fdca0d2fa99f6f8b1b7bd7667da9704d62a1", size = 199961, upload-time = "2026-02-03T05:15:12.486Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/a5/48aa98c4b68f3cc55bf74ef7a8d691d230ff09d5fab521e17ffd8b155ac4/oci_openai-1.1.0-py3-none-any.whl", hash = "sha256:a028ee3e1a1b1ad4e0495b10ef70b81b5e6cd50e7f13cf485a112762641a9160", size = 11449, upload-time = "2026-02-03T05:15:10.957Z" }, +] + [[package]] name = "onnxruntime" version = "1.28.0" @@ -8501,6 +8644,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9c/75/76f6ade78f6102c61034f828e2a22616708df2c9504bc8d6af9dd8f73dc5/opencv_python-5.0.0.93-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:198a75138241810206a17c829dbcc40a7cb1841cda538ca86cbbfc6c7d95f898", size = 48322443, upload-time = "2026-07-02T05:50:25.466Z" }, ] +[[package]] +name = "openevals" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain", 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 = "langchain-openai", 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 = "langsmith", 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 = "rich", 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/b0/b1/028a05846136805b29b7a3afb58a940c2d213fa2c3d0a7d7003c7fbaa115/openevals-0.2.0.tar.gz", hash = "sha256:7e95fa64625be53eaa8c657d7f69b842a52bda10bdf3bb91781c7d09a385b069", size = 140711, upload-time = "2026-04-07T19:45:22.749Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/8b/00f402b7f3475e235c339a9bc82d2eaf46cc08b53ecd85d4a117850170d3/openevals-0.2.0-py3-none-any.whl", hash = "sha256:2bce5964be9d162e3d38c2dfd026739156e1ac521536ade6b8e2f0a89b632f2c", size = 106958, upload-time = "2026-04-07T19:45:21.575Z" }, +] + [[package]] name = "openinference-instrumentation" version = "0.1.56" @@ -10488,6 +10646,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/56/f9/c037c35f6d0b6bc3bc7bfb314f1d6f1f9a341328ef47cd63fc4f850a7b27/sounddevice-0.5.5-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:05eb9fd6c54c38d67741441c19164c0dae8ce80453af2d8c4ad2e7823d15b722", size = 108557, upload-time = "2026-01-23T18:36:37.41Z" }, ] +[[package]] +name = "soupsieve" +version = "2.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/38/e12680bbe6b4f8f3d17adcaf38d26850aa756c85cf4a80e79fc12a018fe8/soupsieve-2.9.1.tar.gz", hash = "sha256:c33e6605bbc71dd628b00c632d58ae607c22bade247e52553928f83bbb75b4ba", size = 122261, upload-time = "2026-07-21T16:57:17.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/2c/437fe806897c2d6cfdc3ee43a18da8bf8e568530a4ae9bac781541ca9896/soupsieve-2.9.1-py3-none-any.whl", hash = "sha256:4f4477399246b7a0c720a88ca2454b11cd6bb9ae4c9d170140786e916776c14c", size = 37404, upload-time = "2026-07-21T16:57:16.421Z" }, +] + [[package]] name = "sphinx" version = "9.1.0" @@ -11700,6 +11867,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, ] +[[package]] +name = "wikipedia" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4", 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 = "requests", 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/67/35/25e68fbc99e672127cc6fbb14b8ec1ba3dfef035bf1e4c90f78f24a80b7d/wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2", size = 27748, upload-time = "2014-11-15T15:59:49.808Z" } + [[package]] name = "wrapt" version = "1.17.3" From 76d1643aa2b92b7991e99d4add01facc9134ac6a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 20:35:19 +0000 Subject: [PATCH 14/15] docs: tighten the install sections and ground the troubleshooting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Render the two install paths as tab sets, per the Fern guideline, and cut the prose to what distinguishes them: the tool install is global and needs no activation, the virtual environment is for importing the SDK. Stop claiming uv puts nemo on PATH unconditionally — it lands in the uv tool executable directory, so command-not-found now covers both install methods and points at uv tool update-shell. The interpreter entry cites uv's documented behaviour of ignoring requires-python for tools. Also anchor the version assertion so a trailing-garbage suffix cannot pass while the stamped .post/.dev/local forms still do. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- README.md | 2 +- docs/cli/index.mdx | 22 ++++++++++++++-------- docs/cli/troubleshooting.mdx | 16 ++++++++++------ docs/get-started/setup.mdx | 24 +++++++++++++++--------- packages/nemo_platform/README.md | 14 ++++++++------ script/test-nemo-cli.sh | 9 ++++++--- 6 files changed, 54 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index f0231e364d..41a0286104 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ uv tool install "nemo-platform[all]" nemo setup ``` -`uv tool install` puts `nemo` on your PATH in its own isolated environment — there is no virtual environment to create or activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. +`uv tool install` gives you a global `nemo` command in its own isolated environment, with nothing to activate. The `all` extra adds the platform services, so `nemo services run` works; without it you get the SDK and CLI only. To import the SDK from your own code, `pip install "nemo-platform[all]"` into a virtual environment instead. Source checkout for development: diff --git a/docs/cli/index.mdx b/docs/cli/index.mdx index c9abf36b38..571077a4fc 100644 --- a/docs/cli/index.mdx +++ b/docs/cli/index.mdx @@ -28,27 +28,33 @@ If you previously installed the `nemo-microservices` package, uninstall it first pip uninstall nemo-microservices ``` -### Install as a Tool +### Install -Install the PyPI `nemo-platform` wrapper package with [uv](https://docs.astral.sh/uv/). uv puts the `nemo` command on your PATH in its own isolated environment, so there is no virtual environment to create or activate. If you are working from a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. +Install the PyPI `nemo-platform` wrapper package. From a source checkout, run `make bootstrap` from the repository root instead; the generated SDK package under `sdk/python/nemo-platform/pyproject.toml` does not define the wrapper extras. + + + + + +One command, `nemo` available everywhere, nothing to activate. ```bash uv tool install "nemo-platform[all]" ``` -### Install in a Virtual Environment + -To import the SDK from your own project, or when tool installs are unavailable, install into a Python 3.12-3.13 virtual environment: + + +Use when you also import the SDK from your own code. `nemo` works only while the environment is active. ```bash pip install "nemo-platform[all]" ``` - - -When installed in a virtual environment, the `nemo` command is only available when the environment is activated. + - + ### Verify Installation diff --git a/docs/cli/troubleshooting.mdx b/docs/cli/troubleshooting.mdx index 42049beb23..8e2a2c90b0 100644 --- a/docs/cli/troubleshooting.mdx +++ b/docs/cli/troubleshooting.mdx @@ -14,7 +14,7 @@ This page covers common issues and how to resolve them. **Cause:** -If you installed `nemo-platform` with `pip` or `uv pip`, it was installed in a virtual environment. The `nemo` command is only available when that environment is activated. +With `pip` or `uv pip`, the command lives in a virtual environment and works only while that environment is active. With `uv tool install`, it lives in the uv tool executable directory, which uv adds to your `PATH` only when your shell configuration includes it. **Solution:** @@ -23,21 +23,25 @@ Activate the virtual environment where you installed the package: source /path/to/venv/bin/activate ``` +After a tool install, add the uv tool directory to your `PATH`, then restart your shell: +```bash +uv tool update-shell +``` + ## Installation Issues -### Install Fails Compiling Dependencies from Source +### Install Fails Building a Dependency **Symptoms:** -- `uv tool install "nemo-platform[all]"` fails while building a dependency, often with a missing C header such as `omp.h` -- `nemo --version` works but no dependency wheels are found for your interpreter +- `uv tool install "nemo-platform[all]"` fails while building a dependency, often on a missing C header such as `omp.h` **Cause:** -NeMo Platform supports Python 3.12 and 3.13. uv selects the interpreter it prefers on your machine, and it does not enforce the upper bound of a package's supported Python range, so an install can start on Python 3.14 and then fall back to building dependencies that publish no 3.14 wheels. +NeMo Platform supports Python 3.12 and 3.13. A tool environment is built with the interpreter uv discovers, and [uv ignores the `requires-python` metadata](https://docs.astral.sh/uv/concepts/tools/#python-versions) when making that choice, so an install can land on Python 3.14 and then try to build dependencies that publish no 3.14 wheels. **Solution:** -Name a supported interpreter. uv downloads it when your machine does not have one: +Name a supported interpreter. uv downloads one when your machine has none: ```bash uv tool install --python 3.13 "nemo-platform[all]" diff --git a/docs/get-started/setup.mdx b/docs/get-started/setup.mdx index 921d08c2f3..c379e6a942 100644 --- a/docs/get-started/setup.mdx +++ b/docs/get-started/setup.mdx @@ -21,21 +21,23 @@ Choose the install path that matches what you want to do. ### Install from PyPI -Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest local install. The `all` extra includes the SDK, CLI, platform services, and default first-party plugins: +Use the [PyPI package](https://pypi.org/project/nemo-platform/) for the quickest local install. The `all` extra includes the SDK, CLI, platform services, and default first-party plugins; drop it for the SDK and CLI alone. -```bash -uv tool install "nemo-platform[all]" -``` + -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. + -For SDK and CLI usage only, install the base package. Local services are unavailable until you add the `all` extra: +One command, `nemo` available everywhere, nothing to activate. ```bash -uv tool install nemo-platform +uv tool install "nemo-platform[all]" ``` -To import the SDK from your own project, or when tool installs are unavailable, install into a virtual environment instead: + + + + +Use when you also import the SDK from your own code. `nemo` works only while the environment is active. ```bash python -m venv .venv @@ -43,7 +45,11 @@ source .venv/bin/activate pip install "nemo-platform[all]" ``` -After installing `nemo-platform[all]` from PyPI, continue with `nemo setup`. + + + + +Continue with `nemo setup`. ### Install from source diff --git a/packages/nemo_platform/README.md b/packages/nemo_platform/README.md index 7ccd0f98d6..ee6840acff 100644 --- a/packages/nemo_platform/README.md +++ b/packages/nemo_platform/README.md @@ -21,17 +21,19 @@ NeMo Platform brings NVIDIA NeMo libraries together under one CLI, Python SDK, a **Prerequisites:** Python 3.12–3.13 and an API key for an inference provider (NVIDIA Build, OpenAI, Anthropic, Google Gemini, or a local Ollama instance). -The `nemo-platform` distribution is a convenience wrapper that bundles the SDK, shared runtime packages, default first-party plugins, and platform services into a single wheel. Install just the SDK and CLI, or install everything needed to run the platform locally: +The `nemo-platform` distribution is a convenience wrapper that bundles the SDK, shared runtime packages, default first-party plugins, and platform services into a single wheel. The `all` extra adds the platform services; drop it for the SDK and CLI alone. + +Recommended — one command, `nemo` available everywhere, nothing to activate: ```bash -# SDK + CLI + all platform services and default plugins (recommended) uv tool install "nemo-platform[all]" - -# SDK + CLI only -uv tool install nemo-platform ``` -[uv](https://docs.astral.sh/uv/) installs the tool in its own isolated environment and puts the `nemo` command on your PATH, so there is no virtual environment to create or activate. To import the SDK from your own project, or when tool installs are unavailable, `pip install "nemo-platform[all]"` into a virtual environment instead. +Use a virtual environment instead when you also import the SDK from your own code. `nemo` then works only while the environment is active: + +```bash +pip install "nemo-platform[all]" +``` Then bring up the platform: diff --git a/script/test-nemo-cli.sh b/script/test-nemo-cli.sh index c753f28db8..558783767b 100755 --- a/script/test-nemo-cli.sh +++ b/script/test-nemo-cli.sh @@ -56,10 +56,13 @@ version_output="$(nemo --version)" echo "${version_output}" # A bare `0.0.0` is the CLI's fallback when its importlib.metadata lookup # misses the distribution it was installed from, which is invisible unless the -# output is asserted. Match it exactly: CI test wheels are stamped with a -# sentinel `0.0.0.dev` that is a legitimate version string. +# output is asserted. Match it exactly: nightly wheels are stamped with a +# sentinel `0.0.0.dev` that is a legitimate version string. The +# pattern is the subset of PEP 440 this project stamps — release, optional +# pre-release, any number of .post/.dev segments, optional local version. version="${version_output#nemo version }" -if [[ "${version}" == "0.0.0" ]] || [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then +if [[ "${version}" == "0.0.0" ]] || + [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+((a|b|rc)[0-9]+)?(\.(post|dev)[0-9]+)*(\+[0-9a-z.]+)?$ ]]; then echo "::error::nemo --version did not report an installed version: ${version_output}" >&2 exit 1 fi From f3b3c4a4f3ea29ac507d76a7eb62e717679d01e1 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 12 Aug 2026 21:55:17 +0000 Subject: [PATCH 15/15] docs: trim the install-failure entry to what a user needs Drop the uv tool update-shell step: uv's own installer puts its bin directory on PATH, so the command-not-found entry only needs the virtual environment case. Cut the wheel-publishing detail from the interpreter entry. Signed-off-by: Cursor Agent Co-authored-by: Aditya Pandey --- docs/cli/troubleshooting.mdx | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/docs/cli/troubleshooting.mdx b/docs/cli/troubleshooting.mdx index 8e2a2c90b0..ef04649ff6 100644 --- a/docs/cli/troubleshooting.mdx +++ b/docs/cli/troubleshooting.mdx @@ -14,7 +14,7 @@ This page covers common issues and how to resolve them. **Cause:** -With `pip` or `uv pip`, the command lives in a virtual environment and works only while that environment is active. With `uv tool install`, it lives in the uv tool executable directory, which uv adds to your `PATH` only when your shell configuration includes it. +If you installed `nemo-platform` with `pip` or `uv pip`, it was installed in a virtual environment. The `nemo` command is only available when that environment is activated. **Solution:** @@ -23,11 +23,6 @@ Activate the virtual environment where you installed the package: source /path/to/venv/bin/activate ``` -After a tool install, add the uv tool directory to your `PATH`, then restart your shell: -```bash -uv tool update-shell -``` - ## Installation Issues ### Install Fails Building a Dependency @@ -37,11 +32,11 @@ uv tool update-shell **Cause:** -NeMo Platform supports Python 3.12 and 3.13. A tool environment is built with the interpreter uv discovers, and [uv ignores the `requires-python` metadata](https://docs.astral.sh/uv/concepts/tools/#python-versions) when making that choice, so an install can land on Python 3.14 and then try to build dependencies that publish no 3.14 wheels. +NeMo Platform supports Python 3.12 and 3.13, but uv [picks the interpreter itself](https://docs.astral.sh/uv/concepts/tools/#python-versions), so an install can land on Python 3.14. **Solution:** -Name a supported interpreter. uv downloads one when your machine has none: +Name a supported interpreter. uv downloads one if you do not have it: ```bash uv tool install --python 3.13 "nemo-platform[all]"