Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
e112605
build: bump Python 3.12 → 3.13.13 to address CPython CVEs
kajalj22 Jul 29, 2026
186409a
fix: Python 3.13 compat for scicode, longmt_eval, tau2 server deps
kajalj22 Jul 29, 2026
05ab389
refactor: remove explicit Python version from uv venv calls
kajalj22 Jul 30, 2026
4dfe8b7
chore: merge main into bump-python-3.13; regenerate uv.lock
kajalj22 Jul 30, 2026
20cb65a
build: bump Python 3.13.13 → 3.13.14; bump uv to 0.11.29; add pyarrow…
kajalj22 Jul 30, 2026
04bb30c
revert: restore requires-python = ">=3.12" in server/model pyproject.…
kajalj22 Jul 30, 2026
4213757
build: update requires-python to >=3.13.14 in server/model pyproject.…
kajalj22 Jul 30, 2026
09c1939
docs: restore --python 3.13.14 in READMEs that originally had --pytho…
kajalj22 Jul 30, 2026
1c247a4
Merge branch 'main' into bump-python-3.13
kajalj22 Aug 4, 2026
7563e9d
Merge branch 'main' into bump-python-3.13
kajalj22 Aug 4, 2026
f991f19
fix: exclude fasttext-wheel from all venvs (no cp313 wheels, fails to…
kajalj22 Aug 4, 2026
9eb46d8
Merge branch 'bump-python-3.13' of https://github.com/NVIDIA-NeMo/Gym…
kajalj22 Aug 4, 2026
e5f4fba
chore: regenerate uv.lock after merge
kajalj22 Aug 4, 2026
c5649ed
fix: override spacy>=3.8.13 to unblock longmt_eval on Python 3.13
kajalj22 Aug 4, 2026
087d887
fix: override torch>=2.12.0 in osworld_agent for Python 3.13 compat
kajalj22 Aug 4, 2026
cf1de9a
Merge branch 'main' into bump-python-3.13
kajalj22 Aug 4, 2026
f48b865
chore: merge main into bump-python-3.13; regenerate uv.lock
kajalj22 Aug 4, 2026
0f49757
Merge branch 'main' into bump-python-3.13
kajalj22 Aug 5, 2026
90e5768
build: bump Docker Python 3.12.11 → 3.13.14 and uv 0.11.6 → 0.11.29
kajalj22 Aug 5, 2026
5718ec4
build: update remaining Python 3.12 refs from main merge
kajalj22 Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/full-test-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ concurrency:
env:
# Number of parallel shards for the full server suite. Keep in sync with the matrix below.
NUM_SHARDS: "8"
# Pin uv: 0.11.20 has a resolver regression that silently drops pinned deps from
# `uv pip install -r requirements.txt` (e.g. matplotlib/scipy/Pillow), breaking
# per-server test venvs. 0.11.19 is the latest known-good version.
UV_INSTALL_URL: "https://astral.sh/uv/0.11.19/install.sh"
# Pin uv: 0.11.21+ supports Python 3.13.14; 0.11.29 is the latest stable.
# 0.11.20 had a regression dropping pinned deps (fixed in 0.11.21).
#
UV_INSTALL_URL: "https://astral.sh/uv/0.11.29/install.sh"

jobs:
full-test-suite:
Expand All @@ -57,7 +57,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y --no-install-recommends git curl ca-certificates
curl -LsSf "$UV_INSTALL_URL" | sh
uv venv --python 3.12
uv venv
source .venv/bin/activate
uv sync --extra dev --extra sandbox

Expand Down Expand Up @@ -95,7 +95,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y --no-install-recommends git curl ca-certificates
curl -LsSf "$UV_INSTALL_URL" | sh
uv venv --python 3.12
uv venv
source .venv/bin/activate
uv sync --extra dev

Expand Down Expand Up @@ -162,7 +162,7 @@ jobs:
- name: Install wheel in fresh venv
run: |
cd /tmp && mkdir -p myproject && cd myproject
uv venv --python 3.12 .venv
uv venv .venv
source .venv/bin/activate
uv pip install $GITHUB_WORKSPACE/dist/*.whl
python -c "import nemo_gym; print(f'nemo-gym {nemo_gym.__version__}')"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-sla-tracker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
with:
python-version: "3.12"
python-version-file: .python-version

- name: Refresh SLA labels and dashboard
env:
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ concurrency:
env:
# Number of parallel shards for the full server suite. Keep in sync with the matrix below.
NUM_SHARDS: "8"
# Pin uv: 0.11.20 has a resolver regression that silently drops pinned deps from
# `uv pip install -r requirements.txt`. 0.11.19 is the latest known-good version.
UV_INSTALL_URL: "https://astral.sh/uv/0.11.19/install.sh"
# Pin uv: 0.11.21+ supports Python 3.13.14; 0.11.29 is the latest stable.
# 0.11.20 had a regression dropping pinned deps (fixed in 0.11.21).
UV_INSTALL_URL: "https://astral.sh/uv/0.11.29/install.sh"

jobs:
detect:
Expand Down Expand Up @@ -153,7 +153,7 @@ jobs:
# The flow below should be used and synced with any Docker or container related flows. There is no script here to keep it 100% explicit.
# This is how we test and this is how you should use/consume.
curl -LsSf "$UV_INSTALL_URL" | sh
uv venv --python 3.12
uv venv
source .venv/bin/activate
uv sync --extra dev --extra sandbox

Expand Down Expand Up @@ -227,7 +227,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y --no-install-recommends git curl ca-certificates
curl -LsSf "$UV_INSTALL_URL" | sh
uv venv --python 3.12
uv venv
source .venv/bin/activate
uv sync --extra dev

Expand Down
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.12
3.13.14
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ gym env resolve --config ...
## Code Style

- Line length: 119
- Python 3.12+, async-first
- Python 3.13.14+, async-first
- Ruff for linting and formatting (double quotes, isort)
- Test coverage must be >= 96%
- All commits require DCO sign-off (`-s`) and cryptographic signature (`-S`)
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ For complete development setup, CI/CD requirements, commit signing, and troubles
```bash
git clone git@github.com:NVIDIA-NeMo/Gym.git
cd Gym
uv venv --python 3.12 && source .venv/bin/activate
uv venv --python 3.13.14 && source .venv/bin/activate
uv sync --extra dev
pre-commit install
```
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ NeMo Gym is designed to run on standard development machines:
| Hardware Requirements | Software Requirements |
| --------------------- | --------------------- |
| **GPU**: Not required for NeMo Gym library operation<br>• GPU may be needed for specific resources servers or model inference (see individual server documentation) | **Operating System**:<br>• Linux (Ubuntu 20.04+, or equivalent)<br>• macOS (11.0+ for x86_64, 12.0+ for Apple Silicon)<br>• Windows (via WSL2) |
| **CPU**: Any modern x86_64 or ARM64 processor (e.g., Intel, AMD, Apple Silicon) | **Python**: 3.12 or higher |
| **CPU**: Any modern x86_64 or ARM64 processor (e.g., Intel, AMD, Apple Silicon) | **Python**: 3.13.14 or higher |
| **RAM**: Minimum 8 GB (16 GB+ recommended for larger environments) | **Git**: For cloning the repository |
| **Storage**: Minimum 5 GB free disk space for installation and basic usage | **Internet Connection**: Required for downloading dependencies and API access |

Expand All @@ -85,16 +85,16 @@ NeMo Gym is designed to run on standard development machines:

## 🚀 Quick Start

Requires Python 3.12+ on x86_64 or ARM64 (Linux, macOS, Windows via WSL2). No GPU required. See the [Getting Started](https://docs.nvidia.com/nemo/gym/main/get-started) docs for a more comprehensive walkthrough.
Requires Python 3.13.14+ on x86_64 or ARM64 (Linux, macOS, Windows via WSL2). No GPU required. See the [Getting Started](https://docs.nvidia.com/nemo/gym/main/get-started) docs for a more comprehensive walkthrough.

**Install NeMo Gym:**

Requires [uv](https://docs.astral.sh/uv/getting-started/installation/) and Python 3.12+.
Requires [uv](https://docs.astral.sh/uv/getting-started/installation/) and Python 3.13.14+.

```bash
git clone git@github.com:NVIDIA-NeMo/Gym.git
cd Gym
uv venv --python 3.12 && source .venv/bin/activate
uv venv --python 3.13.14 && source .venv/bin/activate
uv sync
```

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/legal_agent_bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ gitignored benchmark index.

## Requirements

- Python 3.12 and the repository environment installed with `uv`
- Python 3.13.13 and the repository environment installed with `uv`
- Docker with a running daemon
- Authorized OpenAI-compatible policy and judge endpoints in the root
`env.yaml`
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/ruler/prepare_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def prepare_helper(output_name: str, model: str, length: int, data_format: str =
output_fpath = DATA_DIR / output_name

run(
"""uv venv --python 3.12 --allow-existing --seed .venv \
"""uv venv --python 3.13.14 --allow-existing --seed .venv \
&& source .venv/bin/activate \
&& uv pip install pyyaml bs4 scipy wonderwords html2text tenacity nltk transformers""",
check=True,
Expand Down
4 changes: 2 additions & 2 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ apt-get clean
rm -rf /var/lib/apt/lists/*
EOF

ARG UV_VERSION=0.11.6
ARG PYTHON_VERSION=3.12.11
ARG UV_VERSION=0.11.29
ARG PYTHON_VERSION=3.13.14
ENV PATH="/root/.local/bin:$PATH"
RUN curl -LsSf https://astral.sh/uv/${UV_VERSION}/install.sh | sh && \
uv python install ${PYTHON_VERSION}
Expand Down
23 changes: 20 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ dynamic = [
]
description = "NeMo Gym is a library for building reinforcement learning environments"
license = {file = "LICENSE"}
requires-python = ">=3.12"
requires-python = ">=3.13.14"
authors = [{ name = "NVIDIA" }]
maintainers = [{ name = "NVIDIA" }]

Expand Down Expand Up @@ -57,7 +57,7 @@ classifiers = [
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Scientific/Engineering :: Mathematics",
Expand Down Expand Up @@ -200,6 +200,12 @@ dependencies = [
# License: Apache 2.0 https://github.com/andrew-d/python-multipart/blob/master/LICENSE.txt
"python-multipart>=0.0.22",

# pyarrow: columnar data library (transitive dependency via mlflow, pinned for security)
# mlflow caps pyarrow<25; versions >=23.0.1 have cp313 wheels and address use-after-free.
# Updated: Tue Jul 29, 2026 with pyarrow>=23.0.1
# License: Apache 2.0 https://github.com/apache/arrow/blob/main/LICENSE
"pyarrow>=23.0.1",

# wandb: E2E rollout collection data and metrics upload
# Updated: Mon May 19, 2026 with wandb==0.27.0
# License: MIT https://github.com/wandb/wandb/blob/f8acf479342b6aa8217dd0833bb32190b11c14bc/LICENSE
Expand Down Expand Up @@ -321,10 +327,21 @@ required-version = ">=0.9.30"
constraint-dependencies = [
"grpcio>=1.81.0rc1",
]
# override-dependencies overrides transitive dep version pins that conflict with
# Python 3.13 wheel availability. Server venvs inherit this via the editable
# nemo-gym install (uv >=0.11.24).
override-dependencies = [
# segale pins spacy==3.8.4 which has no cp313 wheels; 3.8.13+ does.
"spacy>=3.8.13",
]
# NOTE: server venvs install nemo-gym editably and inherit this list, so anything
# here is also silently dropped from them (uv >=0.11.24). Don't add a package any
# server needs. Context: https://github.com/NVIDIA-NeMo/Gym/pull/1835
exclude-dependencies = [
# fasttext-wheel has no cp313 wheels and fails to compile on Python 3.13
# (missing #include <cstdint> in src/args.cc). Excluded as a transitive dep
# of unbabel-comet; wmt_translation does not import fasttext at runtime.
"fasttext-wheel",
# Exclude unwanted dependencies from mlflow
"alembic",
"blinker",
Expand Down Expand Up @@ -563,7 +580,7 @@ exclude_also = [
[tool.ruff]
# Line length configuration
line-length = 119
target-version = "py312"
target-version = "py313"

cache-dir = "cache/.ruff_cache"
# Exclude common directories that shouldn't be linted
Expand Down
2 changes: 1 addition & 1 deletion resources_servers/code_fim/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[project]
name = "code-fim"
version = "0.0.0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"
dependencies = [
"nemo-gym[dev]",
"human-eval-infilling",
Expand Down
4 changes: 2 additions & 2 deletions resources_servers/legal_agent_bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ criterion with an OpenAI-compatible judge model.

## Requirements

- Python 3.12 and [uv](https://docs.astral.sh/uv/)
- Python 3.13.13 and [uv](https://docs.astral.sh/uv/)
- Docker with a running daemon (the only supported container backend)
- An OpenAI-compatible policy endpoint and judge endpoint
- At least 10 GB of free working space for preparation and the first Docker build
Expand All @@ -25,7 +25,7 @@ Docker layers.
From a fresh clone, create the repository environment:

```bash
uv venv --python 3.12
uv venv --python 3.13.14
source .venv/bin/activate
uv sync --extra dev
docker info >/dev/null
Expand Down
2 changes: 2 additions & 0 deletions resources_servers/longmt_eval/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ scipy
joblib
langdetect
sacrebleu[ja,ko]>=2.4
# spacy: segale pins spacy==3.8.4 which has no cp313 wheels; longmt_eval
# is currently incompatible with Python 3.13 until SEGALE updates its dep.
2 changes: 1 addition & 1 deletion resources_servers/newton_bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ policy_model_name: Qwen/Qwen3-VL-8B-Thinking
Run the following from the NeMo Gym repo root in a separate virtual environment configured with `vllm`:

```bash
uv venv --python 3.12 --seed
uv venv --python 3.13.14 --seed
source .venv/bin/activate
uv pip install hf_transfer datasets vllm --torch-backend=auto
Expand Down
2 changes: 1 addition & 1 deletion resources_servers/openenv/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ All commands below should be run from the **NeMo-Gym repository root** (the dire

```bash
# Set up the project venv
uv venv --python 3.12 && source .venv/bin/activate
uv venv --python 3.13.14 && source .venv/bin/activate
uv sync --extra dev
```

Expand Down
4 changes: 2 additions & 2 deletions resources_servers/scicode/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
-e nemo-gym[dev] @ ../..
# The executed SciCode solutions + test helpers import these at runtime, so they must be in
# this server's venv. scipy<1.14 keeps scipy.integrate.simps (removed in 1.14) and has cp312 wheels.
scipy<1.14
# this server's venv. scipy>=1.14.1 is required for Python 3.13 wheels.
scipy>=1.14.1
numpy
matplotlib
h5py
Expand Down
2 changes: 1 addition & 1 deletion resources_servers/toolsandbox/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ test` build that venv automatically. To set it up manually for development:

```bash
cd gym/resources_servers/toolsandbox
uv venv --seed --python 3.12 .venv && source .venv/bin/activate
uv venv --python 3.13.14 --seed .venv && source .venv/bin/activate
uv pip install -r requirements.txt
```

Expand Down
2 changes: 1 addition & 1 deletion resources_servers/vlm_eval_kit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Rather than using decord, we use decord2 which is compatible with MacOS.
git clone https://github.com/open-compass/VLMEvalKit
cd VLMEvalKit

uv venv --python 3.12 --seed
uv venv --python 3.13.14 --seed
source .venv/bin/activate
uv pip install '-e .' rouge

Expand Down
2 changes: 1 addition & 1 deletion resources_servers/vlm_eval_kit/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[project]
name = "local-vllm-model"
version = "0.2.0rc0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"
dependencies = [
"nemo-gym[dev]",
# VLMEvalKit dependencies
Expand Down
2 changes: 1 addition & 1 deletion resources_servers/wmt_translation/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ huggingface-hub
scipy
# Compact Language Detector v2 (Google CLD2) Python binding. Pure C++
# extension with no Python deps. Prebuilt wheels exist through cp313, so on
# the repo-pinned 3.12 (and 3.13) it installs from a wheel. On 3.14 there is
# the repo-pinned 3.13.14 it installs from a wheel. On 3.14 there is
# no wheel yet but it could be built from CLD2 source (needs a C++ compiler).
pycld2>=0.42
5 changes: 4 additions & 1 deletion responses_api_agents/osworld_agent/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[project]
name = "osworld-agent"
version = "0.0.0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"
dependencies = [
"nemo-gym[dev]",
# JeffPengCoder/OSWorld nv-gym at an immutable commit: upstream main
Expand Down Expand Up @@ -69,3 +69,6 @@ nemo-gym = { path = "../..", editable = true }
# not load SurferH, so keep those optional pieces outside the runtime while
# supplying opencv-python-headless explicitly above.
exclude-dependencies = ["opencv-python", "opencv-contrib-python", "agp-client"]
# osworld pins torch<2.6 but torchvision 0.20.x (for torch 2.5.x) has no cp313
# wheels. Override to 2.12.0 which has cp313 wheels for both torch and torchvision.
override-dependencies = ["torch>=2.12.0", "torchvision>=0.27.0"]
2 changes: 1 addition & 1 deletion responses_api_agents/stirrup_agent/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ For each GDPVal task, the agent:

1. **Install NeMo Gym** (see the [top-level README](../../README.md)):
```bash
uv venv --python 3.12 && source .venv/bin/activate
uv venv --python 3.13.14 && source .venv/bin/activate
uv sync --extra dev
```
2. **Install document-generation dependencies** (needed for the GDPVal deliverable formats —
Expand Down
1 change: 1 addition & 0 deletions responses_api_agents/tau2/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ tau2[knowledge] @ git+https://github.com/bxyu-nvidia/tau2-bench@bxyu/nemo_gym_st
# `tau2[knowledge] @ git+URL` direct reference, so bm25/bm25_grep miss rank-bm25.
rank-bm25>=0.2.2
openai>=1.0.0
audioop-lts>=0.2.2
2 changes: 1 addition & 1 deletion responses_api_models/genrm_model/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
name = "genrm-model"
dynamic = ["dependencies"]
version = "0.2.0rc0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"

[build-system]
build-backend = "setuptools.build_meta"
Expand Down
2 changes: 1 addition & 1 deletion responses_api_models/local_vllm_model/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
name = "local-vllm-model"
dynamic = ["dependencies"]
version = "0.2.0rc0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"

[build-system]
build-backend = "setuptools.build_meta"
Expand Down
2 changes: 1 addition & 1 deletion responses_api_models/vllm_model/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[project]
name = "vllm-model"
version = "0.2.0rc0"
requires-python = ">=3.12"
requires-python = ">=3.13.14"
dependencies = [
"nemo-gym[dev]",
]
Expand Down
Loading
Loading