Skip to content

feat: require 3.12 <= Python <= 3.14 - #952

Merged
nicot merged 1 commit into
mainfrom
python-3-12-minimum/ntonozzi
Jul 28, 2026
Merged

feat: require 3.12 <= Python <= 3.14#952
nicot merged 1 commit into
mainfrom
python-3-12-minimum/ntonozzi

Conversation

@nicot

@nicot nicot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor
  • raise the root workspace and nemo-platform wrapper minimum Python version to 3.12
  • remove the Python 3.12 dependency gates and type-check suppression around Experimentalist

@nicot
nicot requested review from a team as code owners July 28, 2026 18:47
@github-actions github-actions Bot added the feat label Jul 28, 2026
@nicot
nicot force-pushed the python-3-12-minimum/ntonozzi branch from 17aadd4 to f6739e5 Compare July 28, 2026 18:57
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 27563/35314 78.0% 62.5%
Integration Tests 16100/34032 47.3% 19.8%

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Changes

Python 3.11 support was removed from package metadata and documentation, CI jobs now use Python 3.12, and nemo-platform wheel matrices exclude Python 3.11. The CLI help test and third-party license inventory were also updated.

Python 3.12 migration

Layer / File(s) Summary
CI runtime migration
.github/workflows/ci.yaml
CI jobs use Python 3.12, while nemo-platform wheel builds and tests exclude Python 3.11.
Package and tooling contracts
pyproject.toml, packages/nemo_platform/pyproject.toml, plugins/nemo-experimentalist/pyproject.toml, tools/nemo-platform-sdk-tools/...
Package requirements, classifiers, dependency markers, Typer settings, Experimentalist overrides, and generated SDK metadata now target Python 3.12.
Compatibility documentation
README.md, docs/..., packages/.../README.md, packages/.../docs/QUICKSTART.md
Supported Python versions are documented as 3.12–3.13 across repository and package documentation.

CLI test stability

Layer / File(s) Summary
CLI help assertion
packages/nemo_platform_ext/tests/cli/test_app.py
The help test matches a stable prefix instead of the full description.

Third-party metadata refresh

Layer / File(s) Summary
License record update
third_party/licenses.jsonl
The backports-tarfile license record was removed.

Possibly related PRs

Suggested labels: ci, docs

Suggested reviewers: anastasia-nesterenko, crookedstorm, ironcommit

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: raising supported Python to 3.12 through 3.14.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch python-3-12-minimum/ntonozzi

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
third_party/osv-licenses.json (1)

1095-2179: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Bump GitPython past 3.1.55
third_party/osv-licenses.json still pins gitpython at 3.1.50 while this entry adds five HIGH-severity advisories (GHSA-3rp5-jjmw-4wv2, GHSA-6p8h-3wgx-97gf, GHSA-94p4-4cq8-9g67, GHSA-fjr4-x663-mwxc, GHSA-r9mr-m37c-5fr3). Update the pin and regenerate the export.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@third_party/osv-licenses.json` around lines 1095 - 2179, Update the gitpython
package pin in the OSV license export from 3.1.50 to a version newer than
3.1.55, then regenerate the complete third_party/osv-licenses.json export so its
advisory and version data reflects the updated dependency.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yaml:
- Around line 1072-1075: Update the Python version matrices in both the
wheel-build and wheel-test jobs to include Python 3.11 alongside 3.12, 3.13, and
3.14. Preserve the existing package entries and matrix behavior.

In `@docs/about/release-notes/release-0-1-0.mdx`:
- Line 96: Restore the originally documented Python compatibility range in
docs/about/release-notes/release-0-1-0.mdx at lines 96-96 and
docs/about/release-notes/release-0-2-0.mdx at lines 107-107; do not rewrite
either historical release claim.

In `@packages/nemo_nb/integration_test/md_notebook_links_test/getting-started.md`:
- Line 16: Update the Python prerequisite in getting-started.md from an
open-ended version requirement to explicitly list only the supported versions,
Python 3.12 or 3.13.

---

Outside diff comments:
In `@third_party/osv-licenses.json`:
- Around line 1095-2179: Update the gitpython package pin in the OSV license
export from 3.1.50 to a version newer than 3.1.55, then regenerate the complete
third_party/osv-licenses.json export so its advisory and version data reflects
the updated dependency.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: cc5518dc-86d2-4841-833a-5103241683ef

📥 Commits

Reviewing files that changed from the base of the PR and between 48a2614 and 17aadd4.

⛔ Files ignored due to path filters (7)
  • sdk/python/nemo-platform/.nmpcontext/stainless.yaml is excluded by !sdk/**
  • sdk/python/nemo-platform/README.md is excluded by !sdk/**
  • sdk/python/nemo-platform/pyproject.toml is excluded by !sdk/**
  • sdk/python/overrides/nemo-platform/README/01_intro.md is excluded by !sdk/**
  • sdk/python/overrides/nemo-platform/README/04_versioning.md is excluded by !sdk/**
  • sdk/stainless.yaml is excluded by !sdk/**
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (100)
  • .github/actions/build-nemo-platform-wheel/action.yaml
  • .github/scripts/ngc_metadata.py
  • .github/scripts/tests/test_ngc_metadata.py
  • .github/workflows/ci.yaml
  • Dockerfile.agentic-base
  • README.md
  • docker-bake.hcl
  • docker/Dockerfile.bake
  • docker/Dockerfile.nmp-rl-training
  • docker/automodel/pyproject.workspace.toml
  • docker/customizer/pyproject.workspace.toml
  • docker/dockerfiles/services/guardrails/Dockerfile.bake
  • docker/dockerfiles/services/intake/Dockerfile.bake
  • docker/rl/pyproject.workspace.toml
  • docker/unsloth/pyproject.workspace.toml
  • docs/about/release-notes/current-release.mdx
  • docs/about/release-notes/release-0-1-0.mdx
  • docs/about/release-notes/release-0-2-0.mdx
  • docs/cli/index.mdx
  • docs/evaluator/agent-eval/quickstart.mdx
  • docs/get-started/setup.mdx
  • docs/requirements.mdx
  • docs/support-matrix.mdx
  • packages/data_designer_nemo/pyproject.toml
  • packages/filesets/pyproject.toml
  • packages/garak_api/pyproject.toml
  • packages/models/pyproject.toml
  • packages/nemo_evaluator_sdk/examples/harbor/README.md
  • packages/nemo_evaluator_sdk/pyproject.toml
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/sandbox/README.md
  • packages/nemo_nb/integration_test/md_notebook_links_test/getting-started.md
  • packages/nemo_nb/pyproject.toml
  • packages/nemo_platform/BUNDLING.md
  • packages/nemo_platform/README.md
  • packages/nemo_platform/pyproject.toml
  • packages/nemo_platform_ext/pyproject.toml
  • packages/nemo_platform_plugin/pyproject.toml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/.agents/skills/creating-a-plugin/SKILL.md
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/README.md
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/QUICKSTART.md
  • packages/nmp_build_tools/pyproject.toml
  • packages/nmp_common/pyproject.toml
  • packages/nmp_customization_common/pyproject.toml
  • packages/nmp_platform/pyproject.toml
  • packages/nmp_platform_runner/pyproject.toml
  • packages/nmp_testing/pyproject.toml
  • plugins/README.md
  • plugins/example-plugin/pyproject.toml
  • plugins/nemo-agents/README.md
  • plugins/nemo-agents/examples/calculator-agent/pyproject.toml
  • plugins/nemo-agents/examples/email-phishing-analyzer/pyproject.toml
  • plugins/nemo-agents/pyproject.toml
  • plugins/nemo-anonymizer/pyproject.toml
  • plugins/nemo-auditor/pyproject.toml
  • plugins/nemo-automodel/pyproject.toml
  • plugins/nemo-customizer/pyproject.toml
  • plugins/nemo-data-designer/pyproject.toml
  • plugins/nemo-deployments/pyproject.toml
  • plugins/nemo-evaluator/pyproject.toml
  • plugins/nemo-evaluator/tests/integration/test_harbor_plugin_run.py
  • plugins/nemo-experimentalist/pyproject.toml
  • plugins/nemo-experimentalist/src/nemo_experimentalist_plugin/experimentalist/components/cache.py
  • plugins/nemo-guardrails/pyproject.toml
  • plugins/nemo-insights/pyproject.toml
  • plugins/nemo-rl/pyproject.toml
  • plugins/nemo-safe-synthesizer/pyproject.toml
  • plugins/nemo-switchyard/pyproject.toml
  • plugins/nemo-unsloth/pyproject.toml
  • pyproject.toml
  • script/compile-wheel-constraints.sh
  • scripts/skill-test.py
  • services/automodel/pyproject.toml
  • services/core/auth/pyproject.toml
  • services/core/entities/pyproject.toml
  • services/core/files/pyproject.toml
  • services/core/files/script/v2_migration.py
  • services/core/inference-gateway/pyproject.toml
  • services/core/jobs/pyproject.toml
  • services/core/mcp/pyproject.toml
  • services/core/models/pyproject.toml
  • services/core/secrets/pyproject.toml
  • services/guardrails/pyproject.toml
  • services/hello-world/pyproject.toml
  • services/intake/pyproject.toml
  • services/platform-seed/pyproject.toml
  • services/rl/pyproject.toml
  • services/studio/pyproject.toml
  • services/unsloth/pyproject.toml
  • skills/nemo-data-designer-plugin/SKILL.md
  • tests/agentic-use/README.md
  • tests/agentic-use/requirements-nat.txt
  • tests/discovery_exclusions.py
  • third_party/licenses.jsonl
  • third_party/osv-licenses.json
  • third_party/requirements-main.txt
  • tools/mcp-dev-tools/pyproject.toml
  • tools/nemo-platform-sdk-tools/pyproject.toml
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/format_osv_licenses.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/license/license_overrides.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/post_generation_update.py
💤 Files with no reviewable changes (2)
  • plugins/nemo-experimentalist/src/nemo_experimentalist_plugin/experimentalist/components/cache.py
  • third_party/licenses.jsonl

Comment thread .github/workflows/ci.yaml Outdated
Comment thread docs/about/release-notes/release-0-1-0.mdx Outdated
Comment thread packages/nemo_nb/integration_test/md_notebook_links_test/getting-started.md Outdated
@nicot
nicot force-pushed the python-3-12-minimum/ntonozzi branch from f6739e5 to dfde143 Compare July 28, 2026 20:05

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/nemo-experimentalist/pyproject.toml`:
- Line 12: Update the nooa dependency declaration in pyproject.toml to reference
a specific tagged release from its public GitHub repository, then regenerate the
corresponding lockfile so it records the pinned tag and resolved revision.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 70b26a81-1e57-4a4d-bbd0-3a3ef5b68ccf

📥 Commits

Reviewing files that changed from the base of the PR and between f6739e5 and dfde143.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (16)
  • .github/workflows/ci.yaml
  • README.md
  • docs/about/release-notes/current-release.mdx
  • docs/about/release-notes/release-0-1-0.mdx
  • docs/about/release-notes/release-0-2-0.mdx
  • docs/cli/index.mdx
  • docs/get-started/setup.mdx
  • docs/requirements.mdx
  • docs/support-matrix.mdx
  • packages/nemo_platform/README.md
  • packages/nemo_platform/pyproject.toml
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/README.md
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/QUICKSTART.md
  • plugins/nemo-experimentalist/pyproject.toml
  • pyproject.toml
  • third_party/licenses.jsonl
💤 Files with no reviewable changes (1)
  • third_party/licenses.jsonl
🚧 Files skipped from review as they are similar to previous changes (11)
  • docs/about/release-notes/release-0-1-0.mdx
  • packages/nemo_platform/pyproject.toml
  • docs/about/release-notes/release-0-2-0.mdx
  • README.md
  • docs/get-started/setup.mdx
  • docs/requirements.mdx
  • docs/about/release-notes/current-release.mdx
  • docs/support-matrix.mdx
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/README.md
  • packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/QUICKSTART.md
  • .github/workflows/ci.yaml

Comment thread plugins/nemo-experimentalist/pyproject.toml
@nicot
nicot force-pushed the python-3-12-minimum/ntonozzi branch from dfde143 to 59896be Compare July 28, 2026 20:56
Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@nicot
nicot force-pushed the python-3-12-minimum/ntonozzi branch from 59896be to e894662 Compare July 28, 2026 21:35
@nicot nicot changed the title feat: require Python 3.12 feat: require 3.12 < Python <= 3.14 Jul 28, 2026
@nicot nicot changed the title feat: require 3.12 < Python <= 3.14 feat: require 3.12 <= Python <= 3.14 Jul 28, 2026
@svvarom
svvarom self-requested a review July 28, 2026 22:17
@nicot
nicot added this pull request to the merge queue Jul 28, 2026
Merged via the queue into main with commit 951a454 Jul 28, 2026
114 of 116 checks passed
@nicot
nicot deleted the python-3-12-minimum/ntonozzi branch July 28, 2026 22:44
ngoncharenko added a commit that referenced this pull request Jul 28, 2026
Conflicts in plugins/nemo-experimentalist/pyproject.toml and uv.lock.

main #952 raised the plugin to requires-python >=3.12 and dropped the now
redundant `python_full_version >= '3.12'` markers from harbor and nooa. Kept
that, and re-applied this branch's two additions on top: the nemo-evaluator-sdk
dependency and the pytest marker declarations.

This also settles the review question about gating nemo-evaluator-sdk behind a
3.12 marker — the whole plugin is 3.12+ now, so the dependency is unambiguously
correct ungated.

uv.lock regenerated from main's rather than hand-merged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Nick Goncharenko <ngoncharenko@nvidia.com>
ngoncharenko pushed a commit that referenced this pull request Jul 29, 2026
Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants