From 5d49c8bf834d0ee0f57eb4d4a8b2dacbb91a5bb8 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 06:20:10 +0000 Subject: [PATCH 01/22] fix(mcore): support process group contract drift Signed-off-by: svcnemo-autobot --- .../megatron_mimo/megatron_mimo_provider.py | 33 +++++++++++++++-- .../models/gemma/test_gemma4_modeling.py | 2 +- .../test_megatron_mimo_provider.py | 37 +++++++++++++++++-- 3 files changed, 64 insertions(+), 8 deletions(-) diff --git a/src/megatron/bridge/models/megatron_mimo/megatron_mimo_provider.py b/src/megatron/bridge/models/megatron_mimo/megatron_mimo_provider.py index a16d70b07a..734c48dd6c 100644 --- a/src/megatron/bridge/models/megatron_mimo/megatron_mimo_provider.py +++ b/src/megatron/bridge/models/megatron_mimo/megatron_mimo_provider.py @@ -44,6 +44,28 @@ from megatron.core.hyper_comm_grid import HyperCommGrid +_GTP_REMAT_PROCESS_GROUP_ALIASES = ( + "dp_cp_gtp_remat", + "expt_dp_gtp_remat", + "tp_ep_pp_with_egtp_remat", +) + + +def _get_gtp_remat_process_group_kwargs( + dp_cp_group: torch.distributed.ProcessGroup, + expt_dp_group: torch.distributed.ProcessGroup, + tp_ep_pp_group: torch.distributed.ProcessGroup, +) -> Dict[str, torch.distributed.ProcessGroup]: + """Return GTP-remat aliases supported by the installed MCore contract.""" + process_groups = { + "dp_cp_gtp_remat": dp_cp_group, + "expt_dp_gtp_remat": expt_dp_group, + "tp_ep_pp_with_egtp_remat": tp_ep_pp_group, + } + declared_fields = ProcessGroupCollection.__dataclass_fields__ + return {name: process_groups[name] for name in _GTP_REMAT_PROCESS_GROUP_ALIASES if name in declared_fields} + + @dataclass class MegatronMIMOInfra: """MegatronMIMO infrastructure metadata (separate from model). @@ -297,8 +319,13 @@ def _get_pg_collections_from_grids( expt_dp_group = grid.get_pg(["expt_dp"], view=EXPERT_VIEW_NAME) tp_ep_pp_group = grid.get_pg(["expt_tp", "ep", "pp"], view=EXPERT_VIEW_NAME) - # HyperCommGrid does not define GTP-remat axes, so the GTP-inclusive + # HyperCommGrid does not define GTP-remat axes, so supported GTP-inclusive # process groups collapse to their existing non-GTP equivalents. + gtp_remat_process_groups = _get_gtp_remat_process_group_kwargs( + dp_cp_group, + expt_dp_group, + tp_ep_pp_group, + ) pg_collections[module_name] = ProcessGroupCollection( tp=grid.get_pg(["tp"]), dp=grid.get_pg(["dp"]), @@ -308,19 +335,17 @@ def _get_pg_collections_from_grids( expt_tp=grid.get_pg(["expt_tp"], view=EXPERT_VIEW_NAME), expt_dp=expt_dp_group, dp_cp=dp_cp_group, - dp_cp_gtp_remat=dp_cp_group, - expt_dp_gtp_remat=expt_dp_group, intra_dp_cp=dp_cp_group, tp_cp=grid.get_pg(["tp", "cp"]), tp_dp_cp=grid.get_pg(["tp", "dp", "cp"]), mp=grid.get_pg(["tp", "pp"]), tp_ep=grid.get_pg(["expt_tp", "ep"], view=EXPERT_VIEW_NAME), tp_ep_pp=tp_ep_pp_group, - tp_ep_pp_with_egtp_remat=tp_ep_pp_group, intra_expt_dp=expt_dp_group, intra_dist_opt=grid.get_pg(["tp", "cp", "dp", "pp"]), pos_embd=pos_embd_pg if first_stage else None, embd=embd_pg if (first_stage or last_stage) else None, + **gtp_remat_process_groups, ) else: pg_collections[module_name] = None diff --git a/tests/unit_tests/models/gemma/test_gemma4_modeling.py b/tests/unit_tests/models/gemma/test_gemma4_modeling.py index 6b1318e519..daba5e2af7 100644 --- a/tests/unit_tests/models/gemma/test_gemma4_modeling.py +++ b/tests/unit_tests/models/gemma/test_gemma4_modeling.py @@ -923,7 +923,7 @@ def test_moe_global_rotary_matches_hf_proportional_coordinate_layout(self): hidden_states = torch.arange(1, head_dim + 1, dtype=torch.float32).view(1, 1, 1, head_dim) freqs = rotary.get_freqs_non_repeated(1, offset=position) freqs = torch.cat((freqs, freqs), dim=-1)[:, None, None, :] - config = SimpleNamespace(apply_rope_fusion=False, rotary_interleaved=False) + config = SimpleNamespace(apply_rope_fusion=False, rotary_interleaved=False, mrope_section=None) actual = apply_rotary_pos_emb(hidden_states, freqs, config, cp_group=object()) expected = hidden_states.clone() diff --git a/tests/unit_tests/models/megatron_mimo/test_megatron_mimo_provider.py b/tests/unit_tests/models/megatron_mimo/test_megatron_mimo_provider.py index 9f33ce4576..a6df5b0dfe 100644 --- a/tests/unit_tests/models/megatron_mimo/test_megatron_mimo_provider.py +++ b/tests/unit_tests/models/megatron_mimo/test_megatron_mimo_provider.py @@ -13,6 +13,7 @@ MegatronMIMOParallelismConfig, ModuleParallelismConfig, ) +from megatron.bridge.models.megatron_mimo.megatron_mimo_provider import _get_gtp_remat_process_group_kwargs class FakeStandardProvider: @@ -683,6 +684,34 @@ def test_is_pp_last_stage_none_group(self): class TestProcessGroupCollectionWithEmbeddingGroups: """Test that ProcessGroupCollection includes embedding groups.""" + @patch( + "megatron.bridge.models.megatron_mimo.megatron_mimo_provider.ProcessGroupCollection.__dataclass_fields__", + {"tp": Mock()}, + ) + def test_gtp_remat_aliases_omitted_for_older_mcore_contract(self): + """Test that aliases absent from the MCore contract are not passed to its constructor.""" + assert _get_gtp_remat_process_group_kwargs(Mock(), Mock(), Mock()) == {} + + @patch( + "megatron.bridge.models.megatron_mimo.megatron_mimo_provider.ProcessGroupCollection.__dataclass_fields__", + { + "dp_cp_gtp_remat": Mock(), + "expt_dp_gtp_remat": Mock(), + "tp_ep_pp_with_egtp_remat": Mock(), + }, + ) + def test_gtp_remat_aliases_preserved_for_current_mcore_contract(self): + """Test that current MCore receives all collapsed GTP-remat aliases.""" + dp_cp_group = Mock() + expt_dp_group = Mock() + tp_ep_pp_group = Mock() + + assert _get_gtp_remat_process_group_kwargs(dp_cp_group, expt_dp_group, tp_ep_pp_group) == { + "dp_cp_gtp_remat": dp_cp_group, + "expt_dp_gtp_remat": expt_dp_group, + "tp_ep_pp_with_egtp_remat": tp_ep_pp_group, + } + @patch("megatron.bridge.models.megatron_mimo.megatron_mimo_provider.is_pp_last_stage") @patch("megatron.bridge.models.megatron_mimo.megatron_mimo_provider.is_pp_first_stage") @patch("megatron.bridge.models.megatron_mimo.megatron_mimo_provider.populate_embedding_and_position_groups") @@ -835,15 +864,17 @@ def test_pg_collection_preserves_dense_and_expert_view_contracts( assert pgc.ep == mock_ep assert pgc.expt_tp == mock_expt_tp assert pgc.expt_dp == mock_expt_dp - assert pgc.expt_dp_gtp_remat == mock_expt_dp assert pgc.dp_cp == mock_dp_cp - assert pgc.dp_cp_gtp_remat == mock_dp_cp assert pgc.intra_dp_cp == mock_dp_cp + if "expt_dp_gtp_remat" in pgc.__dataclass_fields__: + assert pgc.expt_dp_gtp_remat == mock_expt_dp + assert pgc.dp_cp_gtp_remat == mock_dp_cp assert pgc.tp_cp == mock_tp_cp assert pgc.tp_dp_cp == mock_tp_dp_cp assert pgc.mp == mock_mp assert pgc.tp_ep == mock_tp_ep assert pgc.tp_ep_pp == mock_tp_ep_pp - assert pgc.tp_ep_pp_with_egtp_remat == mock_tp_ep_pp + if "tp_ep_pp_with_egtp_remat" in pgc.__dataclass_fields__: + assert pgc.tp_ep_pp_with_egtp_remat == mock_tp_ep_pp assert pgc.intra_expt_dp == mock_expt_dp assert pgc.intra_dist_opt == mock_intra_dist_opt From 6ccdc2ee0c750efc86396f37f82d632865404010 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 07:49:21 +0000 Subject: [PATCH 02/22] fix(tests): package conversion examples Signed-off-by: svcnemo-autobot --- examples/__init__.py | 2 ++ examples/conversion/__init__.py | 2 ++ examples/conversion/adapter/__init__.py | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 examples/__init__.py create mode 100644 examples/conversion/__init__.py create mode 100644 examples/conversion/adapter/__init__.py diff --git a/examples/__init__.py b/examples/__init__.py new file mode 100644 index 0000000000..b507f042ed --- /dev/null +++ b/examples/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +"""Megatron Bridge examples package.""" diff --git a/examples/conversion/__init__.py b/examples/conversion/__init__.py new file mode 100644 index 0000000000..e15112544d --- /dev/null +++ b/examples/conversion/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +"""Checkpoint conversion examples.""" diff --git a/examples/conversion/adapter/__init__.py b/examples/conversion/adapter/__init__.py new file mode 100644 index 0000000000..36163e4183 --- /dev/null +++ b/examples/conversion/adapter/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +"""Adapter conversion examples.""" From dee67394247aea4f3a31f500473355cea6a398da Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 09:36:00 +0000 Subject: [PATCH 03/22] build(ci): bake diffusion codecs into test image Signed-off-by: svcnemo-autobot --- docker/Dockerfile.ci | 2 ++ pyproject.toml | 17 ++++++++--------- scripts/install_diffusion_deps.sh | 9 ++++----- tests/unit_tests/Launch_Unit_Tests_Diffusion.sh | 4 ---- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 6673d7e8e8..7a71af2d29 100644 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -139,6 +139,8 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ uv sync --locked --only-group build && \ uv sync --link-mode copy --locked --all-extras --all-groups --no-group diffusion; \ fi && \ + # Diffusion tests run without package-index access, so bake their opt-in codecs into the CI image. + uv pip install --no-config imageio imageio-ffmpeg av easydict && \ # Create symlink for tilelang's libcudart_stub.so to the actual libcudart.so # Otherwise, the stub will be called in some cases and fail ln -sf "$(ldconfig -p | awk '/libcudart\.so\.[0-9]+ /{print $NF; exit}')" /opt/venv/lib/python3.12/site-packages/tilelang/lib/libcudart_stub.so && \ diff --git a/pyproject.toml b/pyproject.toml index af10bc752e..693a970a2e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,9 +123,9 @@ no-build-isolation-package = [ ] prerelease = "allow" override-dependencies = [ - "av; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh - "imageio; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh - "imageio-ffmpeg; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh + "av; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments + "imageio; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments + "imageio-ffmpeg; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments "torch; sys_platform == 'never'", "torchvision; sys_platform == 'never'", "triton; sys_platform == 'never'", @@ -245,12 +245,11 @@ build = [ "nvidia-cudnn-frontend>=1.25.0", ] # CVE-carrying WAN diffusion codecs, needed only by WAN video caching -# (src/megatron/bridge/diffusion/models/wan/inference/utils.py). All three are suppressed -# in the default build by the [tool.uv] override-dependencies above (each marked -# `sys_platform == 'never'`), so they are never installed and appear only as `never`-marked -# edges in uv.lock — keeping them out of both the image and SBOM/manifest scans. Install -# them at test time with scripts/install_diffusion_deps.sh. This group is kept for -# documentation only; `uv sync --group diffusion` will NOT install them on Linux. +# (src/megatron/bridge/diffusion/models/wan/inference/utils.py). The [tool.uv] +# override-dependencies above keeps them out of the default project sync. Dockerfile.ci +# installs them explicitly for offline CI, while scripts/install_diffusion_deps.sh supports +# opt-in environments. This group is kept for documentation only; +# `uv sync --group diffusion` will NOT install them on Linux. diffusion = ["imageio", "imageio-ffmpeg", "av"] # flash-mla has no PyPI wheel and is built from source by uv (no-build-isolation) during the # image's `uv sync --all-groups`. Megatron-LM declares it in the same group, but uv does not diff --git a/scripts/install_diffusion_deps.sh b/scripts/install_diffusion_deps.sh index c3f7b0acfd..8532650043 100644 --- a/scripts/install_diffusion_deps.sh +++ b/scripts/install_diffusion_deps.sh @@ -13,11 +13,10 @@ # limitations under the License. #!/usr/bin/env bash -# Install the WAN diffusion codecs (imageio, imageio-ffmpeg, av) into the active -# environment at test time. All three carry CVEs and are excluded from the shipped -# container via [tool.uv] override-dependencies (each marked `sys_platform == 'never'`), -# so neither the build nor `uv sync` installs them and they appear only as `never`-marked -# edges in uv.lock. +# Install the WAN diffusion codecs (imageio, imageio-ffmpeg, av) into an opt-in +# environment. All three carry CVEs and are excluded from the default project sync via +# [tool.uv] override-dependencies (each marked `sys_platform == 'never'`). The CI image +# installs them explicitly so offline diffusion tests do not need this helper. # # Install them directly with `uv pip install --no-config`: --no-config ignores the # project's [tool.uv] config, so the `sys_platform == 'never'` override does not diff --git a/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh b/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh index efe4aace86..f5ab0c387b 100644 --- a/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh +++ b/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh @@ -25,10 +25,6 @@ if [ -f "/opt/Megatron-Bridge/.mcore_commit_sha" ]; then fi echo "" -# The 'diffusion' codecs (imageio/imageio-ffmpeg/av) are excluded from the shipped image; -# install them so the WAN video-caching unit test runs instead of skips. -bash /opt/Megatron-Bridge/scripts/install_diffusion_deps.sh - CUDA_VISIBLE_DEVICES="0,1" uv run coverage run -a --data-file=/opt/Megatron-Bridge/.coverage --source=/opt/Megatron-Bridge/ -m pytest \ -o log_cli=true \ -o log_cli_level=INFO \ From 657e01f61cfda79a141e44e143531fdeb2cfc79e Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 10:16:29 +0000 Subject: [PATCH 04/22] build(ci): verify diffusion codec wheels Signed-off-by: svcnemo-autobot --- docker/Dockerfile.ci | 6 ++++-- docker/diffusion-codecs.txt | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 docker/diffusion-codecs.txt diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 7a71af2d29..c72585161d 100644 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -105,6 +105,7 @@ RUN --mount=type=bind,source=docker/patches/deepep.patch,target=/opt/deepep.patc fi COPY pyproject.toml uv.lock /opt/Megatron-Bridge/ +COPY docker/diffusion-codecs.txt /opt/Megatron-Bridge/docker/diffusion-codecs.txt COPY src/megatron/bridge/__init__.py src/megatron/bridge/package_info.py /opt/Megatron-Bridge/src/megatron/bridge/ COPY 3rdparty/Megatron-LM/pyproject.toml 3rdparty/Megatron-LM/setup.py /opt/Megatron-Bridge/3rdparty/Megatron-LM/ COPY 3rdparty/Megatron-LM/megatron/training/__init__.py /opt/Megatron-Bridge/3rdparty/Megatron-LM/megatron/training/ @@ -139,8 +140,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ uv sync --locked --only-group build && \ uv sync --link-mode copy --locked --all-extras --all-groups --no-group diffusion; \ fi && \ - # Diffusion tests run without package-index access, so bake their opt-in codecs into the CI image. - uv pip install --no-config imageio imageio-ffmpeg av easydict && \ + # Diffusion tests run without package-index access, so bake their reviewed wheels into the CI image. + uv pip install --no-config --no-deps --require-hashes --only-binary=:all: \ + -r docker/diffusion-codecs.txt && \ # Create symlink for tilelang's libcudart_stub.so to the actual libcudart.so # Otherwise, the stub will be called in some cases and fail ln -sf "$(ldconfig -p | awk '/libcudart\.so\.[0-9]+ /{print $NF; exit}')" /opt/venv/lib/python3.12/site-packages/tilelang/lib/libcudart_stub.so && \ diff --git a/docker/diffusion-codecs.txt b/docker/diffusion-codecs.txt new file mode 100644 index 0000000000..ff26d1e880 --- /dev/null +++ b/docker/diffusion-codecs.txt @@ -0,0 +1,9 @@ +# Hashes correspond to the reviewed CPython 3.12-compatible Linux x86_64 wheels. +av==18.0.0 \ + --hash=sha256:ae56b40b6f8b067a8ad2dac664fbfbabac7f7a55b9a7bb031eb99289252bc017 +imageio==2.37.4 \ + --hash=sha256:1ab2e22c8debf700f24c3ac43e8f95f3b3a8110c83b93411e97b4b0b2cd1c7e6 +imageio-ffmpeg==0.6.0 \ + --hash=sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282 +easydict==1.13 \ + --hash=sha256:6b787daf4dcaf6377b4ad9403a5cee5a86adbc0ca9a5bcf5410e9902002aeac2 From 25191b112425efacade37274c1b03463e088e5c4 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 13:03:48 +0000 Subject: [PATCH 05/22] fix(ci): allow reviewed ARM64 codec wheel Signed-off-by: svcnemo-autobot --- docker/diffusion-codecs.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/diffusion-codecs.txt b/docker/diffusion-codecs.txt index ff26d1e880..ead3859140 100644 --- a/docker/diffusion-codecs.txt +++ b/docker/diffusion-codecs.txt @@ -1,9 +1,10 @@ -# Hashes correspond to the reviewed CPython 3.12-compatible Linux x86_64 wheels. +# Hashes correspond to reviewed CPython 3.12-compatible Linux wheels. av==18.0.0 \ --hash=sha256:ae56b40b6f8b067a8ad2dac664fbfbabac7f7a55b9a7bb031eb99289252bc017 imageio==2.37.4 \ --hash=sha256:1ab2e22c8debf700f24c3ac43e8f95f3b3a8110c83b93411e97b4b0b2cd1c7e6 imageio-ffmpeg==0.6.0 \ + --hash=sha256:1d47bebd83d2c5fc770720d211855f208af8a596c82d17730aa51e815cdee6dc \ --hash=sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282 easydict==1.13 \ --hash=sha256:6b787daf4dcaf6377b4ad9403a5cee5a86adbc0ca9a5bcf5410e9902002aeac2 From 52e44216eb76a740a86409ee045b801c45a4d997 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 14:50:46 +0000 Subject: [PATCH 06/22] fix(ci): allow reviewed ARM64 av wheel Signed-off-by: svcnemo-autobot --- docker/diffusion-codecs.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/diffusion-codecs.txt b/docker/diffusion-codecs.txt index ead3859140..3cfd3b62f0 100644 --- a/docker/diffusion-codecs.txt +++ b/docker/diffusion-codecs.txt @@ -1,5 +1,6 @@ # Hashes correspond to reviewed CPython 3.12-compatible Linux wheels. av==18.0.0 \ + --hash=sha256:4d683b7747a0ba9222b8a5f81e41db5f796e7f64473454ec4fe2548e083c2fa0 \ --hash=sha256:ae56b40b6f8b067a8ad2dac664fbfbabac7f7a55b9a7bb031eb99289252bc017 imageio==2.37.4 \ --hash=sha256:1ab2e22c8debf700f24c3ac43e8f95f3b3a8110c83b93411e97b4b0b2cd1c7e6 From a8ecb16bdf6a4bf19360a10cee975c67109cf5a7 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Wed, 29 Jul 2026 19:47:17 +0000 Subject: [PATCH 07/22] chore(deps): update MCore main and dev commits Signed-off-by: svcnemo-autobot --- .dev.commit | 2 +- .main.commit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.dev.commit b/.dev.commit index 0b03684ed7..ca8bf7cbd1 100644 --- a/.dev.commit +++ b/.dev.commit @@ -1 +1 @@ -0e6ac576fba8995fca541ceb6af5f35eb0e4f16e +dd06466adcdda3a01065d852410f95cdd15eba7b diff --git a/.main.commit b/.main.commit index b88629dd3a..ad0bab1eea 100644 --- a/.main.commit +++ b/.main.commit @@ -1 +1 @@ -cd4afffa648426a959dc7cb1e24b5ce7d0c3ff54 +c7d186578c510f00f39571345fd9f7d8a9e18f06 From 89114ee978dd92c1e453fc2cd88c813bedfd6823 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 02:04:14 +0000 Subject: [PATCH 08/22] fix(ci): skip MCore setuptools helper import Signed-off-by: svcnemo-autobot --- docker/common/import_check_skip.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/common/import_check_skip.txt b/docker/common/import_check_skip.txt index fbf2373f7a..13ebacb1ce 100644 --- a/docker/common/import_check_skip.txt +++ b/docker/common/import_check_skip.txt @@ -35,3 +35,6 @@ rec2idx # Pytest plugin shipped by `hypothesis`; eagerly imports `pytest`, which is not # installed in the fw_base/fw_final runtime venvs (test-time-only dependency): _hypothesis_pytestplugin + +# MCore's setuptools build helper executes setup() when imported; it is not a runtime module: +setup From b5e4b8afe0fde43711549113b26e1e469cdbc4c5 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 10:40:48 +0000 Subject: [PATCH 09/22] fix(conversion): use installed NeMo Run Signed-off-by: svcnemo-autobot --- scripts/conversion/convert.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/conversion/convert.sh b/scripts/conversion/convert.sh index 8622ba7980..b9878cb035 100755 --- a/scripts/conversion/convert.sh +++ b/scripts/conversion/convert.sh @@ -43,14 +43,14 @@ if [[ ${expect_executor_value} == true ]]; then fi if [[ -n "${VIRTUAL_ENV:-}" ]]; then - UV_ARGS=(--no-project --active --with nemo-run==0.10.0) + UV_ARGS=(--no-project --active) elif [[ ${executor} == slurm ]]; then # The Slurm head-node launcher only needs NeMo Run; model dependencies live # in the submitted container. - UV_ARGS=(--no-project --with nemo-run==0.10.0) + UV_ARGS=(--no-project --with nemo-run) else # Local execution runs the conversion worker in the project environment. - UV_ARGS=(--with nemo-run==0.10.0) + UV_ARGS=(--with nemo-run) fi exec uv run "${UV_ARGS[@]}" python "${SCRIPT_DIR}/setup_conversion.py" "$@" From d1c339e9087a608e816612aa66130f149d4b50f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 30 Jul 2026 11:06:50 +0000 Subject: [PATCH 10/22] fix(tests): prefer staged Qwen media fixtures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- tests/functional_tests/fixture_utils.py | 35 +++++++++++++++++++ .../converter/test_generate_vlm_from_hf.py | 10 ++++-- .../qwen_audio/test_qwen2_audio_generation.py | 9 ++++- .../qwen_vl/test_qwen3_vl_generation.py | 8 ++++- tests/unit_tests/test_fixture_utils.py | 32 +++++++++++++++++ 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 tests/functional_tests/fixture_utils.py create mode 100644 tests/unit_tests/test_fixture_utils.py diff --git a/tests/functional_tests/fixture_utils.py b/tests/functional_tests/fixture_utils.py new file mode 100644 index 0000000000..e320a39bf3 --- /dev/null +++ b/tests/functional_tests/fixture_utils.py @@ -0,0 +1,35 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from pathlib import Path + + +DEFAULT_TEST_DATA_ROOT = Path("/home/TestData") +TEST_DATA_ROOT_ENV = "NEMO_TEST_DATA_ROOT" + + +def resolve_test_data_file(relative_path: str | Path, fallback: str) -> str: + """Resolve a staged TestData file before using its egress fallback. + + Args: + relative_path: File path relative to the TestData root. + fallback: Value to use when the staged file is unavailable. + + Returns: + The staged file path when it exists, otherwise ``fallback``. + """ + test_data_root = Path(os.environ.get(TEST_DATA_ROOT_ENV) or DEFAULT_TEST_DATA_ROOT) + staged_path = test_data_root / relative_path + return str(staged_path) if staged_path.is_file() else fallback diff --git a/tests/functional_tests/test_groups/converter/test_generate_vlm_from_hf.py b/tests/functional_tests/test_groups/converter/test_generate_vlm_from_hf.py index 4ffe45a6c5..f6c724dcc8 100644 --- a/tests/functional_tests/test_groups/converter/test_generate_vlm_from_hf.py +++ b/tests/functional_tests/test_groups/converter/test_generate_vlm_from_hf.py @@ -22,13 +22,19 @@ import pytest +from tests.functional_tests.fixture_utils import resolve_test_data_file + class TestGenerateVLMFromHF: @pytest.mark.run_only_on("GPU") def test_generate_vlm(self): """ - Run distributed VLM generation on a small instruct model with an image URL. + Run distributed VLM generation on a small instruct model with an image fixture. """ + image_path = resolve_test_data_file( + "megatron_bridge/assets/demo.jpeg", + "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", + ) cmd = [ "python", "-m", @@ -45,7 +51,7 @@ def test_generate_vlm(self): "--hf_model_path", "Qwen/Qwen2.5-VL-3B-Instruct", "--image_path", - "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", + image_path, "--prompt", "Describe this image.", "--tp", diff --git a/tests/functional_tests/test_groups/models/qwen_audio/test_qwen2_audio_generation.py b/tests/functional_tests/test_groups/models/qwen_audio/test_qwen2_audio_generation.py index de8012828a..44dc6a324e 100644 --- a/tests/functional_tests/test_groups/models/qwen_audio/test_qwen2_audio_generation.py +++ b/tests/functional_tests/test_groups/models/qwen_audio/test_qwen2_audio_generation.py @@ -34,6 +34,8 @@ import torch from transformers import AutoTokenizer, Qwen2AudioConfig, Qwen2AudioForConditionalGeneration +from tests.functional_tests.fixture_utils import resolve_test_data_file + HF_QWEN2_AUDIO_TOY_MODEL_CONFIG = { "architectures": ["Qwen2AudioForConditionalGeneration"], @@ -150,6 +152,11 @@ def test_qwen2_audio_generation(self, qwen2_audio_toy_model_path): Args: qwen2_audio_toy_model_path: Path to the toy Qwen2 Audio model (from fixture) """ + audio_path = resolve_test_data_file( + "megatron_bridge/assets/glass-breaking-151256.mp3", + "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3", + ) + audio_option = "--audio_url" if audio_path.startswith(("http://", "https://")) else "--audio_path" cmd = [ sys.executable, "-m", @@ -157,7 +164,7 @@ def test_qwen2_audio_generation(self, qwen2_audio_toy_model_path): "--nproc_per_node=2", "examples/conversion/hf_to_megatron_generate_audio_lm.py", f"--hf_model_path={qwen2_audio_toy_model_path}", - "--audio_url=https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3", + f"{audio_option}={audio_path}", "--prompt=What's that sound?", "--tp=2", "--max_new_tokens=50", diff --git a/tests/functional_tests/test_groups/models/qwen_vl/test_qwen3_vl_generation.py b/tests/functional_tests/test_groups/models/qwen_vl/test_qwen3_vl_generation.py index f9851705d4..0ee02a7ec1 100644 --- a/tests/functional_tests/test_groups/models/qwen_vl/test_qwen3_vl_generation.py +++ b/tests/functional_tests/test_groups/models/qwen_vl/test_qwen3_vl_generation.py @@ -42,6 +42,8 @@ ) from transformers.models.qwen3_vl import Qwen3VLConfig +from tests.functional_tests.fixture_utils import resolve_test_data_file + HF_QWEN3_VL_TOY_MODEL_CONFIG = { "architectures": ["Qwen3VLForConditionalGeneration"], @@ -325,6 +327,10 @@ def test_qwen3_vl_8b_image_generation(self, qwen3_vl_toy_model_path): Args: qwen3_vl_toy_model_path: Path to the toy Qwen3 VL model (from fixture) """ + image_path = resolve_test_data_file( + "megatron_bridge/assets/demo.jpeg", + "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", + ) cmd = [ "python", "-m", @@ -332,7 +338,7 @@ def test_qwen3_vl_8b_image_generation(self, qwen3_vl_toy_model_path): "--nproc_per_node=2", "examples/conversion/hf_to_megatron_generate_vlm.py", f"--hf_model_path={qwen3_vl_toy_model_path}", - "--image_path=https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", + f"--image_path={image_path}", "--prompt=Describe this image.", ] diff --git a/tests/unit_tests/test_fixture_utils.py b/tests/unit_tests/test_fixture_utils.py new file mode 100644 index 0000000000..d43915f044 --- /dev/null +++ b/tests/unit_tests/test_fixture_utils.py @@ -0,0 +1,32 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from tests.functional_tests.fixture_utils import TEST_DATA_ROOT_ENV, resolve_test_data_file + + +def test_resolve_test_data_file_prefers_staged_file(monkeypatch, tmp_path): + relative_path = "megatron_bridge/assets/demo.jpeg" + staged_path = tmp_path / relative_path + staged_path.parent.mkdir(parents=True) + staged_path.write_bytes(b"fixture") + monkeypatch.setenv(TEST_DATA_ROOT_ENV, str(tmp_path)) + + assert resolve_test_data_file(relative_path, "https://example.com/demo.jpeg") == str(staged_path) + + +def test_resolve_test_data_file_uses_fallback_when_staged_file_is_missing(monkeypatch, tmp_path): + fallback = "https://example.com/demo.jpeg" + monkeypatch.setenv(TEST_DATA_ROOT_ENV, str(tmp_path)) + + assert resolve_test_data_file("megatron_bridge/assets/demo.jpeg", fallback) == fallback From a8b966fb7caf651bb21bae31b0740c36d7324b6a Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 11:15:47 +0000 Subject: [PATCH 11/22] fix(conversion): support installed NeMo Run executor Signed-off-by: svcnemo-autobot --- scripts/conversion/setup_conversion.py | 5 +++-- .../conversion/launcher/test_setup_conversion.py | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/scripts/conversion/setup_conversion.py b/scripts/conversion/setup_conversion.py index 4c13c536d3..31183b799b 100755 --- a/scripts/conversion/setup_conversion.py +++ b/scripts/conversion/setup_conversion.py @@ -149,12 +149,13 @@ def _build_executor( task_count = args.gpus_per_node if args.device == "gpu" else 1 launcher = run.Torchrun() if args.executor == "local" and args.device == "gpu" else None if args.executor == "local": - return run.LocalExecutor( - nodes=1, + executor = run.LocalExecutor( ntasks_per_node=task_count, launcher=launcher, packager=run.Packager(), ) + executor.nodes = 1 + return executor gpu_kwargs = {} if args.device == "gpu" and not args.no_gpu_resource_request: diff --git a/tests/unit_tests/conversion/launcher/test_setup_conversion.py b/tests/unit_tests/conversion/launcher/test_setup_conversion.py index eefc875507..8b38aaf750 100644 --- a/tests/unit_tests/conversion/launcher/test_setup_conversion.py +++ b/tests/unit_tests/conversion/launcher/test_setup_conversion.py @@ -257,7 +257,13 @@ def test_local_cpu_executor_uses_one_process_without_launcher(): module = _load_setup_conversion_module() captured = {} module.run.Packager = lambda: "packager" - module.run.LocalExecutor = lambda **kwargs: captured.update(kwargs) or types.SimpleNamespace(**kwargs) + + def local_executor(**kwargs): + assert "nodes" not in kwargs + captured.update(kwargs) + return types.SimpleNamespace(**kwargs) + + module.run.LocalExecutor = local_executor args = _parse(module) executor = module._build_executor(args, [], []) From 1f916d039ab44b55ccc815aa5194a43aecb42c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 30 Jul 2026 11:20:40 +0000 Subject: [PATCH 12/22] fix(tests): prefer staged Megatron-LM release assets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- tests/functional_tests/fixture_utils.py | 8 +- .../data/download_unit_tests_dataset.py | 96 ++++++++++++------- .../test_download_unit_tests_dataset.py | 70 ++++++++++++++ 3 files changed, 140 insertions(+), 34 deletions(-) create mode 100644 tests/unit_tests/test_download_unit_tests_dataset.py diff --git a/tests/functional_tests/fixture_utils.py b/tests/functional_tests/fixture_utils.py index e320a39bf3..3ddf122d26 100644 --- a/tests/functional_tests/fixture_utils.py +++ b/tests/functional_tests/fixture_utils.py @@ -20,6 +20,11 @@ TEST_DATA_ROOT_ENV = "NEMO_TEST_DATA_ROOT" +def get_test_data_root() -> Path: + """Return the configured shared TestData root.""" + return Path(os.environ.get(TEST_DATA_ROOT_ENV) or DEFAULT_TEST_DATA_ROOT) + + def resolve_test_data_file(relative_path: str | Path, fallback: str) -> str: """Resolve a staged TestData file before using its egress fallback. @@ -30,6 +35,5 @@ def resolve_test_data_file(relative_path: str | Path, fallback: str) -> str: Returns: The staged file path when it exists, otherwise ``fallback``. """ - test_data_root = Path(os.environ.get(TEST_DATA_ROOT_ENV) or DEFAULT_TEST_DATA_ROOT) - staged_path = test_data_root / relative_path + staged_path = get_test_data_root() / relative_path return str(staged_path) if staged_path.is_file() else fallback diff --git a/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py b/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py index c3dec1540d..f141efa6cc 100644 --- a/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py +++ b/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py @@ -28,6 +28,54 @@ import requests from github import Github +from tests.functional_tests.fixture_utils import get_test_data_root + + +DEFAULT_REPO_NAME = "NVIDIA/Megatron-LM" +STAGED_RELEASE_ASSETS = ( + Path("megatron_bridge/release-assets/megatron-lm/v2.5/datasets.zip"), + Path("megatron_bridge/release-assets/megatron-lm/v2.5/tokenizers.zip"), +) + + +def extract_asset(asset_path: Path, assets_dir: Path) -> bool: + """Extract a release asset into the writable test data directory.""" + try: + print(f" Extracting {asset_path.name} to {assets_dir}...") + + if asset_path.name.endswith(".zip"): + with zipfile.ZipFile(asset_path, "r") as zip_ref: + zip_ref.extractall(assets_dir) + elif asset_path.name.endswith((".tar.gz", ".tgz")): + with tarfile.open(asset_path, "r:gz") as tar_ref: + tar_ref.extractall(assets_dir) + elif asset_path.name.endswith(".tar"): + with tarfile.open(asset_path, "r") as tar_ref: + tar_ref.extractall(assets_dir) + else: + print(f" Warning: Unknown file type for {asset_path.name}, skipping extraction") + return False + + print(f" Successfully extracted to {assets_dir}") + return True + + except Exception as e: + print(f" Error extracting {asset_path.name}: {e}") + return False + + +def extract_staged_release_assets(repo_name: str, assets_dir: Path) -> bool: + """Extract staged Megatron-LM v2.5 assets when all of them are available.""" + if repo_name != DEFAULT_REPO_NAME: + return False + + staged_assets = tuple(get_test_data_root() / relative_path for relative_path in STAGED_RELEASE_ASSETS) + if not all(asset_path.is_file() for asset_path in staged_assets): + return False + + print(f"Using staged release assets from {staged_assets[0].parent}") + return all(extract_asset(asset_path, assets_dir) for asset_path in staged_assets) + def download_and_extract_asset(asset_url: str, asset_name: str, assets_dir: Path) -> bool: """ @@ -41,45 +89,29 @@ def download_and_extract_asset(asset_url: str, asset_name: str, assets_dir: Path Returns: bool: True if successful, False otherwise """ + temp_file = assets_dir / asset_name try: # Download the asset print(f" Downloading {asset_name}...") - response = requests.get(asset_url, stream=True) + response = requests.get(asset_url, stream=True, timeout=60) response.raise_for_status() # Save to temporary file - temp_file = assets_dir / asset_name with open(temp_file, "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) - print(f" Extracting {asset_name} to {assets_dir}...") - - # Extract based on file type - if asset_name.endswith(".zip"): - with zipfile.ZipFile(temp_file, "r") as zip_ref: - zip_ref.extractall(assets_dir) - elif asset_name.endswith((".tar.gz", ".tgz")): - with tarfile.open(temp_file, "r:gz") as tar_ref: - tar_ref.extractall(assets_dir) - elif asset_name.endswith(".tar"): - with tarfile.open(temp_file, "r") as tar_ref: - tar_ref.extractall(assets_dir) - else: - print(f" Warning: Unknown file type for {asset_name}, skipping extraction") - return False - - # Clean up temporary file - temp_file.unlink() - print(f" Successfully extracted to {assets_dir}") - return True + return extract_asset(temp_file, assets_dir) except Exception as e: print(f" Error downloading/extracting {asset_name}: {e}") return False + finally: + if temp_file.is_file(): + temp_file.unlink() -def get_oldest_release_and_assets(repo_name: str = "NVIDIA/Megatron-LM", assets_dir: str = "assets") -> None: +def get_oldest_release_and_assets(repo_name: str = DEFAULT_REPO_NAME, assets_dir: str = "assets") -> None: """ Fetch the oldest release of a GitHub repository and list its assets. @@ -88,12 +120,15 @@ def get_oldest_release_and_assets(repo_name: str = "NVIDIA/Megatron-LM", assets_ assets_dir: Directory to extract assets to """ try: - # Initialize GitHub client - token = os.getenv("GH_TOKEN", None) - if token is None: - raise ValueError("GH_TOKEN environment variable is not set") + assets_path = Path(assets_dir) + assets_path.mkdir(parents=True, exist_ok=True) + + if extract_staged_release_assets(repo_name, assets_path): + return - g = Github(login_or_token=token) + # Initialize an authenticated GitHub client when a token is available. + token = os.getenv("GH_TOKEN", None) + g = Github(login_or_token=token) if token else Github() # Get the repository repo = g.get_repo(repo_name) @@ -161,9 +196,6 @@ def get_oldest_release_and_assets(repo_name: str = "NVIDIA/Megatron-LM", assets_ print("-" * 80) print("Downloading and extracting assets...") - # Create assets directory - assets_path = Path(assets_dir) - assets_path.mkdir(parents=True, exist_ok=True) print(f"Created assets directory: {assets_path.absolute()}") successful_downloads = 0 @@ -182,7 +214,7 @@ def get_oldest_release_and_assets(repo_name: str = "NVIDIA/Megatron-LM", assets_ @click.command() -@click.option("--repo", default="NVIDIA/Megatron-LM", help="GitHub repository name (format: owner/repo)") +@click.option("--repo", default=DEFAULT_REPO_NAME, help="GitHub repository name (format: owner/repo)") @click.option("--assets-dir", default="assets", help="Directory to extract assets to") def main(repo, assets_dir): """Fetch the oldest release of a GitHub repository and download its assets.""" diff --git a/tests/unit_tests/test_download_unit_tests_dataset.py b/tests/unit_tests/test_download_unit_tests_dataset.py new file mode 100644 index 0000000000..3f44884171 --- /dev/null +++ b/tests/unit_tests/test_download_unit_tests_dataset.py @@ -0,0 +1,70 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from types import SimpleNamespace +from unittest.mock import MagicMock +from zipfile import ZipFile + +from tests.functional_tests import fixture_utils +from tests.functional_tests.test_groups.data import download_unit_tests_dataset + + +def test_get_oldest_release_prefers_staged_assets(monkeypatch, tmp_path): + staged_root = tmp_path / "staged" + output_root = tmp_path / "output" + for relative_path in download_unit_tests_dataset.STAGED_RELEASE_ASSETS: + staged_asset = staged_root / relative_path + staged_asset.parent.mkdir(parents=True, exist_ok=True) + with ZipFile(staged_asset, "w") as archive: + archive.writestr(f"{staged_asset.stem}/fixture.txt", staged_asset.name) + + monkeypatch.setenv(fixture_utils.TEST_DATA_ROOT_ENV, str(staged_root)) + github = MagicMock(side_effect=AssertionError("GitHub fallback should not be used")) + monkeypatch.setattr(download_unit_tests_dataset, "Github", github) + + download_unit_tests_dataset.get_oldest_release_and_assets(assets_dir=str(output_root)) + + assert (output_root / "datasets" / "fixture.txt").read_text() == "datasets.zip" + assert (output_root / "tokenizers" / "fixture.txt").read_text() == "tokenizers.zip" + github.assert_not_called() + + +def test_get_oldest_release_falls_back_without_github_token(monkeypatch, tmp_path): + release = SimpleNamespace( + tag_name="v2.5", + title="Megatron-LM v2.5", + created_at=0, + published_at=0, + draft=False, + prerelease=False, + html_url="https://github.com/NVIDIA/Megatron-LM/releases/tag/v2.5", + body="", + get_assets=lambda: [], + ) + repo = SimpleNamespace( + full_name="NVIDIA/Megatron-LM", + description="Megatron-LM", + html_url="https://github.com/NVIDIA/Megatron-LM", + get_releases=lambda: [release], + ) + github = MagicMock() + github.return_value.get_repo.return_value = repo + + monkeypatch.setenv(fixture_utils.TEST_DATA_ROOT_ENV, str(tmp_path / "missing")) + monkeypatch.delenv("GH_TOKEN", raising=False) + monkeypatch.setattr(download_unit_tests_dataset, "Github", github) + + download_unit_tests_dataset.get_oldest_release_and_assets(assets_dir=str(tmp_path / "output")) + + github.assert_called_once_with() From a54973d87b4bb0dc7b0f1b4b43771a810e1042a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 30 Jul 2026 11:25:24 +0000 Subject: [PATCH 13/22] fix(tests): share Megatron-LM release fixture path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: oliver könig --- .../test_groups/data/download_unit_tests_dataset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py b/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py index f141efa6cc..4f0be34455 100644 --- a/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py +++ b/tests/functional_tests/test_groups/data/download_unit_tests_dataset.py @@ -33,8 +33,8 @@ DEFAULT_REPO_NAME = "NVIDIA/Megatron-LM" STAGED_RELEASE_ASSETS = ( - Path("megatron_bridge/release-assets/megatron-lm/v2.5/datasets.zip"), - Path("megatron_bridge/release-assets/megatron-lm/v2.5/tokenizers.zip"), + Path("megatron-lm/release-assets/v2.5/datasets.zip"), + Path("megatron-lm/release-assets/v2.5/tokenizers.zip"), ) From 6dfa944f670e66539fa66f8fe3da71c258cee25e Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 16:24:04 +0000 Subject: [PATCH 14/22] fix(ernie): accept MCore rotary keyword arguments Signed-off-by: svcnemo-autobot --- .../bridge/models/ernie_vl/modeling_ernie45_vl/model.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py b/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py index 53233d611a..668975c485 100644 --- a/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py +++ b/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py @@ -167,6 +167,8 @@ def forward( position_ids: torch.Tensor, mrope_section, cp_group=None, + return_raw_freqs: bool = False, + packed_seq: bool = False, ) -> Tensor: """Compute ERNIE-style interleaved M-RoPE embeddings. @@ -175,10 +177,13 @@ def forward( mrope_section: Ignored (kept for API compatibility). ERNIE uses freq_allocation instead. cp_group: Context parallel group. + return_raw_freqs: Ignored because ERNIE uses interleaved rotary embeddings. + packed_seq: Ignored because ERNIE returns materialized rotary embeddings. Returns: Tensor: RoPE embedding of shape [seq_len, batch, 1, head_dim]. """ + del return_raw_freqs, packed_seq device = self.inv_freq.device seq = position_ids.to(device=device, dtype=self.inv_freq.dtype) # seq: [3, bs, seq_len] From c35f218496d9920eec5e7bdd2eb71292a9c7ce4e Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 19:58:49 +0000 Subject: [PATCH 15/22] chore(compat): drop superseded diffusion setup Signed-off-by: svcnemo-autobot --- docker/Dockerfile.ci | 4 ---- docker/diffusion-codecs.txt | 11 ----------- pyproject.toml | 17 +++++++++-------- scripts/install_diffusion_deps.sh | 9 +++++---- tests/unit_tests/Launch_Unit_Tests_Diffusion.sh | 4 ++++ 5 files changed, 18 insertions(+), 27 deletions(-) delete mode 100644 docker/diffusion-codecs.txt diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index c72585161d..6673d7e8e8 100644 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -105,7 +105,6 @@ RUN --mount=type=bind,source=docker/patches/deepep.patch,target=/opt/deepep.patc fi COPY pyproject.toml uv.lock /opt/Megatron-Bridge/ -COPY docker/diffusion-codecs.txt /opt/Megatron-Bridge/docker/diffusion-codecs.txt COPY src/megatron/bridge/__init__.py src/megatron/bridge/package_info.py /opt/Megatron-Bridge/src/megatron/bridge/ COPY 3rdparty/Megatron-LM/pyproject.toml 3rdparty/Megatron-LM/setup.py /opt/Megatron-Bridge/3rdparty/Megatron-LM/ COPY 3rdparty/Megatron-LM/megatron/training/__init__.py /opt/Megatron-Bridge/3rdparty/Megatron-LM/megatron/training/ @@ -140,9 +139,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ uv sync --locked --only-group build && \ uv sync --link-mode copy --locked --all-extras --all-groups --no-group diffusion; \ fi && \ - # Diffusion tests run without package-index access, so bake their reviewed wheels into the CI image. - uv pip install --no-config --no-deps --require-hashes --only-binary=:all: \ - -r docker/diffusion-codecs.txt && \ # Create symlink for tilelang's libcudart_stub.so to the actual libcudart.so # Otherwise, the stub will be called in some cases and fail ln -sf "$(ldconfig -p | awk '/libcudart\.so\.[0-9]+ /{print $NF; exit}')" /opt/venv/lib/python3.12/site-packages/tilelang/lib/libcudart_stub.so && \ diff --git a/docker/diffusion-codecs.txt b/docker/diffusion-codecs.txt deleted file mode 100644 index 3cfd3b62f0..0000000000 --- a/docker/diffusion-codecs.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Hashes correspond to reviewed CPython 3.12-compatible Linux wheels. -av==18.0.0 \ - --hash=sha256:4d683b7747a0ba9222b8a5f81e41db5f796e7f64473454ec4fe2548e083c2fa0 \ - --hash=sha256:ae56b40b6f8b067a8ad2dac664fbfbabac7f7a55b9a7bb031eb99289252bc017 -imageio==2.37.4 \ - --hash=sha256:1ab2e22c8debf700f24c3ac43e8f95f3b3a8110c83b93411e97b4b0b2cd1c7e6 -imageio-ffmpeg==0.6.0 \ - --hash=sha256:1d47bebd83d2c5fc770720d211855f208af8a596c82d17730aa51e815cdee6dc \ - --hash=sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282 -easydict==1.13 \ - --hash=sha256:6b787daf4dcaf6377b4ad9403a5cee5a86adbc0ca9a5bcf5410e9902002aeac2 diff --git a/pyproject.toml b/pyproject.toml index 693a970a2e..af10bc752e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,9 +123,9 @@ no-build-isolation-package = [ ] prerelease = "allow" override-dependencies = [ - "av; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments - "imageio; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments - "imageio-ffmpeg; sys_platform == 'never'", # CVE: WAN-only codec; installed explicitly in the CI image and opt-in environments + "av; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh + "imageio; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh + "imageio-ffmpeg; sys_platform == 'never'", # CVE: WAN-only codec; excluded from build, installed at test time via scripts/install_diffusion_deps.sh "torch; sys_platform == 'never'", "torchvision; sys_platform == 'never'", "triton; sys_platform == 'never'", @@ -245,11 +245,12 @@ build = [ "nvidia-cudnn-frontend>=1.25.0", ] # CVE-carrying WAN diffusion codecs, needed only by WAN video caching -# (src/megatron/bridge/diffusion/models/wan/inference/utils.py). The [tool.uv] -# override-dependencies above keeps them out of the default project sync. Dockerfile.ci -# installs them explicitly for offline CI, while scripts/install_diffusion_deps.sh supports -# opt-in environments. This group is kept for documentation only; -# `uv sync --group diffusion` will NOT install them on Linux. +# (src/megatron/bridge/diffusion/models/wan/inference/utils.py). All three are suppressed +# in the default build by the [tool.uv] override-dependencies above (each marked +# `sys_platform == 'never'`), so they are never installed and appear only as `never`-marked +# edges in uv.lock — keeping them out of both the image and SBOM/manifest scans. Install +# them at test time with scripts/install_diffusion_deps.sh. This group is kept for +# documentation only; `uv sync --group diffusion` will NOT install them on Linux. diffusion = ["imageio", "imageio-ffmpeg", "av"] # flash-mla has no PyPI wheel and is built from source by uv (no-build-isolation) during the # image's `uv sync --all-groups`. Megatron-LM declares it in the same group, but uv does not diff --git a/scripts/install_diffusion_deps.sh b/scripts/install_diffusion_deps.sh index 8532650043..c3f7b0acfd 100644 --- a/scripts/install_diffusion_deps.sh +++ b/scripts/install_diffusion_deps.sh @@ -13,10 +13,11 @@ # limitations under the License. #!/usr/bin/env bash -# Install the WAN diffusion codecs (imageio, imageio-ffmpeg, av) into an opt-in -# environment. All three carry CVEs and are excluded from the default project sync via -# [tool.uv] override-dependencies (each marked `sys_platform == 'never'`). The CI image -# installs them explicitly so offline diffusion tests do not need this helper. +# Install the WAN diffusion codecs (imageio, imageio-ffmpeg, av) into the active +# environment at test time. All three carry CVEs and are excluded from the shipped +# container via [tool.uv] override-dependencies (each marked `sys_platform == 'never'`), +# so neither the build nor `uv sync` installs them and they appear only as `never`-marked +# edges in uv.lock. # # Install them directly with `uv pip install --no-config`: --no-config ignores the # project's [tool.uv] config, so the `sys_platform == 'never'` override does not diff --git a/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh b/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh index f5ab0c387b..efe4aace86 100644 --- a/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh +++ b/tests/unit_tests/Launch_Unit_Tests_Diffusion.sh @@ -25,6 +25,10 @@ if [ -f "/opt/Megatron-Bridge/.mcore_commit_sha" ]; then fi echo "" +# The 'diffusion' codecs (imageio/imageio-ffmpeg/av) are excluded from the shipped image; +# install them so the WAN video-caching unit test runs instead of skips. +bash /opt/Megatron-Bridge/scripts/install_diffusion_deps.sh + CUDA_VISIBLE_DEVICES="0,1" uv run coverage run -a --data-file=/opt/Megatron-Bridge/.coverage --source=/opt/Megatron-Bridge/ -m pytest \ -o log_cli=true \ -o log_cli_level=INFO \ From f7104fbfeff7b84313c96427c01166332ff62ca7 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 19:59:13 +0000 Subject: [PATCH 16/22] chore(deps): refresh MCore main and dev commits Signed-off-by: svcnemo-autobot --- .dev.commit | 2 +- .main.commit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.dev.commit b/.dev.commit index ca8bf7cbd1..c97bfe97a8 100644 --- a/.dev.commit +++ b/.dev.commit @@ -1 +1 @@ -dd06466adcdda3a01065d852410f95cdd15eba7b +95e4bafebaa799d166975ef82066a3c46648e004 diff --git a/.main.commit b/.main.commit index ad0bab1eea..1d8ed2822b 100644 --- a/.main.commit +++ b/.main.commit @@ -1 +1 @@ -c7d186578c510f00f39571345fd9f7d8a9e18f06 +175b4ccdfe386ff2fe497c5496ca5e999f47d9fa From fb5300f9e1d8659b919d23026649670e755c1a23 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 20:55:06 +0000 Subject: [PATCH 17/22] chore(deps): refresh MCore dev validation lock Signed-off-by: svcnemo-autobot --- 3rdparty/Megatron-LM | 2 +- uv.lock | 827 ++++++++++++++----------------------------- 2 files changed, 265 insertions(+), 564 deletions(-) diff --git a/3rdparty/Megatron-LM b/3rdparty/Megatron-LM index cd4afffa64..95e4bafeba 160000 --- a/3rdparty/Megatron-LM +++ b/3rdparty/Megatron-LM @@ -1 +1 @@ -Subproject commit cd4afffa648426a959dc7cb1e24b5ce7d0c3ff54 +Subproject commit 95e4bafebaa799d166975ef82066a3c46648e004 diff --git a/uv.lock b/uv.lock index 5ca4756186..f3e583ab77 100644 --- a/uv.lock +++ b/uv.lock @@ -150,18 +150,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3e/44/28dac80a8941b604f4da10ce21097614ca1bf905ce93dca28d8d7de9c1e7/aiohttp-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c", size = 448050, upload-time = "2026-07-23T01:54:47.087Z" }, ] -[[package]] -name = "aiohttp-cors" -version = "0.8.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/d89e846a5444b3d5eb8985a6ddb0daef3774928e1bfbce8e84ec97b0ffa7/aiohttp_cors-0.8.1.tar.gz", hash = "sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403", size = 38626, upload-time = "2025-03-31T14:16:20.048Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/3b/40a68de458904bcc143622015fff2352b6461cd92fd66d3527bf1c6f5716/aiohttp_cors-0.8.1-py3-none-any.whl", hash = "sha256:3180cf304c5c712d626b9162b195b1db7ddf976a2a25172b35bb2448b890a80d", size = 25231, upload-time = "2025-03-31T14:16:18.478Z" }, -] - [[package]] name = "aioitertools" version = "0.13.0" @@ -218,11 +206,11 @@ wheels = [ [[package]] name = "annotated-doc" -version = "0.0.4" +version = "0.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, ] [[package]] @@ -242,16 +230,15 @@ sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d [[package]] name = "anyio" -version = "4.9.0" +version = "4.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" }, + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, ] [[package]] @@ -389,6 +376,40 @@ 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 = "bitarray" +version = "3.9.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/71/dd598d2d546d11d7aca6cd25f05875e2dad194df0a663f1892690d4fb90d/bitarray-3.9.2.tar.gz", hash = "sha256:37342f81c8f8e10ee5d1e23d5eda2e8dbd9d8d3a9d90e8285181fad57f21cdc1", size = 160932, upload-time = "2026-07-25T06:39:21.234Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/c3/6d33775d73e22cfe3fe23dae2ed50dbabdb38ea651e8b5c983262c39ce26/bitarray-3.9.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c967be9bd2fadd58e0d2c4e139e6e7443b5dd9162e52e43ef5e2489218c4fecb", size = 156385, upload-time = "2026-07-25T06:37:43.505Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9f/24b22bfa3016fdd50966966f7dec0ecf11a911429be5178880228068e108/bitarray-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c17c918e569a81a2dd87794e15991c9643accf72b5c005e8791cdedcb2d6189", size = 152941, upload-time = "2026-07-25T06:37:44.64Z" }, + { url = "https://files.pythonhosted.org/packages/48/61/affb7fd0ce338529b57eea7d1fda983b4f4adde89eb7ea8e4201c4aa4e47/bitarray-3.9.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eea0dc21749eeb53b163d45c3dd0524e62c0301dd512bfb4f5ef34ccce7be6ad", size = 362020, upload-time = "2026-07-25T06:37:45.687Z" }, + { url = "https://files.pythonhosted.org/packages/31/e1/43f6eed3ae86d08c11eb424ad0c7ffd40bb081eb50c682c76adeead3ed0d/bitarray-3.9.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:64fb672905884fc236ef200b9fbde529c6673a8217c62bf8651bdce4842ba366", size = 382732, upload-time = "2026-07-25T06:37:47.212Z" }, + { url = "https://files.pythonhosted.org/packages/12/f1/cf664f54fef3c5c921e7133a2795201e508c2c984ffe7c0f3f851f2b976d/bitarray-3.9.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:be25330b9da322a806b29bae0147e6ea3730b6f85a5036e25f8e50247fee013a", size = 396696, upload-time = "2026-07-25T06:37:48.309Z" }, + { url = "https://files.pythonhosted.org/packages/35/fc/6d6409ec30dabd388b6f3ee6c461eae353f04d95dc287f7be19fffff8fcc/bitarray-3.9.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7e14fd457ccea13e0adca60d93ffcd17b70184e7f485a986523241a077f3ac9", size = 366507, upload-time = "2026-07-25T06:37:49.671Z" }, + { url = "https://files.pythonhosted.org/packages/37/47/d241a6dde522a213cd624a820e0be998b0e5548d141098e990bba03913cd/bitarray-3.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f719003b0d692d3088e8f783ec684bf7caf00bddb5392efbe7842ba1ff15e8e", size = 359937, upload-time = "2026-07-25T06:37:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/d3/a6/0f4dd5a813f87b79e07e4bece697e872f4836486fca92903c63cc75c42db/bitarray-3.9.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a72e6b82f1800a08dff90a9d401ffd3f8c278644e4f6711a7458c9f16ee9446e", size = 379627, upload-time = "2026-07-25T06:37:51.884Z" }, + { url = "https://files.pythonhosted.org/packages/cc/27/cbc55ea191b52710c19702cbbae7814ff55082b02a4c23aba11c23dd1990/bitarray-3.9.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d043ef192ae741f0524b3d3404a2e6e8dbb6affeda421d40d46456cf6cfa1064", size = 378404, upload-time = "2026-07-25T06:37:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/fc/70/20179544538444c0896099a10a035d857c2f4ce707a950834aa62d645714/bitarray-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:23fe97bfed91ae4c927871b779caa159000da958fe5521d92420a09ed524efdf", size = 363092, upload-time = "2026-07-25T06:37:54.796Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/c9b206363aad0239cf966ea4eefaaa0da2717cd695ac11af1effbe3819bb/bitarray-3.9.2-cp312-cp312-win32.whl", hash = "sha256:ff72bbdd7c01ca661cb6712e706c0e0f0bc45a6b2426f69e9517cf7508b8d294", size = 148523, upload-time = "2026-07-25T06:37:55.915Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/67f161485ba266ad76064405cd19dda50057f466d796b4ad9d9e2645b877/bitarray-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:12c2e7556f7d7f3d2a2017d66159790ed6cadf849a3aa436d9c3541dd3facd6c", size = 157829, upload-time = "2026-07-25T06:37:57.285Z" }, + { url = "https://files.pythonhosted.org/packages/58/cc/aefdf64e5c3b057538ed6e5f244fa055bc825b10cb3a08ead0895ba9ff67/bitarray-3.9.2-cp312-cp312-win_arm64.whl", hash = "sha256:76c0a98d85b2ed7090ff6c0fff9917a2ddffaffb82c2d0ce7d424f0830dc8dee", size = 153677, upload-time = "2026-07-25T06:37:58.332Z" }, +] + +[[package]] +name = "bitstring" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bitarray" }, + { name = "tibs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/d3/de6fe4e7065df8c2f1ac1766f5fdccbe75bc18af2cf2dbeecd34d68e1518/bitstring-4.4.0.tar.gz", hash = "sha256:e682ac522bb63e041d16cbc9d0ca86a4f00194db16d0847c7efe066f836b2e37", size = 255209, upload-time = "2026-03-10T20:29:14.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/02/1a870bab76f2896d827aa4963be95e56675ffa1453e53525d13c43036edf/bitstring-4.4.0-py3-none-any.whl", hash = "sha256:feac49524fcf3ef27e6081e86f02b10d2adf6c3773bf22fbe0e7eea9534bc737", size = 76846, upload-time = "2026-03-10T20:29:12.832Z" }, +] + [[package]] name = "blinker" version = "1.9.0" @@ -536,11 +557,11 @@ wheels = [ [[package]] name = "cloudpickle" -version = "3.0.0" +version = "3.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c8/72/42a6570fc61b1f8913529728ad314c7cf5961540728dcad22c33fb2db6b6/cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882", size = 21231, upload-time = "2023-10-16T12:51:26.352Z" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/43/dae06432d0c4b1dc9e9149ad37b4ca8384cf6eb7700cd9215b177b914f0a/cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7", size = 20088, upload-time = "2023-10-16T12:51:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, ] [[package]] @@ -552,18 +573,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] -[[package]] -name = "colorful" -version = "0.6.0a1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/50/8c88030d9d52787116ca3061a076f47492bb436128516e6c25f35743a565/colorful-0.6.0a1.tar.gz", hash = "sha256:b6a425600416213b852407bdac719830f8862e0ce377a75d78eb0de4966a0ccb", size = 204794, upload-time = "2019-09-04T18:47:17.405Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/47/c0838017b456191529eb890aab5fc48538435d81e19c38badfa762dcfd1d/colorful-0.6.0a1-py2.py3-none-any.whl", hash = "sha256:d9f9ae12c41e6711a882fe60c06ff379c3c7f29466dc0439e2e1480917473a2b", size = 202871, upload-time = "2019-09-04T18:47:15.726Z" }, -] - [[package]] name = "comet-ml" version = "3.58.4" @@ -599,15 +608,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/c4/0679472c60052c27efa612b4cd3ddd2a23e885dcdc73461781d2c802d39e/configobj-5.0.9-py2.py3-none-any.whl", hash = "sha256:1ba10c5b6ee16229c79a05047aeda2b55eb4e80d7c7d8ecf17ec1ca600c79882", size = 35615, upload-time = "2024-11-26T14:03:32.972Z" }, ] -[[package]] -name = "contextlib2" -version = "21.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/13/37ea7805ae3057992e96ecb1cffa2fa35c2ef4498543b846f90dd2348d8f/contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869", size = 43795, upload-time = "2021-06-27T06:54:40.841Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/56/6d6872f79d14c0cb02f1646cbb4592eef935857c0951a105874b7b62a0c3/contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f", size = 13277, upload-time = "2021-06-27T06:54:20.972Z" }, -] - [[package]] name = "contourpy" version = "1.3.3" @@ -733,15 +733,14 @@ wheels = [ [[package]] name = "cuda-tile" -version = "1.5.0" +version = "1.6.0rc1" source = { registry = "https://pypi.nvidia.com/" } dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.5.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:87652483baa9c81a9a24e4450f016e4ee78fd205d8422dad8996571bd1f2622e" }, - { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.5.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:cef6d30acc37557643ece0de3770fc4c33497c4af40209e424f72fbfcbe6ea5a" }, - { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:16d97a60ed1d33388abbca85ea08cdae6325cc700476b3135f190d0fb50329f4" }, + { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:2603e1019d9b4982fe55842d45fb74d5b41b12e75e52e47bd1687ac2f696b36b" }, + { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:2bc3b5ef6acd7cfde34ad6ef0f487760fab629b98f6ebcb2f4b85c4022385264" }, ] [[package]] @@ -777,7 +776,7 @@ wheels = [ [[package]] name = "databricks-sdk" -version = "0.122.0" +version = "0.123.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-auth" }, @@ -785,14 +784,14 @@ dependencies = [ { name = "requests" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/7d/e3e34005d835c88df348187414837e34981d8eaec29bf91abd36a6f5e39f/databricks_sdk-0.122.0.tar.gz", hash = "sha256:eb11be13f0c02fc4ffc6e2672ad47478ce26ac4b310bd26916af8ba56e374e98", size = 1024752, upload-time = "2026-07-21T09:24:15.952Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/ef/a08f2a0d6deecc35552baf89da44f9f05cc2e19313ec240dddd06978a09f/databricks_sdk-0.123.0.tar.gz", hash = "sha256:787068ccf1c537736bc6387486c15d2ac02937c876c980b5b2b43230a98e4d35", size = 1144384, upload-time = "2026-07-30T16:52:54.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/95/f17887b43ac4dcc09079e5fb0e93374762d85d593c8e5114dbc6f82b6c52/databricks_sdk-0.122.0-py3-none-any.whl", hash = "sha256:7d998ec47f580be6be1cfe066be78038054767575b7437af5e4f76b67dde49c2", size = 969097, upload-time = "2026-07-21T09:24:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/cd/53/29048df757469edbb43f610188837951c86ac6ae63a6fbccb27edd01b86a/databricks_sdk-0.123.0-py3-none-any.whl", hash = "sha256:55ed566c48dcd25d8ea4ffec3f78236f63258078477e440529389c4bee95d80f", size = 1088731, upload-time = "2026-07-30T16:52:52.862Z" }, ] [[package]] name = "datasets" -version = "5.0.0" +version = "5.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dill" }, @@ -810,9 +809,9 @@ dependencies = [ { name = "tqdm" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/85/ce4f780c32f7e36d71257f1c27e8ba898ebe379cb54f211f5f2013f2c219/datasets-5.0.0.tar.gz", hash = "sha256:83dbbbdb07a33b82192b8c419deb18739b138ee2ce1a322d55ce6b100954ec1a", size = 631708, upload-time = "2026-06-05T13:18:26.124Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/5b/836516269d4f618efe621661cfb6f9acc57e6f95265db3efaee48a5ffe04/datasets-5.0.1.tar.gz", hash = "sha256:ce22bb851efd7494f08aad33b940803784434f6e77763d00679a0dc45fcf686a", size = 641498, upload-time = "2026-07-28T11:09:12.016Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/66/73034ad30b59f13439b75e620989dacba4c047256e358ba7c2e9ec98ea22/datasets-5.0.0-py3-none-any.whl", hash = "sha256:7dd34927a0fd7046e98aad5cb9430e699c373238a15befa7b9bf22b991a7fee6", size = 555084, upload-time = "2026-06-05T13:18:24.435Z" }, + { url = "https://files.pythonhosted.org/packages/44/0b/98fc6eb83333508ca5f44c52b3e287ea8137a0ad582714e2cbc67a02154b/datasets-5.0.1-py3-none-any.whl", hash = "sha256:9fbf73688f8c18f7529b4fe592abd04015f81d1e58001e4bac73ffb2b39d7cc4", size = 559079, upload-time = "2026-07-28T11:09:10.266Z" }, ] [[package]] @@ -845,18 +844,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, ] -[[package]] -name = "deprecation" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, -] - [[package]] name = "diffusers" version = "0.39.0" @@ -954,6 +941,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/67/6c1a89af18f160a9d7311fddbd62068e347c2bf6cfada8530ebfd4e75b8b/dulwich-1.2.12-py3-none-any.whl", hash = "sha256:713de88063b80ab37d707e7aff17e403efb236156e09c34c149ada48d48b6e96", size = 715939, upload-time = "2026-07-19T11:16:37.722Z" }, ] +[[package]] +name = "ebmlite" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/ae/70f7b3e255c330ac64bc404d8305f2bf1b439bc14c1b18da72ff566a4f4a/ebmlite-3.4.1.tar.gz", hash = "sha256:428cc88014e7f3544dfd64f1e7a35b7636d11eaef944d27c5da9d203f1498316", size = 90832, upload-time = "2025-07-24T15:06:14.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/06/41a15af1f9b4d3144fa4ee39d8e7b9b87a97ad3a04a6fa85c64788ca0af8/ebmlite-3.4.1-py3-none-any.whl", hash = "sha256:995765284e69d139fab34bbfb40e9e16a04116a95c7c9af368d90db7ca6b395c", size = 93430, upload-time = "2025-07-24T15:06:13.118Z" }, +] + [[package]] name = "einops" version = "0.9.0.dev0" @@ -965,8 +961,8 @@ wheels = [ [[package]] name = "emerging-optimizers" -version = "0.2.0" -source = { git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.2.0#1effa026ff096b7fa1063ca2fba19d98be6e6cdf" } +version = "0.3.0" +source = { git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.3.0#b309e2f01cda75dc96a6dc1a2355a7b3b64b5e16" } dependencies = [ { name = "absl-py" }, { name = "torch", marker = "sys_platform == 'never'" }, @@ -986,18 +982,6 @@ ini = [ { name = "configobj" }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - [[package]] name = "fabric" version = "3.2.3" @@ -1013,16 +997,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/f9/f8497ef8b873a8bb2a750ee2a6c5f0fc22258e1acb6245fd237042a6c279/fabric-3.2.3-py3-none-any.whl", hash = "sha256:ce61917f4f398018337ce279b357650a3a74baecf3fdd53a5839013944af965e", size = 59502, upload-time = "2026-04-06T00:00:10.176Z" }, ] -[[package]] -name = "fast-hadamard-transform" -version = "1.1.0" -source = { git = "https://github.com/Dao-AILab/fast-hadamard-transform.git?rev=v1.1.0#1cc807efbd6cc001df359822d60bf6052dd66859" } -dependencies = [ - { name = "ninja" }, - { name = "packaging" }, - { name = "torch", marker = "sys_platform == 'never'" }, -] - [[package]] name = "fastapi" version = "0.139.1" @@ -1056,11 +1030,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.32.0" +version = "3.32.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" }, ] [[package]] @@ -1239,11 +1213,11 @@ wheels = [ [[package]] name = "fsspec" -version = "2026.4.0" +version = "2026.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } +sdist = { url = "https://files.pythonhosted.org/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a", size = 313646, upload-time = "2026-06-16T01:57:28.105Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, ] [package.optional-dependencies] @@ -1287,22 +1261,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/6e/2139de986d9c7c3ac86f1f8be43858ce90bdfe2f7175e6c80c650ba15242/gitpython-3.1.57-py3-none-any.whl", hash = "sha256:4ccf7d73c10f5c9e76043fbb2675ac5a1b3ff5b41e648f56bcbed5f63792ecaf", size = 217151, upload-time = "2026-07-26T07:33:24.838Z" }, ] -[[package]] -name = "google-api-core" -version = "2.33.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "google-auth" }, - { name = "googleapis-common-protos" }, - { name = "proto-plus" }, - { name = "protobuf" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/87/62/8fb1fb647d2788c950d69d6a769cd9d55c918ac1fc57be2f90b7e4029787/google_api_core-2.33.0.tar.gz", hash = "sha256:3a36bcc3e319783f4c97da41f6f45ea6ffcaa55848e341de16e09cb70243c2bb", size = 181607, upload-time = "2026-07-22T16:28:28.027Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/31/5056a347bb934ea04583c8b27916ef1501729c72638629545bce26ff4223/google_api_core-2.33.0-py3-none-any.whl", hash = "sha256:a2e22a0c1d0f03eafff1858b38cf46f832d5902b0c052235bf0ab8402929fbdc", size = 176462, upload-time = "2026-07-22T16:28:22.447Z" }, -] - [[package]] name = "google-auth" version = "2.56.2" @@ -1316,18 +1274,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/63/50636aae68c9bf17c891c7eb18b49baa9bd6b31d2a97b8de4813a9fc8d1c/google_auth-2.56.2-py3-none-any.whl", hash = "sha256:c8270ea95b2697b74e3d8438ae9c5b898e38b623b915c7b5c5635921e7de68a6", size = 258588, upload-time = "2026-07-21T21:53:26.399Z" }, ] -[[package]] -name = "googleapis-common-protos" -version = "1.75.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "protobuf" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, -] - [[package]] name = "graphene" version = "3.4.3" @@ -1491,23 +1437,17 @@ wheels = [ [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "certifi" }, { name = "httpcore" }, { name = "idna" }, - { name = "sniffio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/82/08f8c936781f67d9e6b9eeb8a0c8b4e406136ea4c3d1f89a5db71d42e0e6/httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2", size = 144189, upload-time = "2024-08-27T12:54:01.334Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0", size = 76395, upload-time = "2024-08-27T12:53:59.653Z" }, -] - -[package.optional-dependencies] -http2 = [ - { name = "h2" }, + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, ] [[package]] @@ -1534,7 +1474,7 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "1.24.0" +version = "1.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1547,9 +1487,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/9b/d3bb4e7d792835daf34dd7091bbc7d7b4e0437d9388f1ea7239cce49f478/huggingface_hub-1.24.0.tar.gz", hash = "sha256:18431ff4daae0749aa9ba102fc952e314c98e1d30ebdec5319d85ca0a83e1ae5", size = 921848, upload-time = "2026-07-17T09:54:01.022Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/db/3582597f8be0d34bd6881365a26d390854f12893eabdd62dd36de9df5a47/huggingface_hub-1.26.0.tar.gz", hash = "sha256:c8cd4e2df1ba9402f77fce9b509ec1d52debb502551789473f34016acc14e361", size = 936665, upload-time = "2026-07-30T14:12:04.156Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/c3/aeaaf3911d2529614be18d1c8b5496afc185560e76568063d517283318af/huggingface_hub-1.24.0-py3-none-any.whl", hash = "sha256:6ed4120a84a6beec900640aa7e346bd766a6b7341e41526fef5dc8bd81fb7d59", size = 771904, upload-time = "2026-07-17T09:53:59.106Z" }, + { url = "https://files.pythonhosted.org/packages/97/bb/63a644c75b545f3ff394b822e9bd1c4a9586489c618b77a4d8a44a33a23b/huggingface_hub-1.26.0-py3-none-any.whl", hash = "sha256:e8cca670caa5d8dfa7e45bf45e86b466698198cd8150c021bcdb4a86b9252364", size = 780357, upload-time = "2026-07-30T14:12:01.998Z" }, ] [[package]] @@ -1828,62 +1768,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl", hash = "sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005", size = 8044, upload-time = "2026-03-06T15:45:07.668Z" }, ] -[[package]] -name = "ledoc-ui" -version = "0.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/e0/26d4b09c9d0dc718d9fd5b2b6ff506335cf2ccb43c85f91d083d7162a026/ledoc-ui-0.1.0.tar.gz", hash = "sha256:4f202c898e6c6219e06c1d77b83e03522872bb38b560c5d9b2bc9b41d73ca5ed", size = 2286587, upload-time = "2024-09-02T07:55:03.027Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/ab/6d5317ba39b3ffbf0428d8ee75d63611eb63fbc5fea30398c38e5a50ae6c/ledoc_ui-0.1.0-py3-none-any.whl", hash = "sha256:6ccf50c0d777cdabc7f1adfce716c488eeb1018da0e559b72e31666217ffe935", size = 2298422, upload-time = "2024-09-02T07:55:00.721Z" }, -] - -[[package]] -name = "leptonai" -version = "0.27.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "click" }, - { name = "cloudpickle" }, - { name = "contextlib2" }, - { name = "exceptiongroup" }, - { name = "fastapi" }, - { name = "httpx", extra = ["http2"] }, - { name = "huggingface-hub" }, - { name = "ledoc-ui" }, - { name = "loguru" }, - { name = "pillow" }, - { name = "prometheus-fastapi-instrumentator" }, - { name = "pydantic" }, - { name = "python-multipart" }, - { name = "pyyaml" }, - { name = "ray", extra = ["default"] }, - { name = "requests" }, - { name = "rich" }, - { name = "typing-extensions" }, - { name = "uvicorn" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/20/00efcee03ad7663e2240f888baeb064d294f267ffc385d9b6b5b65e9d797/leptonai-0.27.3-py3-none-any.whl", hash = "sha256:f9d1eef1fd8079b2bdf526f1a47a8c942cdc016f264e909ce9e8d47252918975", size = 2491772, upload-time = "2026-06-05T02:09:22.558Z" }, -] - [[package]] name = "libcst" -version = "1.8.6" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/cd/337df968b38d94c5aabd3e1b10630f047a2b345f6e1d4456bd9fe7417537/libcst-1.8.6.tar.gz", hash = "sha256:f729c37c9317126da9475bdd06a7208eb52fcbd180a6341648b45a56b4ba708b", size = 891354, upload-time = "2025-11-03T22:33:30.621Z" } +sdist = { url = "https://files.pythonhosted.org/packages/02/c0/098e5c91ff1537f00c85a6438b6cb1863d17144680cc91f47c87f104a200/libcst-1.9.0.tar.gz", hash = "sha256:087b58a9afe076bb08e2d726478e1f16cb928d67ffa9092817e033c335de522a", size = 914739, upload-time = "2026-07-29T21:28:43.153Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/3c/93365c17da3d42b055a8edb0e1e99f1c60c776471db6c9b7f1ddf6a44b28/libcst-1.8.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0c13d5bd3d8414a129e9dccaf0e5785108a4441e9b266e1e5e9d1f82d1b943c9", size = 2206166, upload-time = "2025-11-03T22:32:16.012Z" }, - { url = "https://files.pythonhosted.org/packages/1d/cb/7530940e6ac50c6dd6022349721074e19309eb6aa296e942ede2213c1a19/libcst-1.8.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1472eeafd67cdb22544e59cf3bfc25d23dc94058a68cf41f6654ff4fcb92e09", size = 2083726, upload-time = "2025-11-03T22:32:17.312Z" }, - { url = "https://files.pythonhosted.org/packages/1b/cf/7e5eaa8c8f2c54913160671575351d129170db757bb5e4b7faffed022271/libcst-1.8.6-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:089c58e75cb142ec33738a1a4ea7760a28b40c078ab2fd26b270dac7d2633a4d", size = 2235755, upload-time = "2025-11-03T22:32:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/55/54/570ec2b0e9a3de0af9922e3bb1b69a5429beefbc753a7ea770a27ad308bd/libcst-1.8.6-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c9d7aeafb1b07d25a964b148c0dda9451efb47bbbf67756e16eeae65004b0eb5", size = 2301473, upload-time = "2025-11-03T22:32:20.499Z" }, - { url = "https://files.pythonhosted.org/packages/11/4c/163457d1717cd12181c421a4cca493454bcabd143fc7e53313bc6a4ad82a/libcst-1.8.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207481197afd328aa91d02670c15b48d0256e676ce1ad4bafb6dc2b593cc58f1", size = 2298899, upload-time = "2025-11-03T22:32:21.765Z" }, - { url = "https://files.pythonhosted.org/packages/35/1d/317ddef3669883619ef3d3395ea583305f353ef4ad87d7a5ac1c39be38e3/libcst-1.8.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:375965f34cc6f09f5f809244d3ff9bd4f6cb6699f571121cebce53622e7e0b86", size = 2408239, upload-time = "2025-11-03T22:32:23.275Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a1/f47d8cccf74e212dd6044b9d6dbc223636508da99acff1d54786653196bc/libcst-1.8.6-cp312-cp312-win_amd64.whl", hash = "sha256:da95b38693b989eaa8d32e452e8261cfa77fe5babfef1d8d2ac25af8c4aa7e6d", size = 2119660, upload-time = "2025-11-03T22:32:24.822Z" }, - { url = "https://files.pythonhosted.org/packages/19/d0/dd313bf6a7942cdf951828f07ecc1a7695263f385065edc75ef3016a3cb5/libcst-1.8.6-cp312-cp312-win_arm64.whl", hash = "sha256:bff00e1c766658adbd09a175267f8b2f7616e5ee70ce45db3d7c4ce6d9f6bec7", size = 1999824, upload-time = "2025-11-03T22:32:26.131Z" }, + { url = "https://files.pythonhosted.org/packages/b0/bb/d22c37c33dfe18084634f5ef89f8f0749ffe7b6e0ad312722aafd86bbbdb/libcst-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cd1a3500c41784075c4946a995d5ad89f68fa0d226b63ff3c4d78f6ea6dd23e5", size = 2043159, upload-time = "2026-07-29T19:24:49.013Z" }, + { url = "https://files.pythonhosted.org/packages/10/b8/2dedef84d72e7271119217503b69ed6dc5d0b2077685e163caae669d9c70/libcst-1.9.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:611cebd3bbc2014576f4dcc7b845b3c594c96ddc287a3db9b78f22eff156a7d3", size = 2203245, upload-time = "2026-07-29T19:24:50.399Z" }, + { url = "https://files.pythonhosted.org/packages/e8/90/e02ac2dad647423f947bb11f8322bfdba8ccfdd380e6c7b695add2d1acd4/libcst-1.9.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:8d731abe1307720ea1a52d447555e8443a6d130e0e520243c0634a58f6edbc9d", size = 2255388, upload-time = "2026-07-29T19:24:52.21Z" }, + { url = "https://files.pythonhosted.org/packages/13/5f/6089a51518cfd2ff40950eb26bcc36951d7b6d4f4213568aa0290265aff7/libcst-1.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5351d92ca6ac1cc32e097700e1161ad1ceaa4d9b2cca5abadb1e94576b325", size = 2268982, upload-time = "2026-07-29T19:24:53.562Z" }, + { url = "https://files.pythonhosted.org/packages/ed/78/26881ec466fb70cbc129dca26ccb5a52a0061face2c5822e4b61f00f9699/libcst-1.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03165a264653bb77f6a11b412ae09c08bdb0c25864f3b8d42b816ac64b9d4b9e", size = 2378174, upload-time = "2026-07-29T19:24:55.175Z" }, + { url = "https://files.pythonhosted.org/packages/e1/7a/a4dba5f11faf12a12ffba06d18019987851aab33b590242a602ffd4fb1bd/libcst-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:b755ed4a4bc2faee849b54820023137d60d4c199e0a0822f0ff0c1bc49e49b48", size = 2103462, upload-time = "2026-07-29T19:24:56.966Z" }, + { url = "https://files.pythonhosted.org/packages/f5/13/57cb129093e0d6744b3c914ba6cbbdf51ed1b2c823882936c553a3a0cf1b/libcst-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e50576bad7d56459d9792cd0b0dfe5469dad13646e9a9c0a8b1ba20b269f332", size = 1979825, upload-time = "2026-07-29T19:24:58.403Z" }, ] [[package]] @@ -1943,19 +1843,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/82/9d993be27d5b8417ae68699eaddde2b49db598f1b52e3e0f9bf42947fe39/llvmlite-0.49.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:70246ff58caa0bc748cc52c1833b2877301fd4db49797e5564be9c4cd5ea818a", size = 41865512, upload-time = "2026-07-23T01:39:22.497Z" }, ] -[[package]] -name = "loguru" -version = "0.7.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "win32-setctime", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, -] - [[package]] name = "mako" version = "1.3.12" @@ -1988,11 +1875,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/af/48/aa7bec0efc7453fa0 [[package]] name = "markdown" -version = "3.10.2" +version = "3.10.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" }, ] [[package]] @@ -2278,33 +2165,33 @@ dependencies = [ [package.optional-dependencies] dev = [ { name = "av", marker = "sys_platform == 'never'" }, + { name = "causal-conv1d" }, { name = "datasets" }, { name = "einops" }, { name = "emerging-optimizers" }, - { name = "fast-hadamard-transform" }, { name = "fastapi" }, { name = "flash-linear-attention" }, { name = "flashinfer-python" }, { name = "hypercorn" }, + { name = "mamba-ssm" }, { name = "megatron-energon", extra = ["av-decode"] }, { name = "multi-storage-client" }, { name = "nvidia-cudnn-frontend" }, { name = "nvidia-modelopt" }, { name = "nvidia-resiliency-ext" }, + { name = "nvtx" }, { name = "onnxscript" }, { name = "openai", extra = ["aiohttp"] }, { name = "opentelemetry-api" }, - { name = "orjson" }, { name = "quart" }, { name = "tensorstore" }, { name = "tqdm" }, + { name = "transformer-engine" }, { name = "wget" }, - { name = "zstandard" }, ] mlm = [ { name = "accelerate" }, { name = "flask-restful" }, - { name = "omegaconf" }, { name = "sentencepiece" }, { name = "tiktoken" }, { name = "transformers" }, @@ -2316,58 +2203,69 @@ requires-dist = [ { name = "accelerate", marker = "extra == 'mlm'" }, { name = "accelerate", marker = "extra == 'training'" }, { name = "av", marker = "extra == 'dev'" }, - { name = "causal-conv1d", marker = "extra == 'ssm'", specifier = "~=1.5" }, + { name = "av", marker = "extra == 'lts'" }, + { name = "causal-conv1d", marker = "extra == 'dev'", specifier = "~=1.5" }, + { name = "causal-conv1d", marker = "extra == 'lts'", specifier = "~=1.5" }, { name = "datasets", marker = "extra == 'dev'" }, + { name = "datasets", marker = "extra == 'lts'" }, { name = "einops", marker = "extra == 'dev'", specifier = "~=0.8" }, - { name = "emerging-optimizers", marker = "extra == 'dev'", git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.2.0" }, - { name = "fast-hadamard-transform", marker = "extra == 'dev'", git = "https://github.com/Dao-AILab/fast-hadamard-transform.git?rev=f134af63deb2df17e1171a9ec1ea4a7d8604d5ca" }, + { name = "einops", marker = "extra == 'lts'", specifier = "~=0.8" }, + { name = "emerging-optimizers", marker = "python_full_version >= '3.12' and extra == 'dev'", git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.3.0" }, + { name = "emerging-optimizers", marker = "python_full_version >= '3.12' and extra == 'lts'", git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.3.0" }, { name = "fastapi", marker = "extra == 'dev'", specifier = "~=0.50" }, - { name = "flash-linear-attention", marker = "extra == 'dev'", specifier = "~=0.4.0" }, + { name = "fastapi", marker = "extra == 'lts'", specifier = "~=0.50" }, + { name = "flash-linear-attention", marker = "extra == 'dev'", specifier = ">=0.4.2,<0.5" }, { name = "flashinfer-python", marker = "extra == 'dev'", specifier = ">=0.5.0,<0.7.0" }, + { name = "flashinfer-python", marker = "extra == 'lts'", specifier = ">=0.5.0,<0.7.0" }, { name = "flask-restful", marker = "extra == 'mlm'" }, { name = "flask-restful", marker = "extra == 'training'" }, { name = "hypercorn", marker = "extra == 'dev'" }, - { name = "mamba-ssm", marker = "extra == 'ssm'", git = "https://github.com/state-spaces/mamba.git?rev=0048fbf2e7b2f214dcbe703ea3dec2b9647595e1" }, - { name = "megatron-energon", extras = ["av-decode"], marker = "extra == 'dev'", specifier = "~=7.0" }, - { name = "multi-storage-client", marker = "extra == 'dev'", specifier = "~=0.50" }, + { name = "mamba-ssm", marker = "extra == 'dev'", specifier = "~=2.2" }, + { name = "mamba-ssm", marker = "extra == 'lts'", specifier = "~=2.2" }, + { name = "megatron-energon", extras = ["av-decode"], marker = "extra == 'dev'", specifier = "~=6.0" }, + { name = "megatron-energon", extras = ["av-decode"], marker = "extra == 'lts'", specifier = "~=6.0" }, + { name = "multi-storage-client", marker = "extra == 'dev'", specifier = "~=0.27" }, + { name = "multi-storage-client", marker = "extra == 'lts'", specifier = "~=0.27" }, { name = "numpy" }, - { name = "nvidia-cudnn-frontend", extras = ["cutedsl"], marker = "extra == 'dev'", specifier = "==1.26.0" }, - { name = "nvidia-modelopt", extras = ["torch"], marker = "sys_platform != 'darwin' and extra == 'dev'", specifier = ">=0.44" }, - { name = "nvidia-resiliency-ext", marker = "extra == 'dev'", specifier = "==0.6.0" }, - { name = "omegaconf", marker = "extra == 'mlm'" }, - { name = "omegaconf", marker = "extra == 'training'" }, + { name = "nvidia-cudnn-frontend", extras = ["cutedsl"], marker = "extra == 'dev'", git = "https://github.com/NVIDIA/cudnn-frontend.git?rev=0a14b7181d129d30e7bad34b8c3ed0a0c995e23d" }, + { name = "nvidia-modelopt", extras = ["torch"], marker = "sys_platform != 'darwin' and extra == 'dev'" }, + { name = "nvidia-resiliency-ext", marker = "extra == 'dev'", git = "https://github.com/NVIDIA/nvidia-resiliency-ext.git?rev=0cbbaff8f02504370cb30df41f4ebfc97b242652" }, + { name = "nvtx", marker = "extra == 'dev'", specifier = "~=0.2" }, + { name = "nvtx", marker = "extra == 'lts'", specifier = "~=0.2" }, { name = "onnxscript", marker = "extra == 'dev'" }, + { name = "onnxscript", marker = "extra == 'lts'" }, { name = "openai", extras = ["aiohttp"], marker = "extra == 'dev'" }, { name = "opentelemetry-api", marker = "extra == 'dev'", specifier = "~=1.33.1" }, - { name = "orjson", marker = "extra == 'dev'" }, + { name = "opentelemetry-api", marker = "extra == 'lts'", specifier = "~=1.33.1" }, { name = "packaging", specifier = ">=24.2" }, { name = "quart", marker = "extra == 'dev'" }, { name = "sentencepiece", marker = "extra == 'mlm'" }, { name = "sentencepiece", marker = "extra == 'training'" }, { name = "tensorstore", marker = "extra == 'dev'", specifier = "~=0.1,!=0.1.46,!=0.1.72" }, + { name = "tensorstore", marker = "extra == 'lts'", specifier = "~=0.1,!=0.1.46,!=0.1.72" }, { name = "tiktoken", marker = "extra == 'mlm'" }, { name = "tiktoken", marker = "extra == 'training'" }, { name = "torch", specifier = ">=2.6.0" }, { name = "tqdm", marker = "extra == 'dev'" }, - { name = "transformer-engine", extras = ["core-cu13", "pytorch"], marker = "extra == 'te'", git = "https://github.com/NVIDIA/TransformerEngine.git?rev=e7c550c5f80636cf841a8204b1d6f85a5f3f28b7" }, + { name = "tqdm", marker = "extra == 'lts'" }, + { name = "transformer-engine", extras = ["core-cu13", "pytorch"], marker = "extra == 'dev'", git = "https://github.com/NVIDIA/TransformerEngine.git?rev=f031cf87bd054c7558b887df7bed93975456667f" }, { name = "transformers", marker = "extra == 'mlm'" }, { name = "transformers", marker = "extra == 'training'" }, { name = "wandb", marker = "extra == 'mlm'" }, { name = "wandb", marker = "extra == 'training'" }, { name = "wget", marker = "extra == 'dev'" }, - { name = "zstandard", marker = "extra == 'dev'" }, + { name = "wget", marker = "extra == 'lts'" }, ] -provides-extras = ["training", "mlm", "dev", "lts", "te", "ssm"] +provides-extras = ["training", "mlm", "dev", "lts"] [package.metadata.requires-dev] build = [ { name = "cython", specifier = ">=3.0.0" }, { name = "hatchling" }, - { name = "nvidia-cudnn-frontend", specifier = ">=1.25.0" }, { name = "nvidia-mathdx" }, { name = "packaging", specifier = ">=24.2" }, { name = "pybind11" }, - { name = "setuptools", specifier = ">=80" }, + { name = "setuptools", specifier = ">=77.0.0,<80.0.0" }, { name = "torch" }, ] ci = [ @@ -2391,12 +2289,12 @@ linting = [ { name = "ruff", specifier = "~=0.9.0" }, ] no-pypi-wheels = [ - { name = "emerging-optimizers", git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.2.0" }, + { name = "emerging-optimizers", marker = "python_full_version >= '3.12'", git = "https://github.com/NVIDIA-NeMo/Emerging-Optimizers.git?rev=v0.3.0" }, + { name = "fast-hadamard-transform", git = "https://github.com/Dao-AILab/fast-hadamard-transform.git?rev=f134af63deb2df17e1171a9ec1ea4a7d8604d5ca" }, { name = "flash-mla", git = "https://github.com/deepseek-ai/FlashMLA?rev=nv_dev" }, ] test = [ { name = "coverage" }, - { name = "mock" }, { name = "nemo-run", git = "https://github.com/NVIDIA-NeMo/Run.git?rev=17ae86b64d7f75653351664f5d8c9e466faede00" }, { name = "nltk" }, { name = "pydantic" }, @@ -2413,40 +2311,33 @@ test = [ [[package]] name = "megatron-energon" -version = "7.4.0" +version = "6.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "braceexpand" }, { name = "click" }, - { name = "filetype" }, - { name = "mfusepy" }, { name = "multi-storage-client" }, { name = "numpy" }, { name = "pillow" }, { name = "pyyaml" }, - { name = "rapidyaml" }, { name = "s3fs" }, { name = "torch", marker = "sys_platform == 'never'" }, { name = "tqdm" }, { name = "webdataset" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/8a/690e08320622954d347c57270be852cad053798559a8e54810f28f8f6949/megatron_energon-7.4.0.tar.gz", hash = "sha256:df78a42d56dd443e9e1961d899698be2b737010c10ae8747a9428308a6b8e3b1", size = 211145, upload-time = "2026-06-17T10:18:23.881Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/19/7cbb748913db83662c9e4a82164e2a008482048809d3aa163440aa3824bd/megatron_energon-6.0.1.tar.gz", hash = "sha256:39dddd2c91ddf2938ad5440a061363930b09a0c09ee1b459764df149cac34f21", size = 141410, upload-time = "2025-03-17T12:11:22.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/39/a3696bd65d15b31ce4edf8198c33f8fb553298d5e73b2d7a552db6e58495/megatron_energon-7.4.0-py3-none-any.whl", hash = "sha256:bd0973b7a588539bfceb3b21d78ee28b448ec7a19b01d80fbe10299f149bd94c", size = 286751, upload-time = "2026-06-17T10:18:22.184Z" }, + { url = "https://files.pythonhosted.org/packages/71/d8/d67bac7beaba18d595b3a7d038661b6f27d69fa2099b2fabe85a63343054/megatron_energon-6.0.1-py3-none-any.whl", hash = "sha256:2214250bdc7956791556f3a48b221601fd63d36844644cff9110c312b1cd47a5", size = 202240, upload-time = "2025-03-17T12:11:20.657Z" }, ] [package.optional-dependencies] av-decode = [ { name = "av", marker = "sys_platform == 'never'" }, -] - -[[package]] -name = "mfusepy" -version = "3.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/47/746287c8962274f73ee25edb3840d80899464bfffbe2c435424c2d60a071/mfusepy-3.1.1.tar.gz", hash = "sha256:338ece54513d7d1a5e9492837679a0c7432ecf96a03490a2683a1ce1d19570e1", size = 34549, upload-time = "2026-03-13T00:36:52.636Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/d5/56bc9326bf75f7ea0f4fe1178f5c9f20d1a1e15e288ecf66088513538ccd/mfusepy-3.1.1-py3-none-any.whl", hash = "sha256:69fb70cfc7f7cce595e6ff586f8451d8298f01f18286a157f24f564b24ec5a37", size = 28264, upload-time = "2026-03-13T00:36:51.843Z" }, + { name = "bitstring" }, + { name = "ebmlite" }, + { name = "filetype" }, + { name = "sortedcontainers" }, + { name = "soundfile" }, ] [[package]] @@ -2720,25 +2611,25 @@ wheels = [ [[package]] name = "nemo-run" -version = "0.10.0" +version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "catalogue" }, + { name = "cryptography" }, { name = "fabric" }, { name = "fiddle" }, { name = "inquirerpy" }, { name = "jinja2" }, - { name = "leptonai" }, { name = "networkx" }, { name = "omegaconf" }, + { name = "packaging" }, { name = "rich" }, - { name = "toml" }, { name = "torchx" }, { name = "typer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/3b/8ac4851a9985ec91b1bb7a1294a556cf6aeffa018d91f61b55f7717cd9a8/nemo_run-0.10.0.tar.gz", hash = "sha256:02b461486ff53a2f6f74e4fc45a0042f3b68267cc6ce1eae8eb11e0faa725462", size = 218832, upload-time = "2026-06-23T00:20:13.972Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/30/bdecd40a2bb4e186f6882b7ee5f6c0a56b08f37e69456b731a31c7398197/nemo_run-0.4.0.tar.gz", hash = "sha256:bbb86234f685bc6152dbbc095aea7b9385b8c7aec7fa27bae502ec494aae354f", size = 2107933, upload-time = "2025-05-09T00:57:57.749Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/67/24846ab819f884dddbbd589971c97008b11b842ac780bf53a3f157283b27/nemo_run-0.10.0-py3-none-any.whl", hash = "sha256:b06ba6ae9d87d70cc634355000a6608c43d2e370056db1e380aa69adf507160f", size = 293049, upload-time = "2026-06-23T00:20:12.564Z" }, + { url = "https://files.pythonhosted.org/packages/16/12/29200a0175f04ac3c6385361622204f85ad8d948a16319e98d796df9aacf/nemo_run-0.4.0-py3-none-any.whl", hash = "sha256:53d1c5878ae50ca2d6dc9008e6c5f7c9e8be01b62fb5de1419bddc06287c6837", size = 174352, upload-time = "2025-05-09T00:57:56.263Z" }, ] [[package]] @@ -2960,8 +2851,8 @@ wheels = [ [[package]] name = "nvidia-resiliency-ext" -version = "0.6.0" -source = { registry = "https://pypi.nvidia.com/" } +version = "0.6.0.dev84+0cbbaff" +source = { git = "https://github.com/NVIDIA/nvidia-resiliency-ext.git?rev=0cbbaff8f02504370cb30df41f4ebfc97b242652#0cbbaff8f02504370cb30df41f4ebfc97b242652" } dependencies = [ { name = "defusedxml" }, { name = "grpcio" }, @@ -2975,10 +2866,6 @@ dependencies = [ { name = "pyyaml" }, { name = "torch", marker = "sys_platform == 'never'" }, ] -wheels = [ - { url = "https://pypi.nvidia.com/nvidia-resiliency-ext/nvidia_resiliency_ext-0.6.0-cp312-cp312-manylinux_2_39_aarch64.whl", hash = "sha256:a71c1a1650b32c72f7fdf7d6f73b4d275961ce5d68bd68efaff9e0d7099031cb" }, - { url = "https://pypi.nvidia.com/nvidia-resiliency-ext/nvidia_resiliency_ext-0.6.0-cp312-cp312-manylinux_2_39_x86_64.whl", hash = "sha256:7d5ac6567841aef0173af3bcc0c2044971d2b225918028b99af6e4eb7e6e2f5d" }, -] [[package]] name = "nvidia-sphinx-theme" @@ -2992,6 +2879,17 @@ wheels = [ { url = "https://pypi.nvidia.com/nvidia-sphinx-theme/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl", hash = "sha256:21ca60206dff2f380d7783d64bbaf71a5b9cacae53c7d0686f089c16b5a3d45a" }, ] +[[package]] +name = "nvtx" +version = "0.2.15" +source = { registry = "https://pypi.nvidia.com/" } +sdist = { url = "https://pypi.nvidia.com/nvtx/nvtx-0.2.15.tar.gz", hash = "sha256:2287d3be05b85661deb386f878d1f536c2e532774aa9ec7a50c434942ed81ae5" } +wheels = [ + { url = "https://pypi.nvidia.com/nvtx/nvtx-0.2.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2cc530cd0f1a2c14a3a7e683833db509888ac5ed4ead94e5c9e2c7317c6937a7" }, + { url = "https://pypi.nvidia.com/nvtx/nvtx-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ca8030a6d197952318013dd1c12c22da1d4b9feb76ba72e0fcd449961183c2c" }, + { url = "https://pypi.nvidia.com/nvtx/nvtx-0.2.15-cp312-cp312-win_amd64.whl", hash = "sha256:70a1e768964e0520b68ccabc4df391cc227537c45936a7eba6507bc65e617e00" }, +] + [[package]] name = "omegaconf" version = "2.3.1" @@ -3080,7 +2978,7 @@ wheels = [ [[package]] name = "openai" -version = "2.48.0" +version = "2.51.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -3092,9 +2990,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/d4d1835488c0350424009dac5095b9a3e173bee12fd2e421ee27e2142c42/openai-2.48.0.tar.gz", hash = "sha256:231b1e7661dda14574986c2f71451e9d584b7fe69e0ee6480e12ed090b48fc16", size = 1093427, upload-time = "2026-07-23T20:15:50.402Z" } +sdist = { url = "https://files.pythonhosted.org/packages/75/d8/06fda9685e47d9a8fc177ef57f8af75207938fad49a45ce23bfa7b6a2a5c/openai-2.51.0.tar.gz", hash = "sha256:4d61287c42eba54086d09346e709cbf7f8cec51822efce9cc399450b9385fba5", size = 1083410, upload-time = "2026-07-30T17:43:26.507Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/2a/dcb891114e303c4379d4a498f10222e33eee540bcef4e1e493bd0af2b242/openai-2.48.0-py3-none-any.whl", hash = "sha256:c98df30aaaf93c51979f64d3e7c5b76464f8be0173368266229eb8fe6bd30f2c", size = 1648520, upload-time = "2026-07-23T20:15:48.052Z" }, + { url = "https://files.pythonhosted.org/packages/57/6f/c49e21245ad4865e886f6885e95e998bc024335b392c202bd571639e9d50/openai-2.51.0-py3-none-any.whl", hash = "sha256:91db13ce59a670fddc820a6983989650095e43e3acac09288bceb69356a8904e", size = 1652344, upload-time = "2026-07-30T17:43:24.225Z" }, ] [package.optional-dependencies] @@ -3103,29 +3001,6 @@ aiohttp = [ { name = "httpx-aiohttp" }, ] -[[package]] -name = "opencensus" -version = "0.11.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "google-api-core" }, - { name = "opencensus-context" }, - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/a7/a46dcffa1b63084f9f17fe3c8cb20724c4c8f91009fd0b2cfdb27d5d2b35/opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2", size = 64966, upload-time = "2024-01-03T18:04:07.085Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/ed/9fbdeb23a09e430d87b7d72d430484b88184633dc50f6bfb792354b6f661/opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864", size = 128225, upload-time = "2024-01-03T18:04:05.127Z" }, -] - -[[package]] -name = "opencensus-context" -version = "0.2.dev0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/3e/676c048bc92b27937d497e82374d3bbd6fe5c9df5a6d2d97674103c6ef36/opencensus-context-0.2.dev0.tar.gz", hash = "sha256:10ab2bc631a72257018e49e3e4b81e6c117c0cfb2f28d4b52b3c7da722d3042c", size = 3892, upload-time = "2020-06-29T20:27:29.69Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/d8/92ec4bd2c362618035f4011e2cd37dcea69c0e90c751d88263e7fa3804d7/opencensus_context-0.2.dev0-py2.py3-none-any.whl", hash = "sha256:01d09c98c1be6f99364bc8571f74665bae216538f2e9f85084740e1649c867b0", size = 4481, upload-time = "2020-06-29T20:27:28.501Z" }, -] - [[package]] name = "opentelemetry-api" version = "1.33.1" @@ -3139,20 +3014,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/05/44/4c45a34def3506122ae61ad684139f0bbc4e00c39555d4f7e20e0e001c8a/opentelemetry_api-1.33.1-py3-none-any.whl", hash = "sha256:4db83ebcf7ea93e64637ec6ee6fabee45c5cbe4abd9cf3da95c43828ddb50b83", size = 65771, upload-time = "2025-05-16T18:52:17.419Z" }, ] -[[package]] -name = "opentelemetry-exporter-prometheus" -version = "0.54b1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-api" }, - { name = "opentelemetry-sdk" }, - { name = "prometheus-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/da/ef/563c6413dbf042f1b738c4e23f7ff5f80fd0ae5ba64037433a5eeb0a1f79/opentelemetry_exporter_prometheus-0.54b1.tar.gz", hash = "sha256:6a28fde40ac8693bd653b84ba9deff75721fd05edf4e4313939327ea336ad3a9", size = 14948, upload-time = "2025-05-16T18:52:46.152Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/4e/f351f6fe640c270158cf2521978978eb8a8fb3113fdaa5e98eedc22e8126/opentelemetry_exporter_prometheus-0.54b1-py3-none-any.whl", hash = "sha256:78052c9818140021b8b3738f653f8bf4088a34bf970144c6816b5f561c0178dc", size = 12950, upload-time = "2025-05-16T18:52:26.51Z" }, -] - [[package]] name = "opentelemetry-proto" version = "1.44.0" @@ -3192,29 +3053,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/80/08b1698c52ff76d96ba440bf15edc2f4bc0a279868778928e947c1004bdd/opentelemetry_semantic_conventions-0.54b1-py3-none-any.whl", hash = "sha256:29dab644a7e435b58d3a3918b58c333c92686236b30f7891d5e51f02933ca60d", size = 194938, upload-time = "2025-05-16T18:52:38.796Z" }, ] -[[package]] -name = "orjson" -version = "3.11.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, - { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, - { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, - { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, - { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, - { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, - { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, - { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, - { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, - { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, - { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, -] - [[package]] name = "packaging" version = "26.2" @@ -3271,7 +3109,7 @@ wheels = [ [[package]] name = "peft" -version = "0.19.1" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "accelerate" }, @@ -3285,9 +3123,9 @@ dependencies = [ { name = "tqdm" }, { name = "transformers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/cf/037f1e3d5186496c05513a6754639e2dab3038a05f384284d49a9bd06a2d/peft-0.19.1.tar.gz", hash = "sha256:0d97542fe96dcdaa20d3b81c06f26f988618f416a73544ab23c3618ccb674a40", size = 763738, upload-time = "2026-04-16T15:46:45.105Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/08/02541a2c29be7c78698f73d438bc0e733b214f3f35ec5db79fca8da8fc61/peft-0.20.0.tar.gz", hash = "sha256:4769c8093a4ca145fd6fb3fd4dd50449675f5fe46434ad1e98b285a132d4b1d0", size = 880503, upload-time = "2026-07-28T13:46:01.85Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/b6/f54d676ed93cc2dd2234c3b172ea9c8c3d7d29361e66b1b23dec57a67465/peft-0.19.1-py3-none-any.whl", hash = "sha256:2113f72a81621b5913ef28f9022204c742df111890c5f49d812716a4a301e356", size = 680692, upload-time = "2026-04-16T15:46:42.886Z" }, + { url = "https://files.pythonhosted.org/packages/28/79/13bcabb8048126422d5c4b880575d40886c726f354db88cfeed4325525bb/peft-0.20.0-py3-none-any.whl", hash = "sha256:0fbba16ffebfad3de96e06f2da6860fd860292324b85b6141909fa1e26ea9233", size = 775777, upload-time = "2026-07-28T13:45:59.809Z" }, ] [[package]] @@ -3385,38 +3223,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/5f/82c8074f7e84978129347c2c6ec8b6c59f3584ff1a20bc3c940a3e061790/priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa", size = 8946, upload-time = "2021-06-27T10:15:03.856Z" }, ] -[[package]] -name = "prometheus-client" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, -] - -[[package]] -name = "prometheus-fastapi-instrumentator" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "prometheus-client" }, - { name = "starlette" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/42/eeb55ea9b0eae7d6854bef6aef3ecd34674f85813bc3877efdaeb582ab7e/prometheus_fastapi_instrumentator-7.0.0.tar.gz", hash = "sha256:5ba67c9212719f244ad7942d75ded80693b26331ee5dfc1e7571e4794a9ccbed", size = 20077, upload-time = "2024-03-13T16:25:08.564Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/66/2e93a8f56adb51ede41d0ef5f4f0277522acc4adc87937f5457b7b5692a8/prometheus_fastapi_instrumentator-7.0.0-py3-none-any.whl", hash = "sha256:96030c43c776ee938a3dae58485ec24caed7e05bfc60fe067161e0d5b5757052", size = 19005, upload-time = "2024-03-13T16:25:03.687Z" }, -] - [[package]] name = "prompt-toolkit" -version = "3.0.52" +version = "3.0.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, ] [[package]] @@ -3445,18 +3261,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] -[[package]] -name = "proto-plus" -version = "1.28.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "protobuf" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/73/3e/29e0d6a2c5adde6ab5772253fd16ab346324026b89a66e354689c86d0584/proto_plus-1.28.2.tar.gz", hash = "sha256:26d843eb99c1e32fdf1d20ff0faae56607f7748fe774acf9ecd5cfe6c6472501", size = 58063, upload-time = "2026-07-22T16:28:29.119Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/84/4e9a53a062d4073c74897a6bd20fff74d55307341b3e85c081002462b3ef/proto_plus-1.28.2-py3-none-any.whl", hash = "sha256:b874236fcac2358f601e4330bcb76cb8b89c851303ccf4078408b3d4774d1c52", size = 50693, upload-time = "2026-07-22T16:28:24.059Z" }, -] - [[package]] name = "protobuf" version = "6.33.6" @@ -3497,21 +3301,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dd/6e/d674f1dde91c71e2ac19e5e5cf1ee6d5845e3aefecd9c39ed9c4b0c9a696/pulp-3.3.2-py3-none-any.whl", hash = "sha256:631b166f72086971a9597f7a0233ababa99bb8d50a01cd543f7758be5a9f86c0", size = 16391742, upload-time = "2026-05-25T09:41:22.2Z" }, ] -[[package]] -name = "py-spy" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/93/d8/5b71371f50cf153b1307e5a11ac8a4ce4d85651dae946bd7e9a064146545/py_spy-0.4.2.tar.gz", hash = "sha256:90e600b27bb6bb40479637baca5a5b4bc2ba3395c93d889e672315d93042c4ae", size = 286374, upload-time = "2026-04-24T22:08:54.906Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/21/ec030145a0c7992bd4b9eafb2f06f56358b3a5339eab4a16534baf3c69aa/py_spy-0.4.2-py2.py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:1ccf688393105111684435f035bc14ec3f22117dd2b85b2414612cf27a22755a", size = 3743992, upload-time = "2026-04-24T22:08:45.438Z" }, - { url = "https://files.pythonhosted.org/packages/50/80/de5fd27243c2be03692ecd317bf0dbe24b4c6f78f689ce111e7277a7cb09/py_spy-0.4.2-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:a0e6f6810ccf0fc5e64e85e0182a5b626c4496eec01b14fb8755154b363a4831", size = 1859057, upload-time = "2026-04-24T22:08:46.946Z" }, - { url = "https://files.pythonhosted.org/packages/89/23/3eb4c23c684ebd667674ce1d076ae855e0621d1d9bd5e052aa3f7982f757/py_spy-0.4.2-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:142887e984a4e541071c99a4401ff8c3770f255d329dbd0f64e8c1dd51882cce", size = 2828136, upload-time = "2026-04-24T22:08:48.519Z" }, - { url = "https://files.pythonhosted.org/packages/ca/01/6314152cf9ad3310ebacbf2c47b5ed858086530f8e12b1a665725ca5e0f4/py_spy-0.4.2-py2.py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1c6d9b0e2379ead5bf792df43f4cf36153aa79e6dda4fb8ac7740cf8017110", size = 2857707, upload-time = "2026-04-24T22:08:49.677Z" }, - { url = "https://files.pythonhosted.org/packages/cc/1f/0960a129d504728d28a51dbd5a04ce94031eb75bac676341da7aefdd8232/py_spy-0.4.2-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24720573f95230653b457671a1dcc3c5a381fcf4e92677761e328a430ad251b2", size = 2301852, upload-time = "2026-04-24T22:08:51.152Z" }, - { url = "https://files.pythonhosted.org/packages/f9/34/dd7d3c763a00b7b965e25a5eab0acd1a345dbaf0f45fffe595278873a1c0/py_spy-0.4.2-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:aeb0323409199c785f730645e9f4bb7a7b9ca2c481f2c331a55642b5d13fa52f", size = 2936518, upload-time = "2026-04-24T22:08:52.264Z" }, - { url = "https://files.pythonhosted.org/packages/6f/ed/1409cdb557e558a6c98003ab12fdd4284699e158c167c187cb0f124eea4c/py_spy-0.4.2-py2.py3-none-win_amd64.whl", hash = "sha256:8b06a353c177677e4e1701b288d8c58e2f8d4208ee81a8048d9f72ba800918f8", size = 1894002, upload-time = "2026-04-24T22:08:53.811Z" }, -] - [[package]] name = "pyarrow" version = "24.0.0" @@ -3869,15 +3658,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, ] -[[package]] -name = "python-multipart" -version = "0.0.32" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, -] - [[package]] name = "pytz" version = "2026.3.post1" @@ -3966,65 +3746,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/43/80f67e0336cb2fc725f8e06f7fe35c1d0fe946f4d2b8b2175e797e07349e/qwen_vl_utils-0.0.14-py3-none-any.whl", hash = "sha256:5e28657bfd031e56bd447c5901b58ddfc3835285ed100f4c56580e0ade054e96", size = 8120, upload-time = "2025-09-23T09:38:56.297Z" }, ] -[[package]] -name = "rapidyaml" -version = "0.15.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "deprecation" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8d/5e/80ea1e8ca5785ad52f835f663e8384961bdb258de71a5bd332e99a2d7b20/rapidyaml-0.15.2.tar.gz", hash = "sha256:a3b075636e6b5673ddf7a50122b029cd44623f18e84bcd4f18425df328425a09", size = 500792, upload-time = "2026-06-25T18:56:18.685Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/cd/57cd56664362d3f77e621e88f41e5c46929a57b11c2c61be459e1519dfc3/rapidyaml-0.15.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f11c3e1934c29ac9b3db3f460b8d119efec6bb629b18b30b31df664324251bb", size = 5105921, upload-time = "2026-06-25T18:55:25.57Z" }, - { url = "https://files.pythonhosted.org/packages/42/e9/cdd320e5505ced82fad764f0b9ba6b61ce35813a613e6bde1e9097d6345c/rapidyaml-0.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d50dfe1732a455ee31c8310f341041967634d208bc5321280c5cf234235a8ac5", size = 5152285, upload-time = "2026-06-25T18:55:27.325Z" }, - { url = "https://files.pythonhosted.org/packages/80/17/18bfe2a4141443b2f24febe8337f93f3e19199da24c3495f75f5eaf8dc4c/rapidyaml-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc5bbdc38ebff5c58f8e0dd3cbbdf84db604f5e219ecf9b3ab2dab86f2036c9b", size = 5105916, upload-time = "2026-06-25T18:55:28.697Z" }, - { url = "https://files.pythonhosted.org/packages/79/20/5d6d8e06e9a410ab71cf08043d007854a25ed3f07c0c13189964f42e9f56/rapidyaml-0.15.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:10b633e710e7f1790911e9592ed0848a1f3b4449cd080ace41288c284f572750", size = 298941, upload-time = "2026-06-25T18:55:29.846Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ed/2120bc4be7f6104c01dce8f00c8eb7cddf8ae5905d78087235d1e7c361fd/rapidyaml-0.15.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aff076a6c657c73ba449d4fe5865ceac19d8c9f8f435df31776acfe06ddb3628", size = 600991, upload-time = "2026-06-25T18:55:30.91Z" }, - { url = "https://files.pythonhosted.org/packages/19/a1/6f1af855e5189d942e8845e67d014500477fd423d0dd1ec9729a3a2d86c7/rapidyaml-0.15.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb2381f52f33cec42017361cd2fb0f7eb411527afe9273e9ce0f984584b87db1", size = 612930, upload-time = "2026-06-25T18:55:32.191Z" }, - { url = "https://files.pythonhosted.org/packages/8f/4d/e52475516dfec0850b8c78e6db8c9ed0e7c0fe93d455f769ebb429fe1982/rapidyaml-0.15.2-cp312-cp312-win32.whl", hash = "sha256:f2cf9bbb2f588b07977c735c16d2156adf435ce9e36b3516d17496d03239ca29", size = 315231, upload-time = "2026-06-25T18:55:33.222Z" }, - { url = "https://files.pythonhosted.org/packages/0e/15/915131fc32c9f2aa56a130a9933bf5cfd64064c1d9fb1cdb0c77733ee5d0/rapidyaml-0.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:5cd14c077ce5183eba9a43ca93ceca1cc644eb6912f714e7972ade1de5d47770", size = 378988, upload-time = "2026-06-25T18:55:34.338Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f9/1e38225856d750b3416d51a6e0c862e386b34b87d36d6044f39a6b5fc390/rapidyaml-0.15.2-cp312-cp312-win_arm64.whl", hash = "sha256:bd2face6f6339e9b8d269401546acc2de66ae5ee62e62e8dece84ae238139581", size = 373522, upload-time = "2026-06-25T18:55:35.367Z" }, -] - -[[package]] -name = "ray" -version = "2.56.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "filelock" }, - { name = "jsonschema" }, - { name = "msgpack" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "pyyaml" }, - { name = "requests" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/d9/a17feef16a123f5d32d4c5fa7de853c59ba702f8404cf452a7ce20faca13/ray-2.56.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:44bc0000c5bfad85b2ff6e0ef91e95f901d1a2d2fdd72f94f08a046eb494cd61", size = 66346989, upload-time = "2026-07-17T21:28:39.4Z" }, - { url = "https://files.pythonhosted.org/packages/05/19/c3b1bcccd09decaf2a2e3370041ae67070bb1a8638f2665d36edfbb0261d/ray-2.56.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:8fdd6b096215906cf1f9acdc7898c9d6140606f2d27245778b8385a9f19e6cb0", size = 73319289, upload-time = "2026-07-17T21:28:44.502Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7f/577a61bf2c8eff26e942afe53a6b03f4dbf5b4f233b832c228417d0c954e/ray-2.56.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:e5d3173696831134c76bd09451dfe95c32d72c271253b0d6b09d2df9994aa660", size = 74194147, upload-time = "2026-07-17T21:28:50.567Z" }, - { url = "https://files.pythonhosted.org/packages/00/e9/0fd1223597f9ca98ec496ec726043918a5301547789b1be95a635ec82649/ray-2.56.1-cp312-cp312-win_amd64.whl", hash = "sha256:8052573ee5ef8c4fdd7aeb6a257c80542e69c48f3f6d117101f95c970ffdc7e2", size = 28373294, upload-time = "2026-07-17T21:28:55.122Z" }, -] - -[package.optional-dependencies] -default = [ - { name = "aiohttp" }, - { name = "aiohttp-cors" }, - { name = "colorful" }, - { name = "grpcio" }, - { name = "opencensus" }, - { name = "opentelemetry-exporter-prometheus" }, - { name = "opentelemetry-proto" }, - { name = "opentelemetry-sdk" }, - { name = "prometheus-client" }, - { name = "py-spy" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "smart-open" }, - { name = "virtualenv" }, -] - [[package]] name = "referencing" version = "0.37.0" @@ -4137,41 +3858,41 @@ wheels = [ [[package]] name = "ruff" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" }, - { url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" }, - { url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" }, - { url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" }, - { url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" }, - { url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" }, - { url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" }, - { url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" }, - { url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" }, - { url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" }, +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/25/7113f6d5498888c5fb7db34081cba7d5971c4cb1bfb26819966eee68f003/ruff-0.16.1.tar.gz", hash = "sha256:fedad7c801dabd3fb9741d76aca39246e6ddd9ca446a015875207bf19f1e6bc7", size = 4877500, upload-time = "2026-07-30T19:37:01.379Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/bd/694da69368e0973de65df2ddc73ab18d43c469d5963d9b150911de6bc513/ruff-0.16.1-py3-none-linux_armv6l.whl", hash = "sha256:58edb313b88f0c5460a26adf5f39a37a3be789494a15e3e411e35fa78b89f9a0", size = 10839126, upload-time = "2026-07-30T19:36:13.697Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f0/b626e5d5bd0dd9576263658ef12885e2288afd1029a48e26ffed65ec1ac1/ruff-0.16.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fde5a99e2f97479af66edd6622c6d5a2a7592c77cf4153d9e4428f5eeb55b60c", size = 11070253, upload-time = "2026-07-30T19:36:17.14Z" }, + { url = "https://files.pythonhosted.org/packages/83/63/f40acfb6b35b88623e71684942b552c3edd96035f5d98f313815f7b277de/ruff-0.16.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e0d4c20532fca4f7fa609369161d968dd28f65d83dabbd61d8e9c7edbf7001f6", size = 10561425, upload-time = "2026-07-30T19:36:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/aa/dd/14ec0e9c2b4d315547dd38765004b4863e354e1b52cb308272215d9f6f6d/ruff-0.16.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30affbcedf59ad5703d9c91f82266e02b47739f797e1a7b6e158e5526a6dae38", size = 10948879, upload-time = "2026-07-30T19:36:22.476Z" }, + { url = "https://files.pythonhosted.org/packages/33/e9/9d870cbae575030fdef595f04b4b97573c525b5497cce4f4498cf2f85446/ruff-0.16.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24e9c631573cbca9d20f1283f8f479b2afa4a8503504822bd71a293889f16743", size = 10643691, upload-time = "2026-07-30T19:36:24.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/09/12743d544e2173f53ecd27217c65f90d2bc0f8424a66a60339e56bbc0457/ruff-0.16.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b41bdd48fb420987a9b5212e4957c26ad4abce401fa9ea9d4d85843727945f4f", size = 11435354, upload-time = "2026-07-30T19:36:28.447Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/a1652b2daee52083c9554a6333b678a8b01d0400f976827bb87857f9449a/ruff-0.16.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0d1e1393b7648079e13669de1c1f4fde06d4583e84d8fd5c1551e0a77a2aa75", size = 12259033, upload-time = "2026-07-30T19:36:31.326Z" }, + { url = "https://files.pythonhosted.org/packages/16/96/ecdcb8c54ee7b123b487f807eb014e6e019155a0b81dfb669acd52f28ce3/ruff-0.16.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07bf434b1c95f4e093be4532068ef4fcf00924eb2ade8796075980902d6fd54a", size = 11667981, upload-time = "2026-07-30T19:36:34.394Z" }, + { url = "https://files.pythonhosted.org/packages/cd/90/c52e12e0d862e9572f2a33aa227409143520abe53111e9a6babbac7b4af8/ruff-0.16.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39897739f112253ee4fdd2e8aa9a4f9ded99fb2be367d5f31dfa4ded6025584c", size = 11468183, upload-time = "2026-07-30T19:36:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6b/4ffb7ad1d83eb16cf8cbb3c8815d3f11c88460fd162d4b372a2059be1c2a/ruff-0.16.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:82ae3c0c0d74daf17b968a10b7b3bb3ef297ab7de0c1f749646b25e690ccb150", size = 11470071, upload-time = "2026-07-30T19:36:39.91Z" }, + { url = "https://files.pythonhosted.org/packages/9c/72/32ae7db4c0b5e32ab611787caa19d1546800676d79f7483b7100a3561bf4/ruff-0.16.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4d5f2ed10f8242d83fc08d521301089364e3375375705356f20c0e31606ef3ef", size = 10919503, upload-time = "2026-07-30T19:36:42.65Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ca/3d901ba6ad6fc38da39c3448fc6c59ac945679293a17c3ceb6d6c1cba13e/ruff-0.16.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a4665b309891f83f3e3c25447935f1213e9abbd4b5640af7a1f2def9f8d413c1", size = 10649861, upload-time = "2026-07-30T19:36:45.18Z" }, + { url = "https://files.pythonhosted.org/packages/92/79/894ef1ced26552d5f8c9cf6d85b0687840e1128c55aeab7b9c2d54a0d880/ruff-0.16.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26e9ca5c9bc3971f20d3cf18a957f52ffd6a5f6564ff15c4912a144dcac22494", size = 11148137, upload-time = "2026-07-30T19:36:47.936Z" }, + { url = "https://files.pythonhosted.org/packages/2d/69/3609a09fa1cb46cc28b762363e440a354204e5dff01bd0c8d7437874d6b9/ruff-0.16.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:67e1e1e3fa4f0c82f0e36d4cd61e661f6e7a6196cb1aa92fe0828fa7b8f257cd", size = 11559211, upload-time = "2026-07-30T19:36:50.448Z" }, + { url = "https://files.pythonhosted.org/packages/fc/8a/fb22af2fd78a736e241fabf67e30ce1799a64244026377a49e133af90762/ruff-0.16.1-py3-none-win32.whl", hash = "sha256:d31765e131295b8445caf301e3e8a85b34d1b9b211b4109b7ba457888b051806", size = 10838258, upload-time = "2026-07-30T19:36:53.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/35/e57fd9fb5d423961df087a00b12d42c0a830288dc2f3b45ecca299158b4f/ruff-0.16.1-py3-none-win_amd64.whl", hash = "sha256:09b05e8b90c2cb06ad63464350e7a45e8e44a2dfe52072ebfba6666ca8d3f596", size = 11961111, upload-time = "2026-07-30T19:36:56.107Z" }, + { url = "https://files.pythonhosted.org/packages/cb/46/240ea004bf6dc4feb40e9832f2205a476a47dd5b8a3f8211a5fc5f95e20e/ruff-0.16.1-py3-none-win_arm64.whl", hash = "sha256:dbaadaac38c70239f056d306b7476f246b0bf000fa6b3876402acbf5b227eaf8", size = 11309414, upload-time = "2026-07-30T19:36:58.79Z" }, ] [[package]] name = "s3fs" -version = "2026.4.0" +version = "2026.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiobotocore" }, { name = "aiohttp" }, { name = "fsspec" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/d8/76f3dc1558bdf4494b117a9f7a9cc0a5d9d34edadc9e5d7ceabc5a6a7c37/s3fs-2026.4.0.tar.gz", hash = "sha256:5bdce0abb00b0435ee150807a45fea727451dbc22de4cbc116464f8504ab9d37", size = 85986, upload-time = "2026-04-29T20:52:51.748Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/00/6677343dc919d6c072bb04d80210afdd22c16838a8d16b3315c122dc728f/s3fs-2026.6.0.tar.gz", hash = "sha256:b28de7082d0a4f72392884bdc497e34a4a1582f675d214c7da0acf6e950a0083", size = 87358, upload-time = "2026-06-16T02:05:48.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/a4/9d1ea10ebc9e028a289a72fec84da170689549a8102c8aacfcad26bc5035/s3fs-2026.4.0-py3-none-any.whl", hash = "sha256:de0d2a1f33cdf03831fd2382d278c6e4e31fe57c3bf2f703c61f8aec6b703e2a", size = 32392, upload-time = "2026-04-29T20:52:50.295Z" }, + { url = "https://files.pythonhosted.org/packages/a5/0b/f68a968b49876eae0f2a515387093cebb2eb9451380a96741cc20efac0d0/s3fs-2026.6.0-py3-none-any.whl", hash = "sha256:60576e31bb31193c1f643f32b4c6439548720ea6918ac702e21cd757c80b5db8", size = 32573, upload-time = "2026-06-16T02:05:47.608Z" }, ] [[package]] @@ -4341,18 +4062,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/0e/3ae19fa941522cd98e119762e7181d371c8dba0b2d72bfaf9522692e329c/skops-0.14.0-py3-none-any.whl", hash = "sha256:60a5db78a9db46ccee2139a0ba13ab5afb1c96f4749b382e75a371291bbe3e36", size = 132198, upload-time = "2026-04-20T18:23:54.018Z" }, ] -[[package]] -name = "smart-open" -version = "8.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/53/9c513747547fd595d5c143259129ea8b9c3ea2f6b7bb9dcea2b1966ded3c/smart_open-8.0.1.tar.gz", hash = "sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf", size = 61882, upload-time = "2026-07-15T13:56:10.492Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/96/325b8c507ccecc50421fecc0345a502ee6e4a44785af3c4e6ecbadad624a/smart_open-8.0.1-py3-none-any.whl", hash = "sha256:3e97f90e92a952cb57863dfe132082c400a52eeeb27c067692fb51dbcc5b0089", size = 73504, upload-time = "2026-07-15T13:56:09.033Z" }, -] - [[package]] name = "smmap" version = "5.0.3" @@ -4380,6 +4089,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752", size = 104164, upload-time = "2026-06-03T00:56:38.614Z" }, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + [[package]] name = "soundfile" version = "0.14.0" @@ -4597,15 +4315,15 @@ wheels = [ [[package]] name = "starlette" -version = "0.52.1" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, ] [[package]] @@ -4685,6 +4403,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] +[[package]] +name = "tibs" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/cd/6cf028decf1c2df4d26077dd5d0532587d93d4917233d5e004133166a940/tibs-0.5.7.tar.gz", hash = "sha256:173dfbecb2309edd9771f453580c88cf251e775613461566b23dbd756b3d54cb", size = 78255, upload-time = "2026-03-12T13:06:29.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/2d/de2c579d3eea0f18212b5b16decb04568b7a0ef912d00581a77492609d4e/tibs-0.5.7-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:859f05315ffb307d3474c505d694f3a547f00730a024c982f5f60316a5505b3c", size = 411352, upload-time = "2026-03-12T13:06:52.016Z" }, + { url = "https://files.pythonhosted.org/packages/74/71/4c21ccc5c2e1672f9cd91ed2c46604c250cffd9d386113772dded128b5cf/tibs-0.5.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a883ca13a922a66b2c1326a9c188123a574741a72510a4bf52fd6f97db191e44", size = 383971, upload-time = "2026-03-12T13:06:50.143Z" }, + { url = "https://files.pythonhosted.org/packages/38/85/399940ac5393772792a209911a5efa42cf55cf621771e48b863211ac5a2a/tibs-0.5.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f70bd250769381c73110d6f24feaf8b6fcd44f680b3cb28a20ea06db3d04fb6f", size = 416256, upload-time = "2026-03-12T13:06:24.222Z" }, + { url = "https://files.pythonhosted.org/packages/02/94/481a73e74d398949f57d297b1809a10a951d252e7ec94b6715ed952ce500/tibs-0.5.7-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76746f01b3db9dbd802f5e615f11f68df7a29ecef521b082dca53f3fa7d0084f", size = 428003, upload-time = "2026-03-12T13:06:23.064Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e0/72db1760a7f7fec1d5f3690e0855fbbccbcf0a4a2fd318c9d71f3b33f3a7/tibs-0.5.7-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:847709c108800ad6a45efaf9a040628278956938a4897f7427a2587013dc3b98", size = 455589, upload-time = "2026-03-12T13:06:53.144Z" }, + { url = "https://files.pythonhosted.org/packages/3e/26/9cd3395914bf705d6ae1e9a6c323f727e9dc88fef716327ce7f486e0b55a/tibs-0.5.7-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad61df93b50f875b277ab736c5d37b6bce56f9abce489a22f4e02d9daa2966e3", size = 459266, upload-time = "2026-03-12T13:06:21.678Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3b/267f19a008d13c704dc0b044138a56239272a43531ccb05464129d0fbd01/tibs-0.5.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e13b9c7ff2604b0146772025e1ac6f85c8c625bf6ac73736ff671eaf357dda41", size = 423466, upload-time = "2026-03-12T13:06:41.212Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d4/424ae3515e0e013ad83186074bf3beb53399b9052c00da703415ccc316ca/tibs-0.5.7-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7ce857ef05c59dc61abadc31c4b9b1e3c62f9e5fb29217988c308936aea71e", size = 452080, upload-time = "2026-03-12T13:06:32.112Z" }, + { url = "https://files.pythonhosted.org/packages/b0/15/ab80beba83a134745439d33763e1d3b017f994abeb9c309a3ac9fd94e90e/tibs-0.5.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1d5521cc6768bfa6282a0c591ba06b079ab91b5c7d5696925ad2abac59779a54", size = 592311, upload-time = "2026-03-12T13:06:47.807Z" }, + { url = "https://files.pythonhosted.org/packages/4c/21/f5cf41c15431e63aeaefb494e714d48d9e9061b4e01fcc01d1987e2e5faa/tibs-0.5.7-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:477608f9b87e24a22ab6d50b81da04a5cb59bfa49598ff7ec5165035a18fb392", size = 703400, upload-time = "2026-03-12T13:06:16.968Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ec/b3bdb7dcc3de8513c5678a685f4e25bb85ef48526d7d535ddc592f9e8602/tibs-0.5.7-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:ac0aa2aae38f7325c91c261ce1d18f769c4c7033c98d6ea3ea5534585cf16452", size = 664623, upload-time = "2026-03-12T13:06:48.894Z" }, + { url = "https://files.pythonhosted.org/packages/a4/71/7b85af3ad1b2cd9871c8f50ba0eb17e54e12481b467678535e58aced0d98/tibs-0.5.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b56583db148e5094d781c3d746815dbcbb6378c6f813c8ce291efd4ab21da8b", size = 635199, upload-time = "2026-03-12T13:06:34.798Z" }, + { url = "https://files.pythonhosted.org/packages/b9/63/60220fb502beb857306afd4a5bac4a8617ae496f3b1f4968d127380fdefe/tibs-0.5.7-cp38-abi3-win32.whl", hash = "sha256:d4f3ff613d486650816bc5516760c0382a2cc0ca8aeddd8914d011bc3b81d9a2", size = 288454, upload-time = "2026-03-12T13:06:30.978Z" }, + { url = "https://files.pythonhosted.org/packages/46/ab/aab78827ba7e0d65fe346b86d1d61e0792c38d5f9b7547e0f71b7027c835/tibs-0.5.7-cp38-abi3-win_amd64.whl", hash = "sha256:a61d36155f8ab8642e1b6744e13822f72050fc7ec4f86ec6965295afa04949e2", size = 304135, upload-time = "2026-03-12T13:06:35.884Z" }, + { url = "https://files.pythonhosted.org/packages/48/59/e9e6a610928a4bcbf04f0ac1436ee320aa8cbe95181f1aa32687c50e858b/tibs-0.5.7-cp38-abi3-win_arm64.whl", hash = "sha256:130bc68ff500fc8185677df7a97350b5d5339e6ba7e325bc3031337f6424ede7", size = 289272, upload-time = "2026-03-12T13:06:19.247Z" }, +] + [[package]] name = "tiktoken" version = "0.13.0" @@ -4770,15 +4511,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/f4/0de46cfa12cdcbcd464cc59fde36912af405696f687e53a091fb432f694c/tokenizers-0.22.2-cp39-abi3-win_arm64.whl", hash = "sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc", size = 2612133, upload-time = "2026-01-05T10:45:17.232Z" }, ] -[[package]] -name = "toml" -version = "0.10.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, -] - [[package]] name = "tomlkit" version = "0.15.1" @@ -4851,14 +4583,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.69.1" +version = "4.70.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dd/84/da0e5038228fa34dfd77c5026b173ed035d2a3ba31f1077590c013de2bff/tqdm-4.69.1.tar.gz", hash = "sha256:2be21080a0ce17e902c2f1baeb6a74bf551b67bbdfa4bc0109fad471d0b4cb0d", size = 793046, upload-time = "2026-07-24T14:22:02.08Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/50/5817619a0fca56aff06383dbfde7ae017b3ca383915b3f1e4713164273cf/tqdm-4.69.1-py3-none-any.whl", hash = "sha256:0a654b96f7a2660cceb615b56f307ec2bef96c515409014a429a561981ab52b4", size = 675452, upload-time = "2026-07-24T14:22:00.048Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, ] [[package]] @@ -4971,20 +4703,20 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.51.0" +version = "0.52.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/c8/2d307868453a4bca6e64fa3581d122ae0748a0869c53f159339def179c7c/uvicorn-0.52.0.tar.gz", hash = "sha256:ca8876ad6c1983f394157c168b39d52f6dd56dabf5602fa0982751cffc2293ae", size = 97504, upload-time = "2026-07-29T08:45:34.065Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/39/e6/b5c0630ace9757232aec07112be8146b812787db52141ff9d50674aa7634/uvicorn-0.52.0-py3-none-any.whl", hash = "sha256:3d887809810b89ed33501bcf0a9aba469b06ecd608158efce04bd6b48d8c9b08", size = 79058, upload-time = "2026-07-29T08:45:32.492Z" }, ] [[package]] name = "virtualenv" -version = "21.7.0" +version = "21.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -4992,9 +4724,9 @@ dependencies = [ { name = "platformdirs" }, { name = "python-discovery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/25/e367a7229b0914772ca8d81b41fde012d9feda68523b52644a571bb21ce8/virtualenv-21.7.0.tar.gz", hash = "sha256:7f9519b9432ff11b6e1a3e94061664efc2ff99ea21780e3cf4f6bd0a5da8b37c", size = 5527510, upload-time = "2026-07-21T13:12:14.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/fa/18004e5cb15541ad2a68ff219c755233b012b12d4ec8663d06a258082bec/virtualenv-21.7.1.tar.gz", hash = "sha256:d0dbfaa5483487baea28d7210ef8d24c9d1bd0f10f449eeb215568825a9b334e", size = 5525237, upload-time = "2026-07-30T15:40:36.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/7a/ae29312b1e88a22e81f5d21fc11526d2a114089776c2550d2b205b6c2a47/virtualenv-21.7.0-py3-none-any.whl", hash = "sha256:a8370c1c5530fbabf955e40b8fbbc68a431648b10f9433faa587db30a06e51dd", size = 5507078, upload-time = "2026-07-21T13:12:12.136Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a7/ded126c19495158a05c7202b3389139839d4cf78d622d453867778e0f7a8/virtualenv-21.7.1-py3-none-any.whl", hash = "sha256:6394973f990536e34c05157179146c020284c42fe01da1dfeb0ba16c345280d9", size = 5504576, upload-time = "2026-07-30T15:40:34.512Z" }, ] [[package]] @@ -5096,28 +4828,31 @@ wheels = [ [[package]] name = "websockets" -version = "16.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/9d/681cda21c9eee743203a6cb79b9d3d05adad9aa60ec660c6c9bf4dd619ca/websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00", size = 179600, upload-time = "2026-07-17T22:49:13.92Z" }, - { url = "https://files.pythonhosted.org/packages/fb/8d/6195a88b45e8d2a8f745fc2046e36f885a3c9763e6767d2c46229bf9510c/websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b", size = 177272, upload-time = "2026-07-17T22:49:15.453Z" }, - { url = "https://files.pythonhosted.org/packages/73/e3/fe2d498c64dea0095c9a9f9a351af4cd6eef31b618395582bc1f38ba45ff/websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175", size = 177542, upload-time = "2026-07-17T22:49:16.875Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ed/f1831681fce0e3242346e5458486003c5f124ed69e5e0b847fd029db4973/websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1", size = 187137, upload-time = "2026-07-17T22:49:18.323Z" }, - { url = "https://files.pythonhosted.org/packages/6f/79/4ff9dcc1bb46f6b4c536936dde1fd60f9b564f3304307274db97f4c9496d/websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15", size = 188374, upload-time = "2026-07-17T22:49:19.65Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/5c49b6efb36cab733d23773f6de575e1dba65736ead17d5d2b2a1daef779/websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa", size = 191155, upload-time = "2026-07-17T22:49:21.331Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f6/56ccceda3a4838d18f1d40821480da4775397e8b1eecf4031e20c50e2e90/websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab", size = 189011, upload-time = "2026-07-17T22:49:22.889Z" }, - { url = "https://files.pythonhosted.org/packages/86/d6/ad5286241a2bce1107e2798d3bfbd62cf79aee167bdb654f8cb1e9dbf949/websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847", size = 187766, upload-time = "2026-07-17T22:49:24.339Z" }, - { url = "https://files.pythonhosted.org/packages/bc/67/d65c970b7e347fdca69479beb7811c2060529956730a7a4e3ae7c66b0e31/websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428", size = 185173, upload-time = "2026-07-17T22:49:25.743Z" }, - { url = "https://files.pythonhosted.org/packages/1d/5b/14af3cd4ee69d8ea9baca58f3dc3cfb1ba78332a347fd478cb096549d60e/websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf", size = 187809, upload-time = "2026-07-17T22:49:27.147Z" }, - { url = "https://files.pythonhosted.org/packages/7b/11/be301710d70de97e3e7b3586e6d492c9c06d6a61bf1c2202c36cf0c75607/websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751", size = 186412, upload-time = "2026-07-17T22:49:28.611Z" }, - { url = "https://files.pythonhosted.org/packages/db/07/fe1435bf6fe738a3d3b54dbe0c18dabf12cba4d909ac8b58b539ce27c1f4/websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f", size = 188290, upload-time = "2026-07-17T22:49:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/8a/0a/81f394aff8efcbb01208c1ced77df0a3c7fcce584a88c7273663697946c2/websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2", size = 185844, upload-time = "2026-07-17T22:49:31.447Z" }, - { url = "https://files.pythonhosted.org/packages/39/5c/dd485b995473f415510251fe9bd708f2d24458f439fce958daf8d66dc7c6/websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383", size = 186823, upload-time = "2026-07-17T22:49:33.104Z" }, - { url = "https://files.pythonhosted.org/packages/9d/0b/f78de76ff446f1e66af12b43c48a35f31744de93cfdec2f4ea67d5d7bbf1/websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3", size = 187102, upload-time = "2026-07-17T22:49:34.616Z" }, - { url = "https://files.pythonhosted.org/packages/37/a1/4cf892007778eaf84ad162bfc98046e0ed89b63ac55949e3236626b2a23f/websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747", size = 179943, upload-time = "2026-07-17T22:49:36.213Z" }, - { url = "https://files.pythonhosted.org/packages/d9/de/6abe251d28c3a3f217096575400b27750b18e0b1d2fff3a2a239960fea07/websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7", size = 180243, upload-time = "2026-07-17T22:49:37.626Z" }, - { url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" }, +version = "17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/ea/c0f7924f7ccf005d6ad1f829971762ae751727497d6db1977ba5a635314f/websockets-17.0.tar.gz", hash = "sha256:6bbe83c4ef52a7533d2d8c6a3512b93722fd0db6bc6bc638d45edd49ef201444", size = 183456, upload-time = "2026-07-29T18:07:16.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/e3/e4f27930a556ea4039487415ed7100ce96d607b29dfc65ac309168695ba4/websockets-17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6312d9926196483550c0ad83459595dd02dd816fa0523ec91dac5601b35de2da", size = 212744, upload-time = "2026-07-29T18:04:54.041Z" }, + { url = "https://files.pythonhosted.org/packages/e6/14/2bcbc1805f1b42b94fa6fc81e7a0d1ffc1029d938cf9ce4b8e3a48875116/websockets-17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12a21ef5e185f9e0c1c9ad23649aca411b04e49e030287f0a47b889d9e1724a9", size = 210425, upload-time = "2026-07-29T18:04:55.613Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9d/a88e66b7b8581f433b990f20738045093bfc15dd3b8b939980daf793121d/websockets-17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e219be64a9dff86d33b3314ecc6c42289a2d8a447821931012f874b2cc3c70a9", size = 210692, upload-time = "2026-07-29T18:04:56.944Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/f8565de07cb99b9e9f21a6932ce87d28cd65e06bf8b9e6cfc795d7fb12ea/websockets-17.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:98e4882f2f37b4efa7e1c41eb97db1e86384b6252135ab8f5794656cb3bec1ae", size = 220018, upload-time = "2026-07-29T18:04:58.304Z" }, + { url = "https://files.pythonhosted.org/packages/be/7c/883fddde356c9366bbb1abc9a16d02e20515aadb89de3364c5dd7b9cc360/websockets-17.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:abfa93514d5d7fe50988c4b6092585da0e9a737c1063530cf62fecfe93f7acf0", size = 220295, upload-time = "2026-07-29T18:04:59.958Z" }, + { url = "https://files.pythonhosted.org/packages/9a/18/2b2c71d158206b759e79a2e606ad057a3e3f01e05353a676081417ea9bc2/websockets-17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aacbf208ef605c463e5cc888d26e25b68732baa171990339c1b4e2880f7b60dd", size = 221533, upload-time = "2026-07-29T18:05:01.734Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/d58c3f516dcfed9d98804fa25c679958df32286bfabd6029dabeec5f1ce7/websockets-17.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fdea04f18e814a15ef115356392624f8a694f29bb6b8ed65828a6d53eeb96654", size = 224312, upload-time = "2026-07-29T18:05:03.166Z" }, + { url = "https://files.pythonhosted.org/packages/77/49/33946a85a09638f046c2db6506fe53aee35f71fcef9347d343ce668c9cb5/websockets-17.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7c3b3c1fda46b2d40d57503278755f3ad47f09eec57c4f6145cd80f1c8beecf", size = 222169, upload-time = "2026-07-29T18:05:04.635Z" }, + { url = "https://files.pythonhosted.org/packages/61/e3/e2441326cd2132b4861ff1a0b03671dedacdca6e7996e913137ec1b4ad26/websockets-17.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da8b74ac47a129bcb82f40aab234ead2d31ed20566e6e75d1929ac4d61f22a55", size = 220924, upload-time = "2026-07-29T18:05:06.252Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ee/ae47d5aace0b71c7e038d00f1651086cd32fa44190f179182c58a6c5b795/websockets-17.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6e43040c1f6b0e0fced4a3020693f32914e4d57605be63da30c197bfa118c6d7", size = 218171, upload-time = "2026-07-29T18:05:07.655Z" }, + { url = "https://files.pythonhosted.org/packages/6a/99/2872777a8d96c4bc546bc79a22acd7db57aa2acddcbd3527c83515c7d789/websockets-17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8ddfc7ae598004778e8e092580aafec16ae9f8f16ebf0c178bb76292db6e8dd", size = 220970, upload-time = "2026-07-29T18:05:09.071Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8e/64472cc08da2e6ed2ee40c372abfe090e7d368965aa861dc32382aba051d/websockets-17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:180837e1f4f82fb4779fe4561d246a55028d01f7f41c4a00b24117804d382f14", size = 219572, upload-time = "2026-07-29T18:05:10.548Z" }, + { url = "https://files.pythonhosted.org/packages/a9/df/61c12777165b02a578e4a0055ccbcb48bad92f3ae4373b2bb449a28ceebf/websockets-17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4736675b7079a09b04558f1e5613dacb71165ff9868b7dd01c2488159ca5c089", size = 220342, upload-time = "2026-07-29T18:05:12.006Z" }, + { url = "https://files.pythonhosted.org/packages/58/bc/e6e60c01b6100ac9f9a1afd3391a5f3e0c72eee536429d001c4be3af7004/websockets-17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1922e2124f7eb7ca7ba203973a0b8b3f598447efe6937feaf63fbb1775341eb8", size = 221450, upload-time = "2026-07-29T18:05:13.436Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d3/64cb3002bbb6ee592591f668a2c802deccc183fbf5a41071145bdb133d57/websockets-17.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a3cfb0ea471e325b596e9259d2f35f3040ecd1896e2d608649f25748929febc0", size = 219002, upload-time = "2026-07-29T18:05:14.894Z" }, + { url = "https://files.pythonhosted.org/packages/55/08/0877015b5b252d83c7f441023e11293fd0d0be9dc05c792c5f91712c8eec/websockets-17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1a44cbbf2ab144f1ce5268c1dc4a541e9ed0cd35a892d38a9a52e3d01456cbf7", size = 219983, upload-time = "2026-07-29T18:05:16.539Z" }, + { url = "https://files.pythonhosted.org/packages/57/f8/271327f8fa4c07326ba9c79c9daea81e4c043029c6df48bbddfb0bf46649/websockets-17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c59f7a03967dcdb490098a7e684b1e691f8032835f8176d9cb3cbc654773381", size = 220259, upload-time = "2026-07-29T18:05:18.217Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8b/31e77872bc730124acd9e0af977667b9805c4450519e9bd220e4450f4749/websockets-17.0-cp312-cp312-win32.whl", hash = "sha256:67e3de3a5abbea437cd73505a2220a3fa37b3e38b68c7dd410de6fadb9492dc5", size = 213205, upload-time = "2026-07-29T18:05:19.575Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/5a5706da118fe90038a529ca43557092c1f5665876b00570d777bd19cfff/websockets-17.0-cp312-cp312-win_amd64.whl", hash = "sha256:5f7cef3e552397fc4313b1caf4fe1fabf53dfde4e4153aa1a74d73b5a246794b", size = 213502, upload-time = "2026-07-29T18:05:21.023Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d9/fd6d3c80f548dbae84687f9c50b26407707e63d624ba2edc6736c0aa68fc/websockets-17.0-cp312-cp312-win_arm64.whl", hash = "sha256:499e8536471f07de659bc3f003f1fcef60da953de8ffc26d01253828f6b0a003", size = 213430, upload-time = "2026-07-29T18:05:22.369Z" }, + { url = "https://files.pythonhosted.org/packages/9d/b4/9b5bd8ad82a7ace4e4a497aed083b6a9bf9076b1ea1a0bf5831686b4af71/websockets-17.0-py3-none-any.whl", hash = "sha256:0c24d62cafaca7dc1631e9f3bf0672fa83f010e66a2aeff4d00727b18addcd8e", size = 206871, upload-time = "2026-07-29T18:07:15.156Z" }, ] [[package]] @@ -5138,33 +4873,24 @@ version = "3.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857, upload-time = "2015-10-22T15:26:37.51Z" } -[[package]] -name = "win32-setctime" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, -] - [[package]] name = "wrapt" -version = "2.3.0rc2" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/d1/370cd471ee21bfd077a3c32e25c60366e0dc5c2df475eab98dbfa5118b3b/wrapt-2.3.0rc2.tar.gz", hash = "sha256:1fdc5475357ab9bb7131f2d70f72f55a1a7fb4ecf450b2868a61440e9ca2e9d1", size = 131510, upload-time = "2026-07-13T05:50:20.04Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/b0/c1f5a970721f06b85c0cd5142e0ff8fe067708abd779b0c4f4be7d61d09f/wrapt-2.3.0.tar.gz", hash = "sha256:681a2d0eefd721998f90642762b8e75c2159ec531b20ad5e437245ea7b06a107", size = 131509, upload-time = "2026-07-28T06:06:14.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/49/fe1c897a1a51c7ff7a70c20ab532945fb663e3c23ea5adbad5c49465a2dc/wrapt-2.3.0rc2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fd8e98222d10650038117a4d44bba463ebfdf341dd0e23434da82364f44d91b", size = 82191, upload-time = "2026-07-13T05:48:47.752Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1b/67dc64e9f97b6e6103d80409dfa105b8a40d2bb87feacd0e06da392fb75a/wrapt-2.3.0rc2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aa545b5865ab879725eb61b7170be079901577a16996a01825e2b8617ad217aa", size = 82777, upload-time = "2026-07-13T05:48:49.085Z" }, - { url = "https://files.pythonhosted.org/packages/9e/fe/9743f3f9d74e0a9c5c5719563895e9df58c8646c95c956cf4fab667b9290/wrapt-2.3.0rc2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1f50df40e79f7fc09454dc6d562fad76c7ac6d2f93359f61e2155530f899cb0b", size = 172434, upload-time = "2026-07-13T05:48:50.195Z" }, - { url = "https://files.pythonhosted.org/packages/dc/50/976976c3c99cee28a0b63d08406b83e49189c6a430adbbc202c20d900e2a/wrapt-2.3.0rc2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:87b45ac248af8fa977f2a8b86826edbf63badcbdbc76f20d87af2edbadd7512d", size = 174169, upload-time = "2026-07-13T05:48:51.679Z" }, - { url = "https://files.pythonhosted.org/packages/6e/e9/a1b3548c82b90f8ed190b3c05b3c9995c4260ac0f0a644c6002c584ce980/wrapt-2.3.0rc2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f2583f0906dfbcf55f44db7a5a90f7471b88924ae99f414c9c2d64c8bd8156d", size = 163086, upload-time = "2026-07-13T05:48:53.185Z" }, - { url = "https://files.pythonhosted.org/packages/16/44/8d27984fae74bb8ebbaa6b06157cf94c97ef0ce764e2497c21ce4329bc9e/wrapt-2.3.0rc2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f65a06464eb6f932daf82c275e76b6e9406fe1025cdc31ece5dbc310da37ab98", size = 171939, upload-time = "2026-07-13T05:48:54.493Z" }, - { url = "https://files.pythonhosted.org/packages/b8/b0/e1ed933e871d9a76b41c8112bb5bbefc035aab1bccce50bd855d52fed78a/wrapt-2.3.0rc2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a70051c361b763a8389b89c2cbd1c5f555924ed01e5a113bb0554ac9cc7377e9", size = 161163, upload-time = "2026-07-13T05:48:55.736Z" }, - { url = "https://files.pythonhosted.org/packages/d8/1f/97c7a3e0cd0df429ab75d6cabdfb2a76fa992e0614f15517ebb4a6fbaa73/wrapt-2.3.0rc2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e6595f3a161b056750f558ba02749fa0c3c3cfb410c9cc0cce756232a38f388", size = 170582, upload-time = "2026-07-13T05:48:57.059Z" }, - { url = "https://files.pythonhosted.org/packages/d1/71/04af17fcaded6c659fe00153bcc4de0c93cadd36c9986b4438b08c9162ed/wrapt-2.3.0rc2-cp312-cp312-win32.whl", hash = "sha256:ef50260aeb9585d6ce4d4d5f9fdb33d3933f5768feeb82e31971d97823a393aa", size = 78363, upload-time = "2026-07-13T05:48:58.254Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a7/78b0a679569a93bb4b933e46a8ff03d3acdb9548e0ccc1fa0251920726f7/wrapt-2.3.0rc2-cp312-cp312-win_amd64.whl", hash = "sha256:6034972419dfc7e73dc8d901dd47b6ae99a33b270c1c3736f59927c78d4c8e2f", size = 81222, upload-time = "2026-07-13T05:48:59.459Z" }, - { url = "https://files.pythonhosted.org/packages/70/c6/f1fd8ecb62fd5661a45514fab46d24fbed5afc25dd11368b45c928c811da/wrapt-2.3.0rc2-cp312-cp312-win_arm64.whl", hash = "sha256:ccfd86c2abc39e1629c5f1423fade1c6a930442872b0edd65015465413e1e235", size = 80196, upload-time = "2026-07-13T05:49:00.663Z" }, - { url = "https://files.pythonhosted.org/packages/db/0b/31d10370b50f53c884bd089e3566c40968c883feeb32b2fcee871d52be69/wrapt-2.3.0rc2-py3-none-any.whl", hash = "sha256:9b477192c1d0aaaf0956cbe6a377e9d62af87401a70f71d392863be70b1ff834", size = 61907, upload-time = "2026-07-13T05:50:18.734Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4a/d17a0fad1bf1c5f2c887ff71fef75654141b0880bff71d157d955b5bec3a/wrapt-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a45ffae742ce91a16e11cb6c7cd71e7f9994f3cbd283b962ab093f5c6dcf525", size = 82139, upload-time = "2026-07-28T06:04:35.082Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/51b92daaf6defb57f4dc56bdcce985400f75c6984a03ca5e78ccac717028/wrapt-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:69e477046f2237ef0bc6547544ee73008dc764ca26eff44f09e976d221b34d5d", size = 82723, upload-time = "2026-07-28T06:04:36.502Z" }, + { url = "https://files.pythonhosted.org/packages/28/7f/cfd9bc4b1f5e424eeea83d0493e43f3b1b02707ce8e50c47945873982bd5/wrapt-2.3.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d221a6e6ddd302b8397433184e96b59f259f50024b854db1c411a881586b6b8", size = 172381, upload-time = "2026-07-28T06:04:37.674Z" }, + { url = "https://files.pythonhosted.org/packages/cb/89/ff7814f6eb6856b479946117d1138a2fbb46cdb6b1f379db359056c69743/wrapt-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:392158c9a7f2ab1b8699418bfc0fe6f83548788c418b27d7bf2019ad3405cebb", size = 174120, upload-time = "2026-07-28T06:04:38.987Z" }, + { url = "https://files.pythonhosted.org/packages/12/1e/8eded8615d39e3ce81f626937a3a87b280a2a86239a2bf14a4b4bb345034/wrapt-2.3.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e5301c35cf75655eb33498f2bd6ae8703ca19940e3167dc9cdf740c712a39c60", size = 163035, upload-time = "2026-07-28T06:04:40.361Z" }, + { url = "https://files.pythonhosted.org/packages/35/ea/a0af2d9da62897af2a055484920de05dade30d2ba2c0d65cbdea875d3d8b/wrapt-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:418f54bb09d1762db02c7009b4051149893af3153a87f92d70356703c11eea02", size = 171887, upload-time = "2026-07-28T06:04:41.614Z" }, + { url = "https://files.pythonhosted.org/packages/7e/dd/63cd4c864c65ef4906df64bd2d378f4a62b54f28063f282dfb3bf93caead/wrapt-2.3.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1598becd30f8f2777d18564064eb4f4dbe1ab0e05a8f09786d0ef505ac782bf3", size = 161113, upload-time = "2026-07-28T06:04:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ee/82f1fc9e431b5c2c5a6d201aa865dbeae3984c311c6d11a185f0c8367cf6/wrapt-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3da470536bf9645143323dd41b32db55c6f4304ad382094c1a1da8a92061e10d", size = 170530, upload-time = "2026-07-28T06:04:44.212Z" }, + { url = "https://files.pythonhosted.org/packages/37/a5/5dc590e863a419930d988f8b7ca3e75a6befcfb10b6003b3a152f3d5f732/wrapt-2.3.0-cp312-cp312-win32.whl", hash = "sha256:fb8e2e6704a1e0b1b989546c69e2688371ef4a07fa5f61bde3eb6211186f5ac1", size = 78323, upload-time = "2026-07-28T06:04:45.484Z" }, + { url = "https://files.pythonhosted.org/packages/51/f9/4a6925a07951df56394f7e6ebe14f69f1c5ef9d87aa63e0839acf15aa63a/wrapt-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:cdc021cb0b62471d6aac7f2bd92f3b4658073775f9ee7fcd325c511129e7bcc8", size = 81180, upload-time = "2026-07-28T06:04:47.021Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4f/8b5de0395b2a72216751d41c9861df6facaeb611b619d8810ed2b3b23eb2/wrapt-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:67bfe2485f50368c3fcd2275fc1fd100e350d601e0058921a7c82678a465aeab", size = 80155, upload-time = "2026-07-28T06:04:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/00/39/3daf9f47be208606586de4568ba6713db53ebc8fd7a575aea1fe57983b69/wrapt-2.3.0-py3-none-any.whl", hash = "sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2", size = 61866, upload-time = "2026-07-28T06:06:12.9Z" }, ] [[package]] @@ -5286,28 +5012,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0 wheels = [ { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, ] - -[[package]] -name = "zstandard" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738, upload-time = "2025-09-14T22:16:56.237Z" }, - { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" }, - { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019, upload-time = "2025-09-14T22:16:59.302Z" }, - { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" }, - { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148, upload-time = "2025-09-14T22:17:03.091Z" }, - { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652, upload-time = "2025-09-14T22:17:04.979Z" }, - { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" }, - { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" }, - { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008, upload-time = "2025-09-14T22:17:13.627Z" }, - { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517, upload-time = "2025-09-14T22:17:16.103Z" }, - { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292, upload-time = "2025-09-14T22:17:17.827Z" }, - { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" }, - { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922, upload-time = "2025-09-14T22:17:24.398Z" }, - { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276, upload-time = "2025-09-14T22:17:21.429Z" }, - { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679, upload-time = "2025-09-14T22:17:23.147Z" }, -] From 85e4e66b8c3d21dcba02fe388b116029a08e31fe Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Thu, 30 Jul 2026 21:38:47 +0000 Subject: [PATCH 18/22] fix(ernie-vl): preserve packed rotary embeddings with CP Signed-off-by: svcnemo-autobot --- .../ernie_vl/modeling_ernie45_vl/model.py | 7 +-- .../models/ernie_vl/test_ernie45_vl_bridge.py | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py b/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py index 668975c485..e6fec4f8c5 100644 --- a/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py +++ b/src/megatron/bridge/models/ernie_vl/modeling_ernie45_vl/model.py @@ -178,12 +178,13 @@ def forward( freq_allocation instead. cp_group: Context parallel group. return_raw_freqs: Ignored because ERNIE uses interleaved rotary embeddings. - packed_seq: Ignored because ERNIE returns materialized rotary embeddings. + packed_seq: Whether the sequence uses THD packing. Packed sequences retain + their full rotary embedding for packed context-parallel handling. Returns: Tensor: RoPE embedding of shape [seq_len, batch, 1, head_dim]. """ - del return_raw_freqs, packed_seq + del return_raw_freqs device = self.inv_freq.device seq = position_ids.to(device=device, dtype=self.inv_freq.dtype) # seq: [3, bs, seq_len] @@ -242,7 +243,7 @@ def forward( if cp_group is None: cp_group = self.cp_group - if cp_group is not None and cp_group.size() > 1: + if cp_group is not None and cp_group.size() > 1 and not packed_seq: emb = get_pos_emb_on_this_cp_rank(emb, 0, cp_group) return emb diff --git a/tests/unit_tests/models/ernie_vl/test_ernie45_vl_bridge.py b/tests/unit_tests/models/ernie_vl/test_ernie45_vl_bridge.py index cce4a23365..cbf0737800 100644 --- a/tests/unit_tests/models/ernie_vl/test_ernie45_vl_bridge.py +++ b/tests/unit_tests/models/ernie_vl/test_ernie45_vl_bridge.py @@ -33,6 +33,7 @@ ErnieMultiTypeMoE, MultiTypeMoeSubmodules, ) +from megatron.bridge.models.ernie_vl.modeling_ernie45_vl.model import ErnieMultimodalRotaryEmbedding def _make_vision_config(): @@ -469,6 +470,52 @@ def test_offset_row_parallel_mapping_resolve(self): assert "64" in resolved.hf_param +class TestErnieMultimodalRotaryEmbedding: + """Test ERNIE multimodal rotary context-parallel handling.""" + + @pytest.fixture + def rotary_embedding(self): + """Create a CPU rotary embedding without invoking the CUDA constructor.""" + rotary_embedding = ErnieMultimodalRotaryEmbedding.__new__(ErnieMultimodalRotaryEmbedding) + torch.nn.Module.__init__(rotary_embedding) + rotary_embedding.inv_freq = torch.tensor([1.0, 0.5]) + rotary_embedding.seq_len_interpolation_factor = None + rotary_embedding.freq_allocation = 0 + rotary_embedding.cp_group = None + return rotary_embedding + + @pytest.fixture + def position_ids(self): + """Create distinct temporal, height, and width positions.""" + return torch.arange(12).reshape(3, 1, 4) + + def test_unpacked_sequence_slices_context_parallel_embedding(self, rotary_embedding, position_ids): + cp_group = Mock() + cp_group.size.return_value = 2 + + with patch( + "megatron.bridge.models.ernie_vl.modeling_ernie45_vl.model.get_pos_emb_on_this_cp_rank", + side_effect=lambda embedding, *_: embedding[:2], + ) as get_cp_embedding: + output = rotary_embedding(position_ids, [1, 1, 0], cp_group=cp_group) + + assert output.shape == (2, 1, 1, 4) + get_cp_embedding.assert_called_once() + assert get_cp_embedding.call_args.args[1:] == (0, cp_group) + + def test_packed_sequence_retains_full_context_parallel_embedding(self, rotary_embedding, position_ids): + cp_group = Mock() + cp_group.size.return_value = 2 + + with patch( + "megatron.bridge.models.ernie_vl.modeling_ernie45_vl.model.get_pos_emb_on_this_cp_rank" + ) as get_cp_embedding: + output = rotary_embedding(position_ids, [1, 1, 0], cp_group=cp_group, packed_seq=True) + + assert output.shape == (4, 1, 1, 4) + get_cp_embedding.assert_not_called() + + class TestErnie45VLModelProvider: """Test Ernie45VLModelProvider class.""" From 9b2137ac5e500b0e89f0b1f6bf6f9f8f017e1f82 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Fri, 31 Jul 2026 01:28:10 +0000 Subject: [PATCH 19/22] chore(deps): record MCore validation heads Signed-off-by: svcnemo-autobot --- .dev.commit | 2 +- .main.commit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.dev.commit b/.dev.commit index c97bfe97a8..204e2f2f04 100644 --- a/.dev.commit +++ b/.dev.commit @@ -1 +1 @@ -95e4bafebaa799d166975ef82066a3c46648e004 +af91b6b5cc5aec01458b8e6d24ccb0f4717e49e3 diff --git a/.main.commit b/.main.commit index 1d8ed2822b..e48a0e4d77 100644 --- a/.main.commit +++ b/.main.commit @@ -1 +1 @@ -175b4ccdfe386ff2fe497c5496ca5e999f47d9fa +6513e3e23d6b5eda6a1c934990b15e804237732b From 60745957b716411750b169fec88cc0b1d3c5ec2c Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Fri, 31 Jul 2026 01:39:23 +0000 Subject: [PATCH 20/22] chore(deps): validate MCore expert TP fix Signed-off-by: svcnemo-autobot --- 3rdparty/Megatron-LM | 2 +- uv.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/3rdparty/Megatron-LM b/3rdparty/Megatron-LM index 95e4bafeba..af91b6b5cc 160000 --- a/3rdparty/Megatron-LM +++ b/3rdparty/Megatron-LM @@ -1 +1 @@ -Subproject commit 95e4bafebaa799d166975ef82066a3c46648e004 +Subproject commit af91b6b5cc5aec01458b8e6d24ccb0f4717e49e3 diff --git a/uv.lock b/uv.lock index f3e583ab77..d203398dbe 100644 --- a/uv.lock +++ b/uv.lock @@ -733,14 +733,14 @@ wheels = [ [[package]] name = "cuda-tile" -version = "1.6.0rc1" +version = "1.6.0rc3" source = { registry = "https://pypi.nvidia.com/" } dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:2603e1019d9b4982fe55842d45fb74d5b41b12e75e52e47bd1687ac2f696b36b" }, - { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:2bc3b5ef6acd7cfde34ad6ef0f487760fab629b98f6ebcb2f4b85c4022385264" }, + { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc3-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:614664bec77132efe3643a51372ee9af32615cb9405e6d4c086d99eae338a984" }, + { url = "https://pypi.nvidia.com/cuda-tile/cuda_tile-1.6.0rc3-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:bf13ab25918ab027e95948d57216a4a9e96c82a5eeb587e1051373e268ad7973" }, ] [[package]] From 6385511fa13bfd0573113df67ac9b68758152cf5 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Fri, 31 Jul 2026 12:57:45 +0000 Subject: [PATCH 21/22] fix(gemma-vl): select available attention backend Signed-off-by: svcnemo-autobot --- .../bridge/recipes/gemma3_vl/h100/gemma3_vl.py | 12 ++++++------ tests/unit_tests/recipes/test_gemma3_vl_recipes.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/megatron/bridge/recipes/gemma3_vl/h100/gemma3_vl.py b/src/megatron/bridge/recipes/gemma3_vl/h100/gemma3_vl.py index 3161d956fe..56637c446e 100644 --- a/src/megatron/bridge/recipes/gemma3_vl/h100/gemma3_vl.py +++ b/src/megatron/bridge/recipes/gemma3_vl/h100/gemma3_vl.py @@ -70,7 +70,7 @@ def gemma3_vl_4b_sft_1gpu_h100_bf16_config() -> ConfigContainer: cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" @@ -182,7 +182,7 @@ def gemma3_vl_12b_sft_4gpu_h100_bf16_config() -> ConfigContainer: cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" @@ -294,7 +294,7 @@ def gemma3_vl_27b_sft_16gpu_h100_bf16_config() -> ConfigContainer: cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" @@ -415,7 +415,7 @@ def gemma3_vl_4b_peft_1gpu_h100_bf16_config(peft_scheme: str | PEFT = "lora") -> cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" @@ -536,7 +536,7 @@ def gemma3_vl_12b_peft_1gpu_h100_bf16_config(peft_scheme: str | PEFT = "lora") - cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" @@ -657,7 +657,7 @@ def gemma3_vl_27b_peft_4gpu_h100_bf16_config(peft_scheme: str | PEFT = "lora") - cfg.model.cuda_graph_warmup_steps = 3 # Kernel selections - cfg.model.attention_backend = AttnBackend.fused + cfg.model.attention_backend = AttnBackend.auto cfg.model.cross_entropy_loss_fusion = True cfg.model.cross_entropy_fusion_impl = "native" diff --git a/tests/unit_tests/recipes/test_gemma3_vl_recipes.py b/tests/unit_tests/recipes/test_gemma3_vl_recipes.py index 3dbecf8007..fe2ba587d8 100644 --- a/tests/unit_tests/recipes/test_gemma3_vl_recipes.py +++ b/tests/unit_tests/recipes/test_gemma3_vl_recipes.py @@ -97,7 +97,7 @@ def _assert_basic_config(cfg): assert cfg.tokenizer is not None assert cfg.checkpoint is not None assert cfg.rng is not None - assert cfg.model.attention_backend is AttnBackend.fused + assert cfg.model.attention_backend is AttnBackend.auto assert cfg.dataset.enable_in_batch_packing is False assert cfg.train.global_batch_size >= 1 From 9ee600113cff48a2310d45f7e1ef3a7d09d13a49 Mon Sep 17 00:00:00 2001 From: svcnemo-autobot Date: Fri, 31 Jul 2026 13:17:38 +0000 Subject: [PATCH 22/22] fix(gemma-vl): permit automatic attention selection Signed-off-by: svcnemo-autobot --- .../bridge/models/gemma_vl/gemma3_vl_provider.py | 4 ++-- .../models/gemma_vl/test_gemma3_vl_provider.py | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/megatron/bridge/models/gemma_vl/gemma3_vl_provider.py b/src/megatron/bridge/models/gemma_vl/gemma3_vl_provider.py index 57a80b55c0..95490319c0 100644 --- a/src/megatron/bridge/models/gemma_vl/gemma3_vl_provider.py +++ b/src/megatron/bridge/models/gemma_vl/gemma3_vl_provider.py @@ -61,8 +61,8 @@ class Gemma3VLModelProvider(Gemma3ModelProvider): def provide(self, pre_process=None, post_process=None, vp_stage=None) -> Gemma3VLModel: if not self.is_vision_language: raise ValueError("Gemma 3 VL requires is_vision_language=True.") - if self.attention_backend is not AttnBackend.fused: - raise ValueError("Gemma 3 VL requires the fused attention backend for attention bias.") + if self.attention_backend not in (AttnBackend.auto, AttnBackend.fused): + raise ValueError("Gemma 3 VL requires automatic or fused attention for attention bias.") if self.context_parallel_size != 1: raise ValueError("Gemma 3 VL does not support context parallelism with attention bias.") diff --git a/tests/unit_tests/models/gemma_vl/test_gemma3_vl_provider.py b/tests/unit_tests/models/gemma_vl/test_gemma3_vl_provider.py index 37abd7a87e..c62472f089 100644 --- a/tests/unit_tests/models/gemma_vl/test_gemma3_vl_provider.py +++ b/tests/unit_tests/models/gemma_vl/test_gemma3_vl_provider.py @@ -213,6 +213,20 @@ def test_gemma3_vl_rejects_causal_override(self): with pytest.raises(ValueError, match="requires is_vision_language=True"): provider.provide() + def test_gemma3_vl_accepts_auto_attention_override(self): + """Test that automatic backend selection preserves the VL attention bias.""" + provider = Gemma3VLModelProvider( + num_layers=28, + hidden_size=2560, + num_attention_heads=10, + ) + provider.attention_backend = AttnBackend.auto + + with patch("megatron.bridge.models.gemma_vl.gemma3_vl_provider.Gemma3VLModel") as model: + provider.provide() + + model.assert_called_once() + def test_gemma3_vl_rejects_flash_attention_override(self): """Test that runtime overrides cannot select a backend that drops the VL mask.""" provider = Gemma3VLModelProvider( @@ -222,7 +236,7 @@ def test_gemma3_vl_rejects_flash_attention_override(self): ) provider.attention_backend = AttnBackend.flash - with pytest.raises(ValueError, match="requires the fused attention backend"): + with pytest.raises(ValueError, match="requires automatic or fused attention"): provider.provide() def test_gemma3_vl_custom_vision_projector_config(self):